18

通常の HTTP 応答は次のようになります。

HTTP/1.0 200 OK

RFCがReason-Phraseと呼んでいるものを省略してもよろしいですか? 何かのようなもの:

HTTP/1.0 200

RFC は次のように述べています。

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

私はこれを次のように理解しています:

  • Reason-Phrase には空の文字列を使用できます
  • とにかくステータスコードの後に​​スペースが必要です

したがって、以下が有効になります。

HTTP-Version SP Status-Code SP CRLF

RFC を正しく理解していますか?

4

2 に答える 2

18

*を正規表現のように「0 個以上の文字」と読むと、そのように見えます。

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.

したがって、正規表現ではありませんが、意味は本質的に同じです。この場合、末尾に数字がないアスタリスクは、「0 個以上」の「テキスト」が存在する可能性があることを意味します。変な言い方ですが、あなたは正しいようです。

厳密に言えば、スペース必須ですが、区切るものがない場合は区切り記号を省略できると思います。ただし、厳密な実装を持つクライアントがこの文字列をスペースで分割し、説明が含まれている要素を読み取ろうとすると、クライアントが強制終了される可能性があります。しかし、繰り返しになりますが、これらのクライアントは、防御的なプログラミングを使用してその状況をキャッチする必要がありました。;)

RFCでは、人間が読める問題の説明である限り、任意のテキストを使用できると述べていますクライアントはステータス コードの正確な意味を理解していない可能性があるため、このテキストは重要です。そのため、ユーザーにテキストを表示する必要がある場合があります。省略できますが、個人的には省略しません。

于 2013-07-07T22:41:22.310 に答える