0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HTTPの理解

Posted at

HTTP

Webサイトの閲覧は、WebブラウザがWebサーバーに要求を送り、Webサーバーはその要求に対して応答を返す、というやりとりが行われている。このやりとりの手順ややりとりを決めているのが**HTTP(HyperText Transfer Protocol)**である。

クライアントとサーバー間のやりとり

Webサイトを閲覧する際は、大きく分けて5つのステップがある。

  1. Webブラウザのアドレス蘭にURLを入力、あるいはWebサイト内のリンクをクリック
  2. URLやリンクにもとづいてWebサーバーにデータを要求
  3. Webサーバは要求内容を解析
  4. 解析結果から、要求データをWebブラウザへ応答
  5. Webブラウザは、受け取ったデータを解析し、Webページとして表示

HTTPが利用されるのは、2と4のステップである。

HTTPメッセージ

WebブラウザとWebサーバーでやりとりする際、「HTTPメッセージ」が利用される。HTTPメッセージは、Webブラウザからの要求である「HTTPリクエスト」と、Webサーバーからの応答である「HTTPレスポンス」の2種類に分けられる。

HTTPリクエスト

HTTPリクエストは、以下の3つに分けることができる。

  1. リクエスト行
  2. メッセージヘッダー
  3. メッセージボディ
    834EEB6B-9B0C-443E-A94B-7C02B8D486FF.png

1は、Webサーバーに対してどのような処理をして欲しいかというリクエストの要求内容を伝える
2は、Webブラウザの種類やバージョン、対応するデータ形式など付加的な情報を伝える
3は、Webページ内のフォームなどに入力したテキストをWebサーバーに送る目的で使用される

HTTPレスポンス

HTTPレスポンスはHTTPリクエストと同様の構成であるが、内容が一部異なる。

1では、Webブラウザのリクエストに対してWebサーバー内での処理の結果を伝える
2では、Webサーバーの種類や、送信するデータ形式など付加的な情報を伝える
3では、リクエストされたHTMLなどのデータが格納される

HTMLのデータを受け取ったWebブラウザは内容を解析し、受け取ったHTML内に画像などのリンクが存在する場合は、サイドWebサーバーへHTTPリクエストを送信する。リクエストとレスポンスを繰り返し行うことで、Webサイトを閲覧できる。

ステータスコード

HTTPレスポンス内には、ステータスコードとよばれるHTTPリクエストに対するWebサーバーでの処理結果が含まれている。ステータスコードは3桁の数字からなり、処理内容によって100番台から500番台までの5つに分類されている。

  • 100番台:
    HTTPリクエストを処理中であることの通知。Webサーバーがデータを受け入れ可能かどうかを確認するための一次応答(情報)
  • 200番台:
    HTTPリクエストに対して、正常に処理した場合の通知(成功)
  • 300番台:
    HTTPリクエストに対して、転送処理などのWebブラウザで追加の処理が必要な通知。WebサイトのURLが変更されている場合など(転送)
  • 400番台:
    Webブラウザのエラーの通知。リクエストされたHTMLファイルがWebサーバーに存在しない場合(404 Not Found)など(クライアントエラー)
  • 500番台:
    Webサーバーのエラーの通知。Webサーバーがエラーによって応答できない場合や、高負荷状態の場合(サーバーエラー)

代表的なステータスコード

番号 文字列 内容
100 continue リクエストが継続中
200 OK リクエストが正常に受理
301 Moved Permanently リクエストしたコンテンツが移動
302 Found リクエストしたコンテンツが一時的に移動(別の場所で発見)
304 Not Modified リクエストしたコンテンツが未更新。Webブラウザに一時保存されたコンテンツが表示される
400 Bad Request リクエストが不正
404 Not Found リクエストしたコンテンツが未検出
500 Internal Server Error リクエスト処理中にサーバー内部でエラーが発生
503 Service Unavailable アクセス集中やメンテナンスにより一時的に処理不可能

メッセージヘッダー

HTTPリクエストとHTTPレスポンスはいずれも「メッセージヘッダー」を利用することで、HTTPメッセージに関する詳細な情報を送信できる。メッセージヘッダーは複数の「ヘッダーフィールド」とよばれる行から成り立ち、それぞれのヘッダーフィールドはフィールド名、その後にコロン(:)と1文字分の空白、そしてフィールド値で構成される。
ヘッダーフィールドはそれぞれが持つ情報の種類によって、以下の4種類に分けることができる。
846A59C2-4629-48CC-BDBB-212CA0D2B013_4_5005_c.jpeg

  • 一般ヘッダーフィールド:
    リクエストとレスポンスの両方に含まれる。
名前 内容
Connection リクエスト後はTCPコネクションを切断など、接続状態の通知
Date HTTPメッセージの作成日
Upgrade HTTPのバージョンアップデートの要求
  • リクエストヘッダーフィールド:
    リクエストのみに含まれるヘッダーフィールドで、代表的なものは「User-Agent」。サーバーはUser-Agentを参照してスマートフォンからの接続であれば、スマートフォン向けのWebサイトを表示するといった処理を行える。
名前 内容
Host リクエスト先のサーバー名
Referer 直前に訪れていたWebページのURL
User-Agent Webブラウザの固有情報(プロダクト名、バージョンなど)

「Referer」の綴りは正しくは「Referrer」だが、技術仕様決める際に誤って登録されたものの名残である。

  • レスポンスヘッダーフィールド:
    レスポンスのみに含まれるヘッダーフィールドで、代表的なものはサーバー機能を提供するプロダクト情報を示す「Server」。
名前 内容
Location リダイレクト先のWebページの情報
Server Webサーバーの固有情報(プロダクト名、バージョンなど)
  • エンティティヘッダーフィールド:
    リクエストとレスポンスの両方に含まれ、代表的なものはデータの種類を示す「Content-Type」。一般ヘッダーがHTTPメッセージ全体に対しての負荷情報を示すものであるのに対し、これはメッセージボディに含まれるデータの付加情報を示す。
名前 内容
Allow 利用可能なHTTPメソッドの一覧
Content-Encoding コンテンツのエンコード方式
Content-Language コンテンツの使用言語
Content-Length コンテンツのサイズ(byte)
Content-Type コンテンツの種類(テキスト、画像など)
Expires コンテンツの有効期限
Last-Modified コンテンツの最終更新時刻

また、ヘッダーフィールドは独自に定義したものを利用することも可能である。

HTTPメソッド

過去記事を参照

参考

イラスト図解式 この一冊で全部わかるWeb技術の基本

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?