2013-07-07 13 views
14

Một HTTP response bình thường trông giống như:Phản hồi HTTP có thể bỏ qua cụm từ lý do không?

HTTP/1.0 200 OK 

Is it OK để bỏ qua những gì RFC gọi Reason-Phrase? Một cái gì đó như:

HTTP/1.0 200 

Các RFC nói:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF 
Reason-Phrase = *<TEXT, excluding CR, LF> 

Tôi hiểu điều này như:

  • Chuỗi trống là OK cho Reason-Phrase
  • Nhưng có phải là một không gian sau Mã trạng thái anyway

Vì vậy, những điều sau đây sẽ hợp lệ:

HTTP-Version SP Status-Code SP CRLF 

Tôi có hiểu RFC chính xác không?

+0

Tại sao bỏ qua? Nếu bạn đang tìm kiếm các khoản tiết kiệm byte ghi đè, chỉ cần sử dụng [SPDY] (http://en.wikipedia.org/wiki/SPDY). – josh3736

+0

@josh Xây dựng thư viện cho phép người dùng đặt mã phản hồi.Nếu người dùng đặt một mã phản hồi kỳ lạ, tôi sẽ phải chọn giữa việc để trống chuỗi, đặt một số chữ "UNKNOWN' Reason-Phrase, hoặc buộc người dùng phải đặt Lý do cụm từ. – Benjamin

+0

FWIW, thư viện HTTP cơ sở của Node (và do đó hầu hết mọi thứ được xây dựng trên nó, như Express) [mặc định là gửi chuỗi 'unknown' là Reason Phrase] (https://github.com/joyent/node/blob/v0. 10.12/lib/http.js # L1119) khi tác giả đặt một mã trạng thái kỳ lạ và không cung cấp chuỗi lý do. – josh3736

Trả lời

14

Có vẻ như vậy, nếu bạn đọc * là 'không hoặc nhiều ký tự', như trong cụm từ thông dụng.

Nó dường như có một ý nghĩa hơi khác nếu bạn đọc Notational Convention của RFC:

*rule

The character "*" preceding an element indicates repetition. The full form is "<n>*<m>element" indicating at least <n> and at most <m> occurrences of element. Default values are 0 and infinity so that "*(element)" allows any number, including zero; "1*element" requires at least one; and "1*2element" allows one or two.

Vì vậy, mặc dù nó không regex, ý nghĩa cơ bản là tương tự. Dấu hoa thị, không có số sau trong trường hợp này, có nghĩa là có thể có "0 hoặc nhiều hơn" "văn bản". Odd cách để đặt nó, nhưng có vẻ như bạn đang phải.

Nói đúng, không gian bắt buộc, mặc dù tôi nghĩ rằng dấu phân cách có thể bị bỏ qua nếu không có gì để tách biệt. Nó có thể giết chết các máy khách có thực hiện nghiêm ngặt, tuy nhiên, nếu họ chỉ chia chuỗi này trên các khoảng trắng và cố gắng đọc phần tử mô tả. Nhưng sau đó một lần nữa, những khách hàng đó nên đã sử dụng một số chương trình phòng thủ để nắm bắt tình hình đó. ;)

RFC không nói rằng nó có thể là bất kỳ văn bản nào, miễn là nó là mô tả có thể đọc được của con người về sự cố. Văn bản này là quan trọng, bởi vì khách hàng có thể không hiểu ý nghĩa chính xác của mã trạng thái, vì vậy nó có thể cần phải hiển thị văn bản cho người dùng. Vì vậy, mặc dù bạn có thể bỏ qua nó, cá nhân tôi sẽ không.

+0

Cảm ơn, điều đó rất hữu ích. – Benjamin

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