2015-01-04 2 views
0

클라이언트와 서버간에 연결이 설정된 후 클라이언트는 HTTP 요청 보내기를 시작합니다. 이것은 GET/HTTP/1.1과 같은 줄과 몇 줄의 머리글로 구성됩니다. 내 질문은 웹 서버가 데이터를 반환하기 시작하는 시점을 어떻게 알 수 있습니까? 클라이언트는 연결의 측면을 어떻게 든 닫아 요청이 완료되고 응답 수신을 시작할 준비가되었는지 나타냅니다. 서버는 헤더 끝에있는 "\ r \ n \ r \ n"문자열 다음을 알고 있습니까? 완전히 다른 것입니까?HTTP 서버가 언제 데이터를 반환하기 시작합니까?

감사합니다.

답변

1

HTTP 1.1 사양을 읽어야합니다. 서브는 응답을 공식화하고 보내기 전에 전체 요청을 읽어야합니다.

  1. Content-length 헤더
  2. 청크 분할 전송 인코딩 : 요청이 끝나는 곳에 알 수있는 적어도 두 가지 방법이 있습니다.
0

HTTP 1.1 core specifications을 읽어야합니다. 전송 인코딩의

19.4.6 서두

HTTP/1.1이 전송 인코딩 헤더 필드 (제 14.41)를 소개한다. 프락시/게이트웨이는 MIME 호환 프로토콜을 통해 메시지를 전달하기 전에 전송 코딩을 제거해야합니다.

(가) 전송 코딩 (섹션 3.6) 를 의사 코드로 표현 될 수있다 "청크"디코딩하기위한 프로세스로서 :

length := 0 
    read chunk-size, chunk-extension (if any) and CRLF 
    while (chunk-size > 0) { 
     read chunk-data and CRLF 
     append chunk-data to entity-body 
     length := length + chunk-size 
     read chunk-size and CRLF 
    } 
    read entity-header 
    while (entity-header not empty) { 
     append entity-header to existing header fields 
     read entity-header 
    } 
    Content-Length := length 
    Remove "chunked" from Transfer-Encoding 
관련 문제