CookieはHTTPプロトコルでどのように渡されますか?
サーバーは、その応答ヘッダーに以下を送信してcookieフィールドを設定します。
Set-Cookie:
name=
value
Cookieが設定されている場合、ブラウザはリクエストヘッダに以下を送信します。
Cookie:
name=
value
詳しくはWikipediaの HTTP Cookie の記事を見てください。
クッキーはリクエスト(クライアント - >サーバー)とレスポンス(サーバー - >クライアント)の両方でHTTPヘッダとして渡されます。
それが他の答えで書かれていることとは別に、クッキーのパス、クッキーの最大存続期間、それが保護されているかいないかに関係する他の詳細もSet-Cookieレスポンスヘッダで渡されます。例えば:
Set-Cookie:
name=
value[; expires=
日付] [; domain=
ドメイン] [; path=
パス] [; secure
]
ただし、これらの詳細のすべてが、次回のHTTP要求を行うときにクライアントによってサーバーに返されるわけではありません。
また、クッキーの最後にHttpOnly
フラグを設定して、クッキーがhttponlyであり、JavaScriptコードによるスクリプト内でのアクセスを許可されてはならないことを示すこともできます。これはセッションハイジャックなどの攻撃を防ぐのに役立ちます。
詳細については、 RFC 2109 を参照してください。また、Nicholas C. Zakasの記事、 HTTP cookieの説明 もご覧ください。
サンプルスクリプトをrespとして作成します。
#!/bin/bash
http_code=200
mime=text/html
echo -e "HTTP/1.1 $http_code OK\r"
echo "Content-type: $mime"
echo
echo "Set-Cookie: name=F"
実行可能にして、このように実行します。
./resp | nc -l -p 12346
ブラウザを開いてURLを参照します。 http:// localhost:1236 ブラウザから送信されたCookieの値が表示されます。
[aaa @ bbbbbbbb] $ ./resp | nc -l -p 12346 GET/HTTP/1.1 ホスト:xxx.xxx.xxx.xxx:12346 接続:キープアライブ キャッシュ制御:max-age = 0 同意する:text/html、application/xhtml + xml、application/xml; q = 0.9、image/webp、*/*; q = 0.8 -Requests:1 User-Agent:Mozilla/5.0(Windows NT 6.1)AppleWebKit/537.36(GeckoのようなKHTML)Chrome/49.0.2623.112 Safari/537.36 受諾 - エンコード:gzip、deflate 、sdch 受諾言語:en-US、en; q = 0.8、ru; q = 0.6 クッキー:name = F