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


回答:


296

サーバーは、次の応答ヘッダーを送信して、Cookieフィールドを設定します。

Set-Cookie:名前=

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

Cookie:名前=

詳細については、WikipediaのHTTP Cookieに関する記事を参照してください。


CookieがGET / POST動詞でのみ機能し、CONNECTでは機能しないのは本当ですか?
PerlDev 2007

5
@PerlDev GET / POST以外のリクエストでは機能しないというrfc2109での表示はありませんが、ブラウザとサーバーの実装がそれらのケースで実装していない可能性があると思います。
2012

5
応じていることを注意RFC 2109のユーザーエージェントやブラウザが複数のクッキーを送信する場合、それは単一のフィールドに入れますが、セミコロンで区切ら:Cookie: name1=value1; name2=value2; ...
jotrocken

34

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


2
それで、どんな要求でも、すべてのCookieが送信されますか?
BKSpurgeon 2018

32

それが他の回答で書かれているものとは別に、Cookieのパス、Cookieの最大経過時間に関するその他の詳細、それが保護されているかどうかもSet-Cookie応答ヘッダーで渡されます。例えば:

Set-Cookie:名前の= [ ; expires=日付 ] [ ; domain=ドメイン ] [ ; path=パス ] [ ; secure]


ただし、次のHTTP要求を行うときに、これらの詳細のすべてがクライアントからサーバーに返されるわけではありません。

設定することもできます HttpOnlyCookieの最後にフラグをして、JavaScriptによるスクリプトで、Cookieがhttponlyであり、アクセスを許可してはならないことを示すこともできます。これにより、セッションハイジャックなどの攻撃を防ぐことができます。

詳細については、RFC 2109を参照してください。Nicholas C. Zakasの記事、HTTP cookieの説明もご覧ください。


2
ウェイバックリンクではなく、Zakasの記事への直接リンクを次に示します。humanwhocodes.com
Joseph Dykstra

13

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
    Upgrade-Insecure-Requests:1
    ユーザーエージェント:Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 537.36(KHTML、like Gecko)Chrome / 49.0.2623.112 Safari / 537.36
    Accept-Encoding:gzip、deflate、sdch
    Accept-Language:en-US、en; q = 0.8、ru; q = 0.6
    Cookie:name = F

3
複数のCookieがある場合はどうなりますか?それらはコンマで区切られていますか?
Mark Buikema

彼らは新しいクッキーとして設定されていると思います。Cookie:name = F Coo​​kie:name = A
EAzevedo '26 / 10/26

2
@MarkBuikema。docs.microsoft.com/en - us/windows/desktop/wininet/http-cookiesを参照してください。それらは次のように送信されます:Cookie:<name> = <value> [; <name> = <value>] ...
Ben Wheeler
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.