2012-10-05 11 views
7

Content-LengthまたはTransfer-Encodingが含まれていない場合でも、HTTP応答ヘッダー(以下のような)は有効ですか?Transfer-EncodingとContent-Lengthなしで有効なHTTP応答ヘッダー?

- Http: Response, HTTP/1.1, Status: Ok, URL: /AAA/B.json 
    ProtocolVersion: HTTP/1.1 
    StatusCode: 200, Ok 
    Reason: OK 
    Expires: Fri, 05 Oct 2012 01:41:30 GMT 
    Date: Fri, 05 Oct 2012 01:40:46 GMT 
    Vary: Accept-Encoding 
    Accept-Ranges: bytes 
    Cache-Control: public, max-age=43 
    Server: Noelios-Restlet-Engine/1.1.10 
    ContentType: application/json;charset=UTF-8 
    ContentEncoding: gzip 
    Connection: close 
    X-Served-By: 85.111 
    HeaderEnd: CRLF 

Content-LengthまたはTransfer-Encodingのいずれかが表示されると予想されましたが、そのいずれも存在しません。

私はHTTP-RFCを読みましたが、まだ分かりません。

@CodeCasterは、私は、RFCのセクション4.4を読みましたが、あなたは、レスポンスヘッダはJSONストリームを返すために使用されて見ることができるように、まだ明確ではない午前:

  • セクション4.4、ルール1つの定義メッセージ本体を含めてはいけません。私の場合には当てはまらないようです。
  • セクション4.4、ルール4、これについてはわかりませんが、レスポンスヘッダーに "multipart/byteranges"が表示されないため、このルールは当てはまりませんか?
  • セクション4.4ルール5、実際にはヘッダーに「Connection:close」が含まれているため、これはほとんど不明です。

これ以上のコメントはありますか?

答えて

2

はい、有効です。メッセージの長さを決定するための5つの方法があります

RFC 2616 Section 4.4. Message Length

それがメッセージに表示さ 、メッセージの転送長さはメッセージボディの長さです。つまり、すべての転送コーディングに が適用された後です。メッセージ本体がメッセージに含まれている場合に、その身体の 転送長は(優先順に)以下 のいずれかによって決定される:

  1. 含む「MUST NOT」の応答メッセージ に存在するエンティティヘッダーフィールドにかかわらず、メッセージボディ( は1xx、204、および304応答と同様、HEAD 要求に対する応答)は、 ヘッダーフィールドの後の最初の空白行で常に終了します。メッセージ。

  2. 転送符号化ヘッダフィールド(セクション14.41)が存在し、 は「同一性」以外の値を持っている場合、転送長が転送符号化(セクション3.6の「チャンク」の使用によって定義 あります)、 メッセージが接続を閉じることによって終了しない限り。

  3. Content-Lengthヘッダーフィールド(セクション14.13)が存在する場合、OCTETsの 10進値は、エンティティー長と 転送長の両方を表します。これら2つの長さが異なる場合(すなわち、Transfer-Encodingの ヘッダーフィールドが存在する場合)、Content-Lengthヘッダーフィールドは に送信してはならない(MUST NOT)。メッセージが Transfer-EncodingヘッダーフィールドとContent-Lengthヘッダーフィールドの両方で受信された場合、 は無視する必要があります。

  4. メッセージが「マルチパート/ byteranges」メディアタイプを使用し、 転送長が特に指定されない場合

    は、この自己 画定メディアタイプは、転送長を規定します。このメディアタイプ [M]受信者が受信者が を解析できることがわかっていない限り、UST NOTを使用します。 1.1クライアントからの複数バイトの 範囲指定子を持つRangeヘッダーの要求が存在することは、クライアントが multipart/byteranges応答を解析できることを意味します。

    マルチパート/バイタンジンを理解していない1.0プロキシによって、範囲ヘッダーが転送されている可能性があります。この場合、サーバは の項目1,3または5で定義された方法を使用してメッセージを区切る必要があります( )。

  5. サーバーが接続を閉じる。

+0

私が読んRFCのセクション4.4をしましたが、(その は、サーバーが応答を返送するための可能性を残していないからである。接続 を閉じると、リクエストボディの終了を示すために使用することはできません)応答ヘッダーはjsonストリームを返すために使用されます: - セクション4.4、ルール1定義はメッセージ本体を含んではいけません、私の場合には当てはまりません。 - セクション4.4、ルール4、これについてはわかりませんが、応答ヘッダーに "multipart/byteranges"が表示されないため、このルールは当てはまりませんか? - セクション4.4ルール5、これはほとんどが私には分かりません。ヘッダに実際に "Connection:close"が含まれているからです。 これ以上のコメントはありますか?ありがとう! – user1721757

+4

@ user1721757ルール1は、上記のステータスコードにのみ適用されます。あなたは200を受け取り、 'Connection:close'ヘッダがあるので、サーバが接続を閉じるまでクライアントは読み続けるべきです。 – CodeCaster

関連する問題