簡體   English   中英

Node.js HTTP請求,無法更改響應頭

[英]Nodejs HTTP request, cant alter response headers

您好我正在做一個請求,然后在響應時我試圖添加come標頭,但出現以下錯誤:

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應用程序中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM