작은 프로그램에서 HTTP 요청을 보내고 TCP 프로토콜로 응답을받습니다.Content-Length가없는 http 요청에 대한 응답을 얻으시겠습니까?
내 요청 형식.
GET/HTTP/1.0
Host: somewebsite.com
{two new line}
Content-Length 헤더를 찾을 때까지 소켓에서 응답을 (NetworkStream과 C#의 StreamReader를 사용하여) 읽습니다. 길이를 저장 한 다음 빈 줄을 찾을 때까지 계속 읽습니다. 그런 다음 길이가있는 버퍼를 만들고 나머지 응답을받습니다.
하지만 일부 응답에는 콘텐츠 길이 헤더가 없습니다. 그래서 내 접근 방식은 실패합니다. 얼마나 많은 바이트를 수신해야하는지 모르겠습니까?
매우 오해의 소지가 있습니다. 응답에 콘텐츠 길이 헤더 필드가 있고 청크 분할 인코딩을 사용하지 않는 경우 사용자가 보유한 * 유일한 * 정보입니다. 콘텐츠를 더 적게받는 경우 콘텐츠는 잘린 것으로 간주되어야합니다. 더 많은 콘텐츠를 받으면 시청자가 고장 났거나 이미 다음 응답을보고 있습니다. –
클라이언트가 현재의 구문 분석을 완료하지 못했을 때 다음 응답을 읽는 것이 단일 고유 소켓에서 어떻게 일어날 수 있는지에 대해 겸손히 묻습니다. 아직 다음 요청을 이미 보냈을 가능성은 거의 없습니다. 나는 downvote을 더 잘 이해할 것이다. 그렇지 않으면 나는이 문제에 대해 중요한 의견 차이를 보지 못한다. 선언 된 컨텐츠 길이까지 읽었을 때 당신은 무엇을하겠습니까? read는 2 바이트 더 남았음을 알려줍니다. 실제로, "어리석은 부러진 서버, 나는 더 이상 당신과 이야기하지 않을 것"이라고 말하는 것은 좋은 프로그래머가 원하는만큼 자주 적용되지 않습니다. –
vtmarvin : 클라이언트가 파이프 라이닝을 사용할 수 있습니다. –