Quantcast
Channel: program-htmlの日記
Viewing all articles
Browse latest Browse all 21

HTTP-プログラミング・本のブログ

$
0
0

自身のアウトプットも兼ねてつれづれと書き続けるブログ。


HTML解体新書ー仕様から紐解く本格入門 [ 太田 良典 ]

 

前回からの続きです。

HTTP[06]

HTTP(Hypertext Transfrt Protocol ハイパーテキストトランスファープロトコル

ハイパーテキストを転送するための通信プロトコルです。ユーザーエージェントがサーバーに接続しメッセージをやり取りします。

HTTPメッセージ

ユーザーエージェントがサーバーに送るメッセージをHTTPリクエスト(HTT Prequest)と呼びます。

 GET /index.html HTTP/1.0

 HOST: nekonikoban.com

 use-Agent: curl/0.00.1

メッセージの先頭の行を開始行(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の場合、ヘッダーフィールドの後にリクエストボディが続きます。

 GET /index.html HTTP/1.0

 HOST: nekonikoban.com

 use-Agent: curl/0.00.1

 name=nekonikoban&age=67

末尾の行がリクエストボディ(メッセージボディ)です。

【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タイプは以下の通りです。

MIMEタイプが不明な場合】

MIMEタイプの指定がなかったり、ブラウザーにとって未知のものであった場合、データの扱い方の判断が出来ません。この場合MIMEsniffingの処理を行ってデータの種類の判別を行います。

MIMEsniffingとはブラウザーが実際にコンテンツを読み込み、その内容からMIMEタイプを推測する処理である。

 

HTTP仕様を読む[[07]


Viewing all articles
Browse latest Browse all 21

Trending Articles