自身のアウトプットも兼ねてつれづれと書き続けるブログ。
HTML解体新書ー仕様から紐解く本格入門 [ 太田 良典 ]
前回からの続きです。
HTTP[06]
HTTP(Hypertext Transfrt Protocol ハイパーテキストトランスファープロトコル)
ハイパーテキストを転送するための通信プロトコルです。ユーザーエージェントがサーバーに接続しメッセージをやり取りします。
HTTPメッセージ
ユーザーエージェントがサーバーに送るメッセージをHTTPリクエスト(HTT Prequest)と呼びます。
メッセージの先頭の行を開始行(start-line)と呼びリクエストの場合、開始行はリクエスト行(request-line)と呼びます。リクエスト行にはメソッド(method)リクエストターゲット(request-target)HTTPバージョン(HTTP version)の情報が含まれ、末尾の改行1つで終わります。
【メソッド】
- GET:リクエストターゲットで指定したソースを取得。
- POST:サーバーのデータを送信。
- HEAD:GETとほぼ同じだが、サーバーからヘッダー情報のみ送られてくる。
- OPTION:リクエストターゲットに対して、どのようなリクエストが可能か問い合わせる。CORSのプリフライトリクエスト*として用いられる。
*プリフライとリクエストは、CORSの通信の通信に先立ち、通信を許可しても良いか問い合わせる。
【リクエストヘッダー】
リクエスト行の後、リクエストヘッダー(request-header)が続きます。記述はフィールド名:フィールドの値の形式で、末尾に改行1つを置きます。
フィールドは複数置くことも可能。最後のフィールドには改行を2つ連続させます。
よく利用するリクエストヘッダーは以下の通りです。
- Host:接続先のホスト名とポート番号を指定。(ポート番号は省略可能)
- Content-Length:メッセージボディが存在する場合、そのデータの長さをオクテット単位(1オクテット=8ビット)で指定。
- User-Agent:ユーザーエージェント名を指定。サーバーはこのフィールドの値によって、コンテントの出しわけをすることもあります。
- Accept:受入可能なMIMEタイプを指定
【リクエストボディ】
メソッドがPOSTの場合、ヘッダーフィールドの後にリクエストボディが続きます。
末尾の行がリクエストボディ(メッセージボディ)です。
【HTTPレスポンス】
サーバからユーザーエージェントに返ってくるメッセージをHTTPレスポンス(HTTP response)といいます。
Status: HTTP/1.1 200 OK
Content-Type:text/html; charset=utf-8
Content-Length:7887
Date:Thu, 10 Agu 2023 19:56:21 GMT
<!DOCTYPE html>
<html lang="ja">
・・・
【ステータス行】
レスポンスの開始行はステータス行(status-line)と呼びます。ステータス行にはHTTPバージョン、ステータスコード(status-code)、リーズンフレーズ(reason-phrase)が含まれます。
よく使われるステータスコードには以下の世なものがあります。
- 200(OK):リクエストに成功し、正常なレスポンスを返した状態
- 301(Moved Permanently):リクエストターゲットのリソースが別の場所に恒常的に移動したことを表す。
- 302(Found):別の場所のリソースを見に行くべきであることを示す。301と似ているが、恒久的な移動ではなく一時的な移動を表す。
- 404(Not Found):返すべきリソースが見つからなかった状態。ほとんどの場合、URLの誤りが原因。
- 500(Internet Server Error):サーバー側で何らかのエラーが発生した状態。
【レスポンスヘッダー】
ステータス行の後にレスポンスヘッダーが続きます。よく利用されるレスポンスヘッダーは以下のものになります。
- Data:レスポンスを作成した日時。
- Last-Modified:リソースの最終更新日を示す。
- Content-Length:メッセージボディが存在する場合、そのデータの長さをオクテット単位で指定。
- Location:ステータスコード300番台の場合に移動するURLを示す。
- Content -type:リソースの種類を示すMIMEタイプを指定。
【レスポンスボディ】
レスポンスヘッダーの後日はレスポンスボディが続きます。レスポンスボディにはリソースの本体が入ります。レスポンスボディが無い場合もあり、その場合のステータスコードは204となります。
MIMEタイプ
HTTPレスポンスにあるContent-typeフィールドに指定する値をメディアタイプ(media type)もしくはMIMEタイプ(MIME type)と呼ばれます。
よく利用される代表的なMIMEタイプは以下の通りです。
- text/html(HML文章)
- application/xhtml+xml(XHTML文章)
- application/pdf(PDF文章)
- image/png, image/jpeg, image/gif(PNG画像、JPEG画像、GIF画像)
- image/svg+xml(SVC画像)
- application/javascript(Javascriptのファイル)
- application/json(JSON形式 Javascript Object Notation)
- text/css(スタイルシート)
- application/octet-stream(凡用的なバイナリーデータ)
【MIMEタイプが不明な場合】
MIMEタイプの指定がなかったり、ブラウザーにとって未知のものであった場合、データの扱い方の判断が出来ません。この場合MIMEsniffingの処理を行ってデータの種類の判別を行います。
MIMEsniffingとはブラウザーが実際にコンテンツを読み込み、その内容からMIMEタイプを推測する処理である。