У меня есть вопрос с запросом/ответом на http.Должен ли я закрыть прокси-соединение после получения 304?
Скажем, у меня есть прокси-сервер, который просто пересылает запросы клиента к серверу третьей стороны, а также ответы сервера третьих лиц-обратно к клиенту:
var http = require('http');
var url = require('url');
http.createServer(function (req, res) {
var opts = {
hostname : 'www.example.com',
port : 80,
path : req.url,
method : req.method,
headers : req.headers
};
opts.headers.host = opts.host;
var proxyReq = http.request(opts, function (proxyResponse) {
res.writeHead(proxyResponse.statusCode, proxyResponse.headers);
proxyResponse.pipe(res);
});
req.pipe(proxyReq);
}).listen(3000);
Допустим, клиент кэш-Aware (как браузер), и он передал заголовок if-modified-since
или if-none-match
(или что-то еще), из-за которого сторонний сервер ответил кодом статуса 304.
Теперь, технически, сервер не должен отправить тело, и клиент не заботится о теле ответа после получения 304.
ли какой-либо смысл, (и будет ли сохранить полосу пропускания/ресурсы), делая это в обработчик ответа прокси-сервера, которые ошибочно посылают тело ответа с 304:
var proxyReq = http.request(opts, function (proxyResponse) {
// Terminate the request, and respond with empty body.
if (proxyResponse.statusCode === 304) {
proxyResponse.connection.end();
return res.end();
}
/* ... */
Или это плохо прекратить сокеты, как это? Я не совсем понял, звонил ли .end()
в сокеты с подключением http keep-alive или оказывает какое-либо влияние на производительность.
Благодарим за помощь!