поддержка постоянных соединений HTTP в моем прокси-сервере - PullRequest
0 голосов
/ 16 апреля 2009

Я реализую HTTP-кеширующий прокси-сервер на C ++. Я сделал большую часть его, но застрял на месте.
Что я делаю, так это создаю каждый поток с сокетом для обработки каждый раз, когда приходит запрос от браузера. Я анализирую запрос, проверяю его доступность в кеше и, если не найдено, пересылаю его на конечный www-сервер. В обоих случаях я записываю ответ, полученный на подключенном сокете. Теперь проблема в том, что до тех пор, пока я не закрою сокет, браузер не считает, что передача завершена, и ждет бесконечно.
Таким образом, я не могу использовать сокет для более чем одного соединения, другими словами, я не могу поддерживать постоянные соединения.
Любая помощь будет оценена ..

Спасибо

Ответы [ 2 ]

2 голосов
/ 16 апреля 2009

Какие заголовки вы отправляете обратно клиенту?

Вы должны быть в том числе:

Content-Length: ...
Keep-Alive: timeout=..., max=...
Connection: Keep-Alive

В частности, заголовок Content-Length необходим для постоянных соединений, чтобы клиент знал, сколько данных нужно прочитать. См. раздел 8.1.2.1 RFC 2616 .

В качестве альтернативы, если вы хотите сказать клиенту разорвать соединение, отправьте:

Connection: close
0 голосов
/ 16 апреля 2009

Теперь проблема в том, что до тех пор, пока я не закрою сокет, браузер не принимает перевод будет завершен и ждет бесконечно.

правый. HTTP 1.1 по умолчанию использует Keep-Alive.

Таким образом, я не могу использовать сокет для более чем одного соединения, другими словами, я не могу поддержка постоянных соединений.

Я не уверен, что понимаю вас, потому что это постоянное соединение у вас есть постоянное соединение.

...