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>