2013-07-07 22 views
14

通常のHTTPレスポンスは次のようになります。HTTP応答でReason-Phraseを省略できますか?

HTTP/1.0 200 OK 

はそれがRFC-フレーズ理由を呼ん省略するOKですか?ような何か:

HTTP/1.0 200 

RFCは言う:空の文字列が理由-フレーズ

  • ためOKですが、そこにあるべき

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

      私はこれを理解しますとにかく状態コード後のスペース

    したがって、以下が有効です:

    HTTP-Version SP Status-Code SP CRLF 
    

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

  • +0

    なぜ省略?余分なバイトの節約を探しているなら、[SPDY](http://en.wikipedia.org/wiki/SPDY)を使うだけです。 – josh3736

    +0

    @joshユーザーが応答コードを設定できるライブラリを構築します。ユーザーがエキゾチックなレスポンスコードを設定した場合、文字列を空のままにするか、「UNKNOWN」理由フレーズの王を設定するか、ユーザーに理由フレーズを設定させるかのいずれかを選択する必要があります。 – Benjamin

    +0

    FWIW、Nodeの基本HTTPライブラリ(したがって、Expressのようなほとんどのもの)は、[Reason Phraseとして文字列 'unknown]を送信することがデフォルトです(https://github.com/joyent/node/blob/v0。 10.12/lib/http.js#L1119)、著者がエキゾチックなステータスコードを設定し、理由文字列を提供しない場合。 – josh3736

    答えて

    14

    正規表現のように、*を「0以上の文字」として読んだ場合、そのように見えます。

    あなたがRFCのNotational Conventionを読めば、わずかに異なる意味を持っていると思わ:

    *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以上の」「テキスト」が存在する可能性があることを意味します。それを置くために奇妙な方法が、あなたが正しいようです。

    厳密に言えば、スペースはですが、分離する必要がない場合は区切り記号を省略することもできます。ただし、厳密に実装されているクライアントを殺す可能性があります。ただし、スペース上でこの文字列を分割して、記述が必要な要素を読み取ろうとすると、しかし、再び、そのようなクライアントは、その状況を捉えるために防御的なプログラミングを使用していたはずです。 ;)

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

    +0

    ありがとう、それは便利です。 – Benjamin

    関連する問題