HTTP-リクエスト

HTTPクライアントは、次の形式を含む要求メッセージの形式でHTTP要求をサーバーに送信します。

  • A Request-line
  • Zero or more header (General|Request|Entity) fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

次のセクションでは、HTTPリクエストメッセージで使用される各エンティティについて説明します。

リクエストライン

Request-Lineは、メソッドトークンで始まり、Request-URIとプロトコルバージョンが続き、CRLFで終わります。要素はスペースSP文字で区切られます。

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

リクエストラインに記載されている各部分について説明しましょう。

リクエスト方法

リクエスト method 指定されたによって識別されたリソースで実行されるメソッドを示します Request-URI。この方法では大文字と小文字が区別されるため、常に大文字で記載する必要があります。次の表に、HTTP /1.1でサポートされているすべてのメソッドを示します。

SN 方法と説明
1 GET

GETメソッドは、指定されたURIを使用して指定されたサーバーから情報を取得するために使用されます。GETを使用するリクエストは、データのみを取得する必要があり、データに他の影響を与えることはありません。

2 HEAD

GETと同じですが、ステータス行とヘッダーセクションのみを転送します。

3 POST

POSTリクエストは、HTMLフォームを使用して、顧客情報やファイルのアップロードなどのデータをサーバーに送信するために使用されます。

4 PUT

ターゲットリソースの現在のすべての表現を、アップロードされたコンテンツに置き換えます。

5 DELETE

URIで指定されたターゲットリソースの現在の表現をすべて削除します。

6 CONNECT

指定されたURIで識別されるサーバーへのトンネルを確立します。

7 OPTIONS

ターゲットリソースの通信オプションを説明します。

8 TRACE

ターゲットリソースへのパスとともにメッセージループバックテストを実行します。

リクエスト-URI

Request-URIはUniformResource Identifierであり、リクエストを適用するリソースを識別します。以下は、URIを指定するために最も一般的に使用されるフォームです。

Request-URI = "*" | absoluteURI | abs_path | authority
 
SN 方法と説明
1 アスタリスク *HTTPリクエストが特定のリソースではなくサーバー自体に適用される場合に使用され、使用されるメソッドが必ずしもリソースに適用されるとは限らない場合にのみ許可されます。例えば:

OPTIONS * HTTP/1.1

2 ザ・ absoluteURIプロキシに対してHTTPリクエストが行われるときに使用されます。プロキシは、有効なキャッシュから要求またはサービスを転送し、応答を返すように要求されます。例えば:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

3 Request-URIの最も一般的な形式は、オリジンサーバーまたはゲートウェイ上のリソースを識別するために使用される形式です。たとえば、オリジンサーバーから直接リソースを取得したいクライアントは、ホスト「www.w3.org」のポート80へのTCP接続を作成し、次の行を送信します。

GET /pub/WWW/TheProject.html HTTP/1.1

Host: www.w3.org

絶対パスを空にすることはできないことに注意してください。元のURIに何も存在しない場合は、「/」(サーバールート)として指定する必要があります。

リクエストヘッダーフィールド

HTTPヘッダーフィールドを学習するときは、別の章でGeneral-headerとEntity-headerを学習します。とりあえず、Requestヘッダーフィールドが何であるかを確認しましょう。

リクエストヘッダーフィールドを使用すると、クライアントはリクエストに関する追加情報とクライアント自体に関する追加情報をサーバーに渡すことができます。これらのフィールドはリクエスト修飾子として機能します。要件に基づいて使用できるいくつかの重要なリクエストヘッダーフィールドのリストを次に示します。

  • Accept-Charset

  • Accept-Encoding

  • Accept-Language

  • Authorization

  • Expect

  • From

  • Host

  • If-Match

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • If-Unmodified-Since

  • Max-Forwards

  • Proxy-Authorization

  • Range

  • Referer

  • TE

  • User-Agent

独自のカスタムクライアントとWebサーバーを作成する場合に備えて、カスタムフィールドを導入できます。

リクエストメッセージの例

それでは、すべてをまとめて、フェッチするHTTPリクエストを作成しましょう。 hello.htm tutorialspoint.comで実行されているWebサーバーのページ

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

ここでは、サーバーからプレーンHTMLページをフェッチしているため、サーバーにリクエストデータを送信していません。接続は一般的なヘッダーであり、残りのヘッダーは要求ヘッダーです。次の例は、リクエストメッセージ本文を使用してフォームデータをサーバーに送信する方法を示しています。

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

licenseID=string&content=string&/paramsXML=string

ここでは、指定されたURL /cgi-bin/process.cgiを使用して渡されたデータを処理し、それに応じて応答が返されます。ここにcontent-type 渡されたデータが単純なWebフォームデータであることをサーバーに通知し、 lengthメッセージ本文に入力されるデータの実際の長さになります。次の例は、プレーンXMLをWebサーバーに渡す方法を示しています。

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://clearforest.com/">string</string>