HTTP 1.1 RFC #GETを見て、GET リクエストとは何かを理解してください。ブラウザーを使用して Web サイトにアクセスすると (すべての Web サイトは何らかの HTTP サーバー上で実行されます)、ブラウザーはクライアントとして機能し、Web サイトはサーバーとして機能します。クライアントがリクエストを開始し、サーバーがそのリクエストに応答します。
要求の主なタイプ (ユーザーが表示しようとしている URL に応答してブラウザーによって生成される) は、GET 要求です。
たとえば、ユーザーが URL http://www.example.com/index.htmにアクセスしたい場合、ブラウザーはサーバー www.example.com の TCP ポート 80 (デフォルト) に接続します。接続が確立されると、ブラウザは次のような標準の GET リクエストで「会話」を開始します。
GET /index.htm HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; sv-SE; rv:1.8.1.12) Gecko/20080207 Ubuntu/7.10 (gutsy) Firefox/2.0.0.12
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
最初の行 (リクエスト行) の後のヘッダーはオプションですが、ほとんどの Web サイトは "Host" ヘッダーがないと機能しないため、ブラウザーは常に "Host" ヘッダーを含めたいと考えます (これにより、複数の Web サイトが単一の IP アドレスを共有できるようになります)。その場合、サーバーは、ここでホスト名を指定しないと、アクセスしようとしている Web サイトを認識できません。
そのサーバーで index.htm を取得するための最小限の GET 要求は、単純に次のようになります。
GET /index.htm HTTP/1.1
要求の終わりは、2 つの CRLF シーケンス (ASCII コード 13 および 10) によって終了することに注意してください。二重 CRLF シーケンスがサーバーによって受信されると、サーバーはそれに応じてステータス行とコードで応答します (ドキュメントは見つかりましたか?)。ドキュメントが見つかった場合、通常は HTTP ステータス コード 200、応答ヘッダー (これらは要求ヘッダーと同じ形式です)、二重の CRLF シーケンス、要求されたファイルの本文が続く応答で返されます。HTTP 標準では、これを「エンティティ」と呼んでいます。この場合、返されるエンティティは index.htm の内容になります。上記の例を使用すると、サーバーは次のように応答する可能性があります。
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 66
Last-Modified: Wed, 14 Sep 2016 13:05:21 GMT
<html>
<body>
Welcome to my example page
</body>
</html>
これは簡単に言えば HTTP GET/応答会話の簡単な例ですが、要求ヘッダーと応答ヘッダーによってはさらに複雑になる可能性があると推測できます。
実行中のサーバーに GET リクエストを手動で送信する方法についての質問に答えるために、Linux マシンで「curl -i」を使用するのが好きです。Curl はクライアント/ブラウザとして機能し、GET (ダウンロード) する URL を指定できます。例えば:
curl -i http://localhost/test.htm
-i オプションを使用すると、curl は、この場合は test.htm のコンテンツであるエンティティだけでなく、Web サーバーの応答全体 (HTTP 応答ヘッダーを含む) を表示します。上記の URL を、実行中の Web サーバーの URL と一致するように調整する必要があります。