这个问题被问了几次,但我还是不明白:
当我阅读有关的答案时
没有“ Access-Control-Allow-Origin”标头
问题,它说应在请求的服务器上设置一个设置,以允许跨域:add_header 'Access-Control-Allow-Origin' '*';
。
但是,请告诉我为什么在向邮递员(是客户端)询问时,它的工作原理很吸引人,并且我收到所请求服务器的答复?
谢谢
这个问题被问了几次,但我还是不明白:
当我阅读有关的答案时
没有“ Access-Control-Allow-Origin”标头
问题,它说应在请求的服务器上设置一个设置,以允许跨域:add_header 'Access-Control-Allow-Origin' '*';
。
但是,请告诉我为什么在向邮递员(是客户端)询问时,它的工作原理很吸引人,并且我收到所请求服务器的答复?
谢谢
Answers:
如果您使用网站,并且填写表格来提交信息(例如您的社会保险号),则要确保将信息发送到您认为要发送到的网站。因此,浏览器在默认情况下会说“请勿将信息发送到所访问域以外的其他域)。
最终这变得太局限了,但是默认的想法仍然保留在浏览器中。不要让网页将信息发送到其他域。但这就是所有浏览器检查。Chrome和firefox等内置代码表示“在发送此请求之前,我们将检查目标位置是否与所访问的页面匹配”。
邮递员(或cmd行上的CURL)没有内置的检查。您正在与网站进行手动交互,因此可以完全控制要发送的内容。
尽管这里的所有答案都很好地解释了cors是什么,但是直接回答您的问题将是由于邮递员和浏览器存在以下差异。
浏览器:OPTIONS
在向API端点发送任何新请求之前,发送调用以检查服务器类型并获取标头。它在哪里检查Access-Control-Allow-Origin
。考虑到这一点,Access-Control-Allow-Origin
标头仅指定允许所有的CROSS ORIGINS,尽管默认情况下浏览器仅允许相同的起源。
邮差:发送直接GET
,POST
,PUT
,DELETE
等没有检查什么类型的服务器是和获取的头请求Access-Control-Allow-Origin
通过OPTIONS
调用服务器。
通常,Postman用于调试并用于开发阶段。但是,如果您甚至想阻止邮递员阻止它,请尝试此操作。
const referrer_domain = "[enter-the-domain-name-of-the-referrer]"
//check for the referrer domain
app.all('/*', function(req, res, next) {
if(req.headers.referer.indexOf(referrer_domain) == -1){
res.send('Invalid Request')
}
next();
});
app.js
如果node app.js
用于运行服务器,请对其进行编辑。
使用浏览器/ chrome邮递员插件可以像网站一样检查CORS / SOP。请改用桌面应用程序以避免这些控件。