テレビのアニメはどこから来る? / 第13話

第13話:イトは、上映ポスターを最初の封筒から抜いた|Webサーバーは何を返す?

ピコルート第13話。pageを求めるGETへ、目を引くposterを先に返すか、HTMLを返してbrowserに材料を見つけさせるか。本番まで8秒、イトが最初のresponseを選びます。

WebサーバーHTML静的ファイルレスポンス10分更新

上映posterは、最初の封筒に入らなかった。

イトが、自分で抜いた。

新しい端末で案内pageを開くpreviewまで、あと八秒。

Web server受付には、第12話の最後に届いたrequestが光っている。

GET /screenings/finale

受付の棚には、四つの材料があった。

HTML。

CSS。

JavaScript。

上映posterのimage。

posterは、四色の中でいちばん大きく、いちばん目を引いた。これを先に返せば、真っ白な画面を一瞬で変えられる。

イトはposter cardを、最初のresponse envelopeへ入れた。

イト

pageを見たいんだから、まず一番目立つ絵を返そう

ユイ

request targetは、posterのURLでしょうか

ピコ

何がほしいrequestか、封筒をもう一度見よう

残り七秒。

GETは、targetのrepresentationを求める

requestにはmethodとtargetがある。

今回のmethodはGET。

targetは/screenings/finaleというpage resourceだ。

RFC 9110のGETは、target resourceのcurrent selected representationを転送するよう求めるmethodとして定められている。

resourceそのものを箱へ入れて運ぶのではない。

通信できる形で、そのresourceの状態を表すrepresentationを返す。

一つのresourceに複数のrepresentationがあり、条件に応じて選ばれることもある。

このfictional siteでは、/screenings/finaleのnavigationへHTML representationを返す契約にしている。

poster imageには、別のtargetがある。

GET /media/finale-poster

posterをpage targetのresponseへそのまま入れれば、browserはimageを受け取れる。

けれど、heading、上映時刻、字幕button、posterを置く場所を示すpage structureは届かない。

マコト

目立つ材料と、いま頼まれたresourceは別だね

イト

pageのrequestへposterを返すと、posterを見るだけでpageにはならないのか

残り六秒。

HTMLには、次のrequestの手がかりがある

HTML cardを開くと、pageのstructureと材料の場所が書かれていた。

<link rel="stylesheet" href="/styles/screening.css">

<h1>最終話上映</h1>
<button id="caption-toggle">字幕を表示</button>

<img src="/media/finale-poster" alt="最終話の上映poster">
<script src="/scripts/captions.js" defer></script>

HTMLは、CSSやimageそのものを必ずすべて含むわけではない。

このpageでは、hrefやsrcに別resourceのURLがある。

browserがdocumentを処理すると、必要なresourceをそれぞれ取りに行く。

HTML Living Standardのstylesheet linkにはstylesheet resourceの取得と適用、script elementには外部scriptの取得、imageにはimgとimage sourceの処理が定められている。

ただし、すべてのsiteが同じfile分割を使うわけではない。

CSSやJavaScriptをHTML内へ入れるpageも、いくつかのfileをまとめるsiteも、HTMLをその場で生成するWeb applicationもある。

ここで追うのは、このpageが選んだ「HTMLから別resourceを参照する」設計だ。

三つの最初の封筒

残り五秒。

ピコが、最初のnavigation responseへ入れられる三枚の札を並べた。

  1. posterだけ
  2. 独自の全部入り箱
  3. targetに対応するHTML

一枚目なら、最初から派手なposterが見える。けれどpage structureも字幕buttonも届かない。

二枚目なら、HTML、CSS、JavaScript、imageを独自形式の一箱へ入れられる。けれど、このpageを開くbrowserは、その箱をHTML documentとして処理する約束を持っていない。

三枚目なら、最初の瞬間はplainなheadingやbuttonだけになる。posterは一呼吸遅れる。その代わり、browserはHTMLを読み、次に必要なtargetを自分で見つけられる。

