とりあえず落ち着け

サブカル系webエンジニア見習いの備忘録

【web知識】HTTPリクエストとはなんぞや?

前回:HTTPとはなんぞや?

1. HTTPリクエストとは?

 クライアントからwebサーバに対して送られるメッセージ。

何をどのように処理して返して欲しいかという情報が含まれている。

2. HTTPリクエストの中身

a.メソッド

 何をするリクエストなのかを表します。

  • GET ・・・ 最も多く利用されているメソッドで、Request-URIで識別できるデータならなんでも回収する。ただし、リクエスト時のヘッダに条件指定のヘッダを書くことで条件付きGETリクエストや範囲リクエストとなる。
  • HEAD ・・・ サーバがレスポンスにおいてメッセージボディを返してはいけないことを除けばGETと一緒
  • POST ・・・ エンティティボディを転送するために使用する。GETでも可能だがGETよりも大容量を転送できる。
  • PUT ・・・ ローカルにあるファイルをサーバに転送するためのメソッド。URIで指定した場所にリソースを作る。新しく生成した場合は201レスポンスを、既存のリソースを更新した場合は200か204のレスポンスをそれぞれ返す。
  • DELETE ・・・ リソースの削除を要求するメソッド。PUTの逆
  • OPTIONS ・・・ Request-URI のリソースがどんなメソッドをサポートしているかを調べるために使う。リクエストを投げるとレスポンスヘッダのAllowにサポートしているメソッドが記述される。
  • TRACE ・・・ 特定のサーバに接続し、そこからループバックを起こすために使う。
  • CONNECT ・・・ SSLなどのプロトコルで暗号化されたものをトンネルするときに使うメソッド
  • PATCH ・・・ サーバにある既存のリソースにパッチを当てるためのメソッド
 

b. URI

リソースの場所を識別するURLとリソースの名前を識別するURNを内包したもの。

HTTP通信におけるURI構文解析すると、scheme、host、port、abs_path、query、fragmentの6つに分けることができる。

  • schemeはリソースにアクセスするための手法であり、RFC2616によるとhttp_URLに限った場合はhttpで確定する。
  • hostはデータを持っているコンピュータの名前を指定する。IPアドレスでの指定も可能だがFQDNによる指定がRFC1900で推奨されている。
  • portは利用するポート番号を指す。hHTTPで明示的に指定しなかった場合は80番ポートが使われる。
  • abs_pathはデータがあるコンピュータ内でのリソースの場所を指す絶対パスであり、階層構造を持つURIでは/で階層を区分する。
  • queryは指定したリソースに値を渡すときに使用するクエリ文字列で、?によって絶対パスと区切られている。
  • fragmentは部分識別子といい、区切りには#を使う。RFC3986によると、fragmentも一般的なURIではURIに含むが、HTTPの規格におけるURIでは含まえないと規定されている。よって、http_URLにおけるfragmentはリソースの特定部分を指すものであり、リソース取得後のみ意味を持つ。

c. HTTPバージョン

1.0もしくは1.1

d. メッセージヘッダ

  • Accept ・・・ クライントが受け取る事のできるデータの種類を表す。
  • Accept-Language ・・・  クライアントが受け取る事のできる自然言語の種類を表す。
  • User-Agent ・・・ 使っているブラウザの種類とバージョンを表す。
  • Accept-Encoding ・・・ クライアントが受信可能なエンコード方式を表す。
  • Accept-Charset ・・・ クライアントが受信可能な文字セットを表す。
  • Allow ・・・ 要求したリソースに対して使用可能なメソッドの一覧を表す。
  • Authorization ・・・ 認証が必要な場合に認証情報を伝える。
  • Cache-Control ・・・ キャッシュに関する指示を表す。
  • Expect ・・・ 様々な用途がある。
  • From ・・・ 要求をした人のメールアドレスを指定する。
  • Host(必須) ・・・ サーバ名を表す。
  • Referer ・・・ 要求の元になったページのURLを表す。