อนุญาตให้ใช้ส่วนหัวคุกกี้หลายรายการในคำขอ HTTP หรือไม่


94

โดยปกติเบราว์เซอร์จะจัดกลุ่มคุกกี้เป็นCookieส่วนหัวเดียวเช่น:

Cookie: a=1; b=2

มาตรฐานอนุญาตให้ส่งสิ่งเหล่านี้เป็นส่วนหัวแยกต่างหากเช่น:

Cookie: a=1
Cookie: b=2

หรือพวกเขาต้องอยู่ในบรรทัดเดียวกันเสมอ?

คำตอบ:


129

เปลี่ยนมาที่หน้านี้ในขณะที่หารายละเอียดเกี่ยวกับหัวข้อนี้ อ้างจากHTTP State Management Mechanism, RFC 6265ควรจะทำในสิ่งที่ชัดเจน:

5.4. ส่วนหัวของคุกกี้

เมื่อตัวแทนผู้ใช้สร้างคำขอ HTTP เอเจนต์ผู้ใช้ต้องไม่แนบฟิลด์ส่วนหัวคุกกี้มากกว่าหนึ่งฟิลด์

ดูเหมือนว่าการใช้Cookieส่วนหัวหลายรายการนั้นเป็นสิ่งต้องห้าม!


8
RFC แบบใหม่ที่บ้าคลั่งเหล่านี้ :)
Kylar

12
โปรดทราบว่าเซิร์ฟเวอร์สามารถตอบสนองด้วยหลายSet-Cookieส่วนหัว: tools.ietf.org/html/rfc6265#page-7
Michael Haren

2
ทำไมการลงคะแนนตามที่ OP ถามโดยเฉพาะในแง่ของคำขอ HTTP ไม่ใช่การตอบกลับ HTTP @JeffDavenport
James Chong

2
สำหรับผู้ที่มาจาก Google เช่น Jeff OP จะแสดงให้คุณมีหลาย vars โดยคั่นด้วย ";" (ไม่จำเป็นต้องใช้ช่องว่าง)
Albert Hendriks

2
@HawkeyeParker - กระป๋องไม่ได้หมายความว่าที่ถูกต้อง ฉันจะยืนยันว่าSet-Cookie:a=b;c=d;ถูกต้องมากกว่าSet-Cookie:a=b; Set-Cookie:c=d;ถ้าค่าถูกกำหนดโดยเซิร์ฟเวอร์เดียว ข้อมูลจำเพาะกล่าวว่าเซิร์ฟเวอร์ไม่ควรพับคุกกี้ชุดหลายฟิลด์ส่วนหัวเป็นหนึ่งในสนามแต่ก็สามารถเพิ่มคุกกี้ชุดฟิลด์ส่วนหัวเป็นหนึ่งในหลายการตอบสนอง สิ่งที่หมายถึงในโลกแห่งความเป็นจริงก็คือเมื่อพร็อกซีเซิร์ฟเวอร์ส่งผ่านไปตามการตอบสนองหากพร็อกซีตั้งค่าคุกกี้ควรใช้ส่วนหัวของคุกกี้ชุดแยกต่างหาก
Golphy

24

ตอนนี้อนุญาตแล้วใน HTTP / 2 ( RFC 7540 ) ซึ่งระบุ:

    8.1.2.5.  Compressing the Cookie Header Field

   The Cookie header field [COOKIE] uses a semi-colon (";") to delimit
   cookie-pairs (or "crumbs").  This header field doesn't follow the
   list construction rules in HTTP (see [RFC7230], Section 3.2.2), which
   prevents cookie-pairs from being separated into different name-value
   pairs.  This can significantly reduce compression efficiency as
   individual cookie-pairs are updated.

   To allow for better compression efficiency, the Cookie header field
   MAY be split into separate header fields, each with one or more
   cookie-pairs.  If there are multiple Cookie header fields after
   decompression, these MUST be concatenated into a single octet string
   using the two-octet delimiter of 0x3B, 0x20 (the ASCII string "; ")
   before being passed into a non-HTTP/2 context, such as an HTTP/1.1
   connection, or a generic HTTP server application.

   Therefore, the following two lists of Cookie header fields are
   semantically equivalent.

     cookie: a=b; c=d; e=f

     cookie: a=b
     cookie: c=d
     cookie: e=f
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.