Почему мой запрос HTTP / 1.0 GET возвращает OK, но без содержимого тела? - PullRequest
2 голосов
/ 19 декабря 2011

Я делаю простой http-запросчик страниц на C. Он использует сокеты для отправки HTTP / 1.0 GET-запросов хостам и анализирует ответ, чтобы эффективно загрузить HTML-файл. Тем не менее, когда я отправляю запрос, как это:

GET http://stackoverflow.com/questions HTTP/1.0
User-Agent: myRequester/1.0

Возвращает это

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Date: Mon, 19 Dec 2011 15:28:08 GMT
Content-Length: 54362
Connection: close

Но без содержимого тела.

Да, я поставил CRLF в конце каждой строки и пустую строку в конце. Я использую только одну розетку через одно соединение. И я также должен придерживаться HTTP / 1.0.

1 Ответ

3 голосов
/ 19 декабря 2011

Наиболее вероятное объяснение состоит в том, что сервер фактически отправляет тело, но вы не читаете все это. Большинство сетевых систем не обязательно возвращают весь ответ в одном вызове функции, потому что считают полезным, чтобы данные, которые доступны немедленно, возвращались немедленно, даже если ожидается больше.

Системный вызов Unix recv возвращает ноль после завершения соединения. Вы должны продолжать звонить, пока не получите ноль или ошибку.

...