Javascript 我是否应该在收到请求后关闭代理连接?
我有一个http请求/响应问题 假设我有一个代理服务器,它将客户端的请求转发给第三方服务器,第三方服务器的响应返回给客户端:Javascript 我是否应该在收到请求后关闭代理连接?,javascript,node.js,sockets,http,proxy,Javascript,Node.js,Sockets,Http,Proxy,我有一个http请求/响应问题 假设我有一个代理服务器,它将客户端的请求转发给第三方服务器,第三方服务器的响应返回给客户端: var http = require('http'); var url = require('url'); http.createServer(function (req, res) { var opts = { hostname : 'www.example.com', port : 80, path : req.url,
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);
假设客户机具有缓存感知功能(如浏览器),如果自以来进行了修改,则会传递一个,如果没有匹配的
(或其他)头,则会传递一个,导致第三方服务器响应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保持活动连接,或者对性能有任何影响
谢谢你的帮助
现在,从技术上讲,客户机在收到响应后并不关心响应主体
304响应不应包含响应主体。如果这样做,将违反协议,您应该关闭连接。RFC2616:
304响应不能包含消息体,因此总是由头字段后的第一个空行终止