web-dev-qa-db-ja.com

CookieはHTTPプロトコルでどのように渡されますか?

CookieはHTTPプロトコルでどのように渡されますか?

222
jai

サーバーは、その応答ヘッダーに以下を送信してcookieフィールドを設定します。

Set-Cookie:name=value

Cookieが設定されている場合、ブラウザはリクエストヘッダに以下を送信します。

Cookie:name=value

詳しくはWikipediaの HTTP Cookie の記事を見てください。

273
deinst

クッキーはリクエスト(クライアント - >サーバー)とレスポンス(サーバー - >クライアント)の両方でHTTPヘッダとして渡されます。

29
Douglas Leeder

それが他の答えで書かれていることとは別に、クッキーのパス、クッキーの最大存続期間、それが保護されているかいないかに関係する他の詳細も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
14
FariZ