2009-05-26 35 views
7

Tôi không thể nói từ RFC 2616 liệu máy khách HTTP có nên chấp nhận 204 Không có phản hồi Nội dung bao gồm các tiêu đề có nội dung Chiều dài: 0 hoặc Chuyển mã hóa: chunked hay không. Những tiêu đề dường như phá vỡ một số khách hàng HTTP và proxy, mà dường như cố gắng để đọc nội dung phản hồi trống, nhưng the spec reads:Ứng dụng HTTP gửi Nội dung dài hoặc Chuyển mã hóa với 204 Không có phản hồi nội dung bị hỏng?

  1. Bất kỳ tin nhắn trả lời mà "PHẢI KHÔNG" bao gồm một thông điệp cơ thể (chẳng hạn như sự Phản hồi 1xx, 204 và 304 và bất kỳ phản hồi nào đối với yêu cầu HEAD) là luôn bị chấm dứt bởi dòng trống đầu tiên sau trường tiêu đề, bất kể trường tiêu đề thực thể có trong thư.

Với tôi "bất kể trường tiêu đề thực thể" ngụ ý rằng khách hàng nên chịu đựng trạng thái này. Erlang HTTP library chọn cách diễn giải này. Tuy nhiên, lighthttpdIBM chọn cách giải thích ngược lại - rằng máy chủ không nên bao gồm các tiêu đề này cho các câu trả lời bị cấm không có nội dung.

Vì vậy, ứng dụng web có nên xóa các tiêu đề đó khỏi phản hồi hay cơ sở hạ tầng mạng và khách hàng chấp nhận các tiêu đề đó trên 204 Không có nội dung, 304 không được sửa đổi, v.v.?

Trả lời

6

Theo RFC7230 (xin xem http://tools.ietf.org/html/rfc7230#section-3.3.1) vào cuối trang 29 nó nói:

Một máy chủ PHẢI KHÔNG gửi một header field Transfer-Encoding trong bất kỳ phản ứng với một mã trạng thái của 1xx (Thông tin) hoặc 204 (No Nội dung).

Do đó, ứng dụng web không được gửi các tiêu đề đó với câu trả lời.

+0

Tốt - sáu năm sau, bạn đã có câu trả lời đúng! –

2

Tôi không thể cho bạn biết điều gì là chính xác, trong đó tôi không biết giao thức HTTP trong chi tiết đó.

Tuy nhiên, bạn phải tự hỏi mình:

  1. Tôi có thể thay đổi ứng dụng của tôi để loại bỏ những tiêu đề?
  2. hoặc tôi có thể thay đổi người tiêu dùng ứng dụng của mình để bỏ qua các tiêu đề đó không?

Theo ý kiến ​​của tôi, ứng dụng sẽ không gửi các tiêu đề đó trong trường hợp đó.

Các vấn đề liên quan