8

Content-LengthまたはTransfer-Encodingが含まれていない場合でも、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、ヘッダーには実際には「接続:閉じる」が含まれているため、これはほとんどわかりませんが、関連していますか?

それで、それ以上のコメントはありますか?

4

1 に答える 1

3

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

RFC2616セクション4.4。メッセージの長さ

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

  1. 「MUSTNOT」にメッセージ本文が含まれる応答メッセージ(1xx、204、304応答、HEAD要求への応答など)は、エンティティに関係なく、常にヘッダーフィールドの後の最初の空行で終了します。メッセージに存在するヘッダーフィールド。
  1. Transfer-Encodingヘッダーフィールド(セクション14.41)が存在し、「identity」以外の値を持つ場合、メッセージが終了しない限り、転送長は「チャンク」転送コーディング(セクション3.6)を使用して定義されます。接続を閉じることによって。
  1. Content-Lengthヘッダーフィールド(セクション14.13)が存在する場合、OCTETの10進値は、エンティティ長と転送長の両方を表します。これらの2つの長さが異なる場合(つまり、Transfer-Encodingヘッダーフィールドが存在する場合)、Content-Lengthヘッダーフィールドを送信してはなりません(MUSTNOT)。Transfer-EncodingヘッダーフィールドとContent-Lengthヘッダーフィールドの両方を含むメッセージを受信した場合、後者は無視する必要があります。
  1. メッセージがメディアタイプ「multipart/byteranges」を使用し、転送長が特に指定されていない場合、この自己区切りメディアタイプが転送長を定義します。このメディアタイプ[M]は、受信者がそれを解析できることを送信者が知らない限り、使用してはなりません。1.1クライアントからの複数のバイト範囲指定子を持つRangeヘッダーの要求に存在することは、クライアントがmultipart/byteranges応答を解析できることを意味します。
  A range header might be forwarded by a 1.0 proxy that does not
   understand multipart/byteranges; in this case the server MUST
   delimit the message using methods defined in items 1,3 or 5 of
   this section.
  1. サーバーが接続を閉じることによって。(接続を閉じることは、サーバーが応答を返送する可能性を残さないため、要求本文の終了を示すために使用することはできません。)
于 2012-10-05T13:17:39.663 に答える