Nhiều tiêu đề Cookie có được phép trong một yêu cầu HTTP không?


91

Thông thường, một trình duyệt nhóm các cookie thành một Cookietiêu đề duy nhất , chẳng hạn như:

Cookie: a=1; b=2

Tiêu chuẩn có cho phép gửi chúng dưới dạng các tiêu đề riêng biệt, chẳng hạn như:

Cookie: a=1
Cookie: b=2

Hay họ luôn phải ở trên cùng một dòng?

Câu trả lời:


127

Tình cờ gặp trang này khi đang tìm kiếm chi tiết về chủ đề. Một câu nói từ HTTP State Management Mechanism, RFC 6265 phải làm cho mọi việc rõ ràng hơn:

5.4. Tiêu đề Cookie

Khi tác nhân người dùng tạo một yêu cầu HTTP, tác nhân người dùng KHÔNG ĐƯỢC đính kèm nhiều hơn một trường tiêu đề Cookie.

Dường như việc sử dụng nhiều Cookietiêu đề , trên thực tế, bị cấm!


8
Những RFC mới điên rồ này. :)
Kylar

12
Lưu ý rằng máy chủ có thể phản hồi với nhiều Set-Cookietiêu đề: tools.ietf.org/html/rfc6265#page-7
Michael Haren

2
Tại sao lại phản đối, như OP đã hỏi cụ thể về yêu cầu HTTP, không phải phản hồi HTTP. @JeffDavenport
James Chong

2
Đối với những người đến đây từ Google như Jeff, OP cho thấy bạn có thể có nhiều vars bằng cách tách chúng bằng ";" (một không gian là không cần thiết)
Albert Hendriks

2
@HawkeyeParker - lon không bao hàm đúng . Tôi cho rằng điều đó Set-Cookie:a=b;c=d;đúng hơn là Set-Cookie:a=b; Set-Cookie:c=d;nếu các giá trị được đặt bởi một máy chủ duy nhất. Thông số cho biết máy chủ không nên gấp nhiều trường tiêu đề Set-Cookie vào một trường , nhưng nó có thể thêm nhiều trường tiêu đề Set-Cookie vào một phản hồi . Điều đó có nghĩa là trong thế giới thực là khi máy chủ proxy chuyển qua một phản hồi, nếu proxy đó đặt cookie, nó sẽ sử dụng tiêu đề Set-Cookie riêng.
Golphy

23

nó hiện được cho phép trong HTTP / 2 ( RFC 7540 ), chỉ định:

    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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.