HTTPに触れていると、HTTPヘッダーなるものが登場した人もいると思います。
私も何回か出くわしたことがありましたが、完璧に理解はできていませんでした。
今回はこのHTTPヘッダーについて見ていこうと思います。
HTTPヘッダーとは
HTTP(HyperText Transfer Protocol)は、Web上でデータをやり取りするためのプロトコルです。
そして、HTTPヘッダーはこのデータのやり取りの関する情報を含む部分で、サーバーとクライアント間の通信を円滑にするためのメタデータを提供します。
HTTPヘッダーはリクエストヘッダーとレスポンスヘッダーに分かれています。
リクエストヘッダー
リクエストヘッダーは、クライアント(通常はwebブラウザ)からサーバーに送信されるリクエストに付加される情報です。
以下のようなものがあります。
Host
リクエストがどのサーバーに送信されるべきかを指定します。
例:’Host:www.example.com’
User-Agent
リクエストを送信しているクライアントの情報(ブラウザやOSなと)を示します。
例:’User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)’
Accept
クライアントが受け入れることができるメディアタイプ(MIMEタイプ)を示します。
HTML、画像、JSONなど様々な形式を受け入れることができます。
例:’Accept : text/html’ ‘Accept : application/json’
Authorization
認証情報を送信するために使用されます。
例:’Authorization : Basic dXNlcjpwYXNz’
Cookie
Cクライアントがサーバーから受け取ったCookie情報を再送信するために使用されます。
Cookieについての概要はこちら。
レスポンスヘッダー
レスポンスヘッダーは、サーバーからクライアントに送信されるレスポンスに付加される情報です。
以下のようなものがあります。
1.Content-Type
レスポンスするコンテンツのメディアタイプを示します。
これによりクライアントは、データの正しい処理方法を理解できます。
例:’Content-Type : text/html; charset=UTF-8′
2.Content-Length
レスポンスボディのバイト数を示します。
例:’Content-Length : 348′
Set-Cookie
サーバーがクライアントにクッキーを設定するために使用します。
セッション管理のために使用されることが一般的です。
例:’Set-Cookie : sessionId = abc123; Path=/; HttpOnly’
Cache-Control
キャッシュの制御方法を指定します。
例:’Cache-Control : no-cache’ ‘Cache-Control : max-age=3600’
Server
サーバーのソフトウェア情報を示します。
例:’Server : Apache/2.4.41(Ubuntu)’
具体例
HTTPリクエストの例
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html
このリクエストは、クライアントが’www.example.com’サーバーの’index.html’ページを取得しようとしていることを示しています。
- GET:リクエストメソッドで、指定されたリソースを取得することを示します。
- /index/html:取得しようとしているリソースのパス。
- HTTP/1.1:使用しているHTTPのバージョン。
- Host:リクエストが送信されるサーバーのホスト名。
- User-Agent:リクエストを送信しているクライアント情報。
- Accept:クライアントが受け入れることができるメディアタイプ。
HTTPレスポンスの例
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 138
Server: Apache/2.4.41 (Ubuntu)
Set-Cookie: sessionId=abc123; Path=/; HttpOnly
<html>
<head><title>Example</title></head>
<body><p>This is an example page.</p></body>
</html>
このレスポンスは、サーバーが’index.html’ページを正常に提供したことを示しています。
- HTTP/1.1 200 OK:ステータスラインで、HTTPのバージョンとステータスコード200(成功)を示す。
- Content-Type:レスポンスのコンテンツタイプ(HTML)と文字エンコーディング(UTF-8)を示す。
- Content-Length:レスポンスボディの長さをバイト単位で示す。
- Server:サーバーのソフトウェア情報を示す。
- Set-Cookie:クライアントに送信するクッキー情報を設定。
HTTPヘッダーのセキュリティ
HTTPヘッダーはセキュリティにも重要な役割を果たしています。
‘Strict-Transport-Security’ヘッダーは、ブラウザに対して常にHTTPSで接続するように指示します。
また、’X-Content-Type-Options: nosniff’はブラウザがレスポンスのContent-Typeヘッダーを信用し、不正なコンテンツの実行を防ぐために使用されます。
まとめ
以上のようにHTTPヘッダーは、HTTPを用いたWeb通信において重要な役割を持ち、情報を提供します。
HTTPヘッダーを理解し、自身で設定することができれば、自身のWebサービスの機能を充実させたり、セキュリティを高めることができます。
Cookieの具体的な使い方について詳しく知りたい方はこちら。