HTTP Protocolとは

HTTPはHypertext Transfer Protorolの略. Web ブラウザと Web サーバの間でHTML などのコンテンツの送受信に用いられる通信プロトコル.

ref. Hypertext Transfer Protocol - Wikipedia

HTTP Header

💡application/jsonにおけるAccept と Content-Typeの違い

AcceptはClientがどんなデータを処理できるかを示す.

Content-Typeはどんな形式のデータを送信したかを示す.

  • Accept
    • {“Accept”: “application/json”}
    • サーバがクライアントにデータをレスポンスするときの情報.
    • 特に指定がなければ通常text/textを好む慣習がある.
  • Content-type
    • {“Content-Type” “application/json”}
    • GET Requestでは不要, Post Requestでは必須.
      • 具体的には POST requestにおけるbodyのデータ形式を指定.

🔖HTTP GET

クエリ文字列

WebブラウザなどがWebサーバに送信するデータを送信先を指定するURLの末尾に特定の形式で表記したもの.

以下は全て同じ.

  • クエリストリング(query string)
  • GETパラメータ(GET parameter)
  • URLパラメータ
  • URLクエリパラメータ

URLの末尾に「?」(クエスチョンマーク)を付け, 続けて「名前=値」の形式で内容を記述する. 値が複数あるときは「&」(アンパサンド)で区切り「?名前1=値1&名前2=値2&名前3=値3」のように続ける.

🔖HTTP POST

リクエストボディ(requestBody)

HTTPリクエストメッセージボディ.

POSTリクエストにbodyパラメータを添えるときに必要.

Content-typeによる形式の指定が必要. これはHTTPヘッダのフィールドとして書く.

{"Content-Type" "application/json"}

🔖HTTP PUT

リソースの新規作成ではなく, 既存リソースを置き換えるニュアンス.

🔖冪等性

💡HTTP POSTとPUTの違いは?

データの意図が違う. ニュアンスの違いでどちらをつかうかは開発者のポリシーによる.

PUT はべき等であり, 呼び出し回数が 1 回でも複数回でも同じ効果になる(副作用がない). 一方で, POST は連続して同じものを実行すると注文を複数回渡してしまうなどの追加の影響が発生する可能性がある.

🔖HTTP HEAD

リソースの最終更新時刻を取得するには?

Last-Modifiedを参照する.

curl -I (url)

🔖HTTP Status Code

HTTP ステータスコード.HTTP ステータスコード - Wikipedia

1xxInformational情報
2xxSuccess成功
3xxRedirectionリダイレクション
4xxClient Errorクライアントエラー
5xxServer Errorサーバエラー

204: No Content

No ContentとはBodyが空であることを示す. リクエスト自体は成功.

4xx

📝HTTP/2

2015に登場したHTTPプロトコル. 1996に仕様が定義されたHTTP1.1と比べて16年ぶりのアップデート.

HTTP/1.xとの違い

バイナリ形式

HTTP/1.xはテキスト形式でデータがやりとりされていたが, /2ではバイナリ形式でやり取りされる.

1つのTCP接続と多重ストリーム

/1.xでは1つのTCP接続でひとつの通信しかできなかった. ひとつのリクエストに対して1つのレスポンスということで処理はシンプルだったが並列な処理ができなかった.

/2だとストリームという機構が作られ, 仮想の接続をつくることで同時並行で多重通信ができる(リクエスト/レスポンスを処理).

HTTPヘッダを圧縮

HTTPヘッダーで必要な差分データだけを送信することでHTTPヘッダを圧縮.

🔖HTTP debugger

HTTPに特化したプロファイラ.

🔧HTTP Toolkit

https://httptoolkit.com/

References