gpt4 book ai didi

node.js - 代理服务器未正确处理 OPTIONS 请求

转载 作者:行者123 更新时间:2023-12-02 10:44:11 25 4
gpt4 key购买 nike

我有这个简单的 Node.js 代理服务器实现:

const s = http.createServer((req, res) => {

console.log('req method:', req.method);

if(String(req.method || '').toUpperCase() === 'OPTIONS'){
res.setHeader('Access-Control-Expose-Headers', '*');
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.setHeader('Access-Control-Max-Age', '3600');
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', '*');
res.setHeader('Access-Control-Allow-Methods', '*');
res.setHeader('Connection', 'keep-alive');
res.setHeader('Access-Control-Request-Method', 'POST');
res.setHeader('Allow', 'GET, POST, PUT, DELETE, OPTIONS, HEAD');
res.setHeader('Allowed', 'GET, POST, PUT, DELETE, OPTIONS, HEAD');
return res.writeHead(200);
}

// ...
});

问题是它没有收到除 OPTIONS 请求之外的任何请求,我怀疑这是因为它没有正确处理 OPTIONS 请求。我想允许一切,因为这一切都在本地主机上本地运行 - 我对此代理服务器的 OPTIONS 请求处理是否做错了什么?

当我使用 http-proxy 库时,一切似乎都工作正常:

const httpProxy = require('http-proxy');
const proxy = httpProxy.createProxyServer({target:'http://localhost:2020'});
const s = http.createServer((req,res) => proxy.web(req,res));

..所以我的实现有问题...我猜是最基本的问题 - 作为代理服务器,我应该将 OPTIONS 请求转发到代理服务器还是只是尽早响应?这绝对是第一个决策点..

最佳答案

我注意到的一件事是,您缺少 Content-Length header 。

根据RFC7231 section 4.3.7您必须发送

Content-Length: 0

如果您没有响应正文。

关于您问题的第二部分:OPTIONS 请求应转发到目标服务器。它们不可缓存。

关于node.js - 代理服务器未正确处理 OPTIONS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60498642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com