的NodeJS HTTP请求,不能改变响应头

问题描述:

你好,我正在做一个请求,然后在响应我试图加入进来头,但我得到了以下错误:的NodeJS HTTP请求,不能改变响应头

Server listening on port 80 [Request]: test.domain.com//web/guest/retail-betting (GET) D:\Development\xampp\htdocs\lab\tests\12\proxy\index.js:19 
     resp.setHeader("Access-Control-Allow-Origin", "*"); 
      ^

TypeError: resp.setHeader is not a function 
    at ClientRequest.<anonymous> (D:\Development\xampp\htdocs\lab\tests\12\proxy\index.js:19:14) 
    at ClientRequest.g (events.js:291:16) 
    at emitOne (events.js:96:13) 
    at ClientRequest.emit (events.js:188:7) 
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:473:21) 
    at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23) 
    at Socket.socketOnData (_http_client.js:362:20) 
    at emitOne (events.js:96:13) 
    at Socket.emit (events.js:188:7) 
    at readableAddChunk (_stream_readable.js:176:18) 

的这里是代码示例:

const http = require("http"); 
const clear = require("clear"); 
const server = http.createServer(); 

server.on('request', function(req, res) { 

    var options = { 
     host: HOST, 
     path: req.url, 
     method: req.method 
    }; 

    console.log("[Request]:", HOST + "/" + options.path, "(" + options.method.toUpperCase() + ")"); 

    var connector = http.request(options, function(resp) { 

     resp.setHeader("Access-Control-Allow-Origin", "*"); 
     resp.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE"); 
     resp.setHeader("Access-Control-Allow-Headers", "Content-Type"); 

     console.log("===============[Response Headers]==============="); 
     console.log(JSON.stringify(resp.headers, null, 4), "\n"); 

     resp.pipe(res); 

    }); 

    req.pipe(connector); 

}); 

server.listen(PORT); 

clear(); 

console.log("Server listening on port", PORT); 

不能使用resp更改请求头,因为这要求已经结束 - 你必须使用res为(使用您的变量名)。

这是因为resp是您从某个外部服务获得的响应,而res是您作为对您的服务从其他人获得的请求的响应发送的响应。

换句话说,当您充当客户时,您正在提出请求并获得响应。响应标题已设置,您无法更改它们。但是,当您充当服务器时,您会收到请求并发送一个响应 - 包含您可以自定义的标题和正文。

请参见:

不能标头值添加到响应,响应头来自服务器。如果你想添加交叉源标题,你必须将它添加到你的web应用程序中