dou*_*lin 5 heroku http-headers node.js cors express
我尝试使用express.js CORS 包将 CORS 请求的来源限制为每个路由的一个特定域,如下所示:
const express = require('express');
const cors = require('cors');
const port = process.env.PORT || 3000;
let app = express();
app.get('/', cors({origin: 'http://example.com'}), (req, res, next) => {
res.sendStatus(200);
});
app.post('/', cors({origin: 'http://whatever.com'}) (req, res, next) => {
res.sendStatus(200);
});
app.listen(port, () => {
console.log(`Started on port ${port}`);
});
Run Code Online (Sandbox Code Playgroud)
然而,这似乎没有任何效果,因为我可以GET
进出POST
任何域。然后,我尝试使用以下命令将所有路由限制为一个来源,但得到了相同的结果:
app.use(cors({origin: 'http://example.com'}));
Run Code Online (Sandbox Code Playgroud)
我在 localhost 上的开发环境和 Heroku 上的生产环境中都遇到了这种情况。知道我缺少什么吗?
如果您的服务器正在发送Access-Control-Allow-Origin: http://example.com
响应标头,那么您实际上已经正确配置了它。
无论您从哪个来源发出请求,\xe2\x80\x99 都是服务器返回 200 响应的预期行为,即使对于来自配置之外的来源的请求也是如此http://example.com
CORS 设置不会导致服务器阻止来自任何客户端的请求。
\n相反,如果服务器响应来自Access-Control-Allow-Origin: http://example.com
Web 应用程序中的 JavaScript 代码的客户端请求,而该 Web 应用程序\xe2\x80\x99 未运行于http://example.com
,则浏览器会阻止该 JavaScript 代码访问响应。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS提供了更多详细信息。
\n基本上它的工作方式是,从服务器端来看,除了发送的响应标头不同之外,没有任何行为改变。因此,服务器将像其他情况一样接收请求,并像其他情况一样发送响应。
\n然后浏览器将像其他情况一样收到响应。您将能够在浏览器开发工具中看到响应并在那里进行检查。但这并不意味着浏览器会将响应公开给您的客户端 JavaScript 代码。
\n相反,浏览器会检查来自服务器的响应标头的值Access-Control-Allow-Origin
,并且仅当服务器表示应该允许以下情况时,才会将响应跨源公开到您的源: 您的浏览器会根据Access-Control-Allow-Origin
您的实际源检查 的值,并且如果它要么完全匹配,要么该值*
允许任何来源,只有这样浏览器才允许您的客户端 JavaScript 代码访问响应。
归档时间: |
|
查看次数: |
4981 次 |
最近记录: |