คุกกี้ถูกส่งผ่านในโปรโตคอล HTTP อย่างไร


คำตอบ:


295

เซิร์ฟเวอร์ส่งข้อมูลต่อไปนี้ในส่วนหัวการตอบกลับเพื่อตั้งค่าฟิลด์คุกกี้

Set-Cookie:ค่าชื่อ=

หากมีชุดคุกกี้เบราว์เซอร์จะส่งรายการต่อไปนี้ในส่วนหัวคำขอ

Cookie:ค่าชื่อ=

ดูบทความHTTP Cookieที่ Wikipedia สำหรับข้อมูลเพิ่มเติม


เป็นความจริงหรือไม่ที่คุกกี้ใช้งานได้กับ GET / POST verb แต่ไม่ใช่ CONNECT
PerlDev

5
@PerlDev ไม่มีอะไรที่ฉันเห็นในrfc2109ที่บอกว่าไม่ควรทำงานกับคำขออื่นนอกเหนือจาก GET / POST แต่ฉันสงสัยว่าการใช้งานเบราว์เซอร์และเซิร์ฟเวอร์อาจไม่สามารถใช้งานได้ในกรณีเหล่านั้น
deinst

5
โปรดทราบว่าตามRFC 2109หากตัวแทนผู้ใช้หรือเบราว์เซอร์ส่งคุกกี้หลายตัวมันจะวางไว้ในเขตข้อมูลเดียวคั่นด้วยเครื่องหมายอัฒภาค:Cookie: name1=value1; name2=value2; ...
jotrocken

34

คุกกี้ถูกส่งผ่านเป็นส่วนหัว HTTP ทั้งในคำขอ (ไคลเอนต์ -> เซิร์ฟเวอร์) และในการตอบสนอง (เซิร์ฟเวอร์ -> ไคลเอนต์)


2
ดังนั้นในคำขอใด ๆ ที่ทำคุกกี้ทั้งหมดจะถูกส่งไปยังอันที่จริง?
BKSpurgeon

32

นอกเหนือจากที่เขียนไว้ในคำตอบอื่น ๆ รายละเอียดอื่น ๆ ที่เกี่ยวข้องกับเส้นทางของคุกกี้อายุสูงสุดของคุกกี้ไม่ว่าจะปลอดภัยหรือไม่ผ่านในส่วนหัวตอบกลับ Set-Cookie ตัวอย่างเช่น

Set-Cookie:=ค่าชื่อ [ ; expires=วันที่ ] [ ; domain=โดเมน ] [ ; path=เส้นทาง ] [ ; secure]


อย่างไรก็ตามรายละเอียดเหล่านี้จะไม่ถูกส่งกลับไปยังเซิร์ฟเวอร์โดยลูกค้าเมื่อทำการร้องขอ HTTP ครั้งต่อไป

นอกจากนี้คุณยังสามารถตั้งค่าHttpOnlyสถานะที่ส่วนท้ายของคุกกี้เพื่อระบุว่าคุกกี้ของคุณเป็นแบบ httponly และต้องไม่ได้รับอนุญาตให้เข้าถึงในสคริปต์ด้วยรหัสจาวาสคริปต์ สิ่งนี้จะช่วยป้องกันการโจมตีเช่นการไฮแจ็กเซสชัน

สำหรับข้อมูลเพิ่มเติมโปรดดูที่RFC 2109 นอกจากนี้ยังมีลักษณะที่บทความนิโคลัสซี Zakas ของ, คุกกี้ HTTP อธิบาย


2
นี่คือลิงค์โดยตรงไปยังบทความของ Zakas แทนที่จะเป็นลิงก์ย้อนกลับ
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 คุณจะเห็นค่าคุกกี้ที่เบราว์เซอร์ส่งมา

    [aaa @ bbbbbbbb] $ ./resp | nc -l -p 12346
    GET / HTTP / 1.1
    โฮสต์: xxx.xxx.xxx.xxx:12346
    การเชื่อมต่อ: Keep-alive
    การควบคุมแคช: max-age = 0
    ยอมรับ: ข้อความ / html, แอปพลิเคชัน / xhtml + xml, แอปพลิเคชัน / xml; q = 0.9, รูปภาพ / webp, * / *; q = 0.8
    การอัพเกรดที่ไม่ปลอดภัย - คำขอ: 1
    ตัวแทนผู้ใช้: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML เช่น Gecko) Chrome / 49.0.2623.112 Safari / 537.36
    ยอมรับการเข้ารหัส: gzip, deflate, sdch
    ยอมรับภาษา: en-US, en; q = 0.8, ru; q = 0.6
    คุกกี้: ชื่อ = F

3
เกิดอะไรขึ้นถ้ามีคุกกี้หลายตัว พวกเขาคั่นด้วยเครื่องหมายจุลภาคหรือไม่
Mark Buikema

คิดว่าพวกเขาถูกตั้งค่าเป็นคุกกี้ใหม่ คุกกี้: ชื่อ = F คุกกี้: ชื่อ = A
EAzevedo

2
@MarkBuikema ดูdocs.microsoft.com/en-us/windows/desktop/wininet/http-cookies พวกเขาจะถูกส่งเช่น: คุกกี้: <name> = <value> [; <name> = <value>] ... ...
Ben Wheeler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.