poster cardの色が、イトの指を照らしていた。

最終話のpageで、最初に見てほしい絵だ。

それを封筒から抜けば、previewの最初は地味になる。

ピコ

どのresourceを返す?

ユイ

目立つ順ではなく、requestとresponseがつながる順を選ぶ場面ですね

イトは、poster cardを最初のenvelopeから抜いた。

「posterは、posterのrequestへ返す」

image shelfへ戻し、代わりにHTML cardを入れた。

最初にstructure、次に三つのrequest

残り三秒。

Web serverがHTML responseを返す。

新端末のbrowserに、まだ色のないstructureが現れた。

最終話上映

字幕を表示

posterの場所は空いている。

その直後、HTML内のURLから三つのrequestが受付へ届いた。

GET /styles/screening.css
GET /scripts/captions.js
GET /media/finale-poster

イトは、targetを一つずつ照合する。

CSS requestへstylesheet。

JavaScript requestへ字幕controlのscript。

image requestへ、さっき棚へ戻したposter。

Web serverはHTMLだけを返す名前ではない。

このsiteでは、request targetに応じてHTML、CSS、JavaScript、imageなどのresource representationを返す。

保存済みfileを返すこともあれば、別の処理と連携してresponseを生成することもある。「Web serverなら必ず棚のstatic fileだけ」という意味ではない。

残り一秒。

CSSが届き、headingとbuttonの見た目が整う。

JavaScriptが届き、字幕buttonの反応がつながる。

最後にposterが空いたframeへはまった。

イトが大きな上映poster cardを最初のresponse envelopeから抜いて棚へ戻し、HTML skeleton cardをbrowserへ返した後、browserから伸びた三本のrequestへCSS、JavaScript、posterをtarget別に返している
目立つ材料を先に押し込まず、page targetへHTMLを返し、そこから見つかったresource requestへ一つずつ応える。

posterを遅らせて、pageを完成させた

preview開始の光が点いた。

最初の一瞬、画面にあったのはheading、案内文、buttonのstructureだけだった。

そのあと、色と余白が重なる。

字幕buttonが動く。

最後にposterが現れる。

イトが最初のenvelopeへposterを残していたら、派手な一枚絵は見えただろう。

けれど、pageとして必要なheadingも、時刻も、字幕controlもなかった。

posterを遅らせたことで、browserはHTMLから材料の場所を知り、正しいtargetへrequestを送れた。

最初のresponseだけでpageの全仕事が終わるとは限らない。

page targetへHTML

HTMLから別resourceのURLを発見

resourceごとにrequest

Web serverがtarget別にresponse

browserがpageへ反映

イトは、完成したpageより、受付の記録を見た。

CSSとJavaScriptのresponseはすぐに届いている。

poster imageだけ、長いrailを走っていた。

同じposterを、次の端末も、その次の端末も遠い棚へ取りに行く。

HTMLを最初に返す順番は直せた。

でも、大きなimageが遠くから届く距離は残った。

「このposterだけ、近くの棚にcopyを置けないのかな」

次回:近くの分室はなぜ速い?

Web serverは、page targetへHTMLを返し、そこから届いたresource requestへCSS、JavaScript、imageを返した。

次に残ったのは、同じ大きなfileを遠いoriginから何度も運ぶ時間だ。

利用者の近くにcopyを置き、近い場所から返す仕組みとは何か。

次回、ピコルート第14話。

遠いposterを、近くの分室から返す。

画面のむこう側をもっと知る

物語で見たWeb server、HTML、static file、resource requestを図で整理するなら、Webサーバーとはで確かめられます。

この物語を、解説で深める

第13話で生まれた疑問を、解説記事で少し深く見ていきます。物語で感じた不思議さを残したまま、言葉と仕組みを順番に整理しましょう。

Webサーバーとは|ブラウザへWebページの材料を返す係を読む