2012-10-05 3 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,이 헤더는 실제 "연결 : 닫기"를 포함하고 있기 때문에 대부분이 명확하지 않습니다. 관련이 있습니까?

그럼, 더 이상의 의견이 있으십니까?

답변

2

예, 유효합니다.

RFC 2616 Section 4.4. Message Length : 메시지의 길이를 결정하는 다섯 가지 방법이 있습니다

메시지의 전송 길이가 메시지에 나타납니다 과 메시지 본문의 길이는; 즉, 모든 전송 코딩 후에 이 적용되었습니다. Message-Body가 메시지에 포함되면, 해당 본체의 전송 길이는 (우선 순위에 따라) 다음 중 하나에 의해 결정된다 "제외"

  1. 상관 응답 메시지를 포함하는 메시지 본문 ( 은 1xx, 204 및 304 응답으로 HEAD 요청에 대한 응답)은 에있는 엔터티 헤더 필드에 관계없이 헤더 필드 다음의 첫 번째 빈 줄로 항상 종료됩니다. 메시지.

  2. Transfer-Encoding 헤더 필드 (14.41 절)가 존재하고 는 전송 코딩 (섹션 3.6 "청크"를 이용하여 정의 "동일성"이외의 값으로, 다음 전송 길이가 이 있으면), 메시지가 연결을 닫음으로써 종료되지 않는 한. 콘텐츠 길이 헤더 필드 (14.13 부)가 존재하는 경우

  3. 는 옥텟의 소수점 값은 엔티티 길이와 전송 길이 모두를 나타낸다. 두 길이가 다른 경우 (즉, Transfer-Encoding 헤더 필드가있는 경우) Content-Length 헤더 필드는 으로 보내면 안됩니다. Transfer-Encoding 헤더 필드와 Content-Length 헤더 필드가 모두 포함 된 메시지가 수신되면 메시지를 무시해야합니다.

  4. 메시지 "다중/byteranges를"용지 종류를 사용하고 전송 길이가 달리 특정되지 않으면

    는,이 자기 구분 미디어 타입은 전송 길이를 정의한다. 이 미디어 유형 발신자가 수신자가 을 구문 분석 할 수 있음을 알고 있지 않으면 [US] UST를 사용하지 마십시오. 1.1 클라이언트의 범위 지정자인 바이트가 여러 개인 Range 헤더 요청에서 클라이언트가 multipart/byteranges 응답을 구문 분석 할 수 있음을 의미합니다.

    multipart/byteranges를 이해하지 못하는 1.0 프록시가 범위 헤더를 전달할 수 있습니다. 이 경우 서버는이 섹션 의 항목 1,3 또는 5에 정의 된 방법을 사용하여 메시지를 으로 구분해야합니다.

  5. 서버가 연결을 종료합니다. (연결 을 닫으면 그 응답을 다시 전송하는 서버에 대한 가능성을 전혀 남겨 두지 않기 때문에, 요청 본문의 끝을 표시하는 데 사용할 수 없습니다.)

+0

것은 내가 RFC 섹션 4.4 읽어 못했지만, 볼 수 있듯이 응답 헤더가 json 스트림을 반환하는 데 사용됩니다. - 섹션 4.4, 규칙 1 정의에는 메시지 본문을 포함해서는 안되며 제 경우에는 적용되지 않습니다. - 섹션 4.4, 규칙 4, 이에 대해 잘 모르겠지만 응답 헤더에서 "multipart/byteranges"가 표시되지 않으므로이 규칙이 적용되지 않는다는 의미입니까? - 섹션 4.4 규칙 5,이 헤더는 실제 "연결 : 닫기"를 포함하고 있기 때문에 대부분 내게 불분명합니다. 관련이 있습니까? 그럼, 더 이상의 의견이 있으십니까? 감사! – user1721757

+4

@ user1721757 규칙 1은 언급 된 상태 코드에만 적용됩니다. 당신은 200을 받고'Connection : close' 헤더가 있기 때문에, 클라이언트는 서버가 연결을 닫을 때까지 계속 읽어야합니다. – CodeCaster

관련 문제