这个问题已经被问了好几次了,但我还是有些不明白:当我读到关于无“Access-Control-Allow-Origin”标头问题,它说应该在请求的服务器上设置一个设置,以便允许跨域:add_header 'Access-Control-Allow-Origin' '*';的。但是,请告诉我为什么当问** Postman **(这是一个客户端),它的工作就像一个魅力,我有一个从请求的服务器响应?谢谢你的好意
add_header 'Access-Control-Allow-Origin' '*';
mdfafbf11#
CORS(跨域资源共享)和SOP(同源策略)是服务器端配置,客户端决定是否执行。与客户相关
CORS
SOP
CSRF
qyyhg6bp2#
正如@Musa评论的那样,似乎原因是:Postman不关心SOP,它是一个开发工具而不是浏览器顺便说一下,这里有一个chrome extension,以便使它在您的浏览器上工作(这是一个用于chrome,但您可以找到FF或Safari)。如果您想了解更多关于跨域以及为什么它适用于扩展,请查看here。
vmpqdwk33#
如果您使用网站并填写表格提交信息(例如您的社会安全号码),您希望确保信息被发送到您认为要发送的网站。因此,浏览器被构建为在默认情况下说,“不要向正在访问的域以外的域发送信息”。最终,这变得过于限制,但默认的想法仍然存在于浏览器中。不要让网页将信息发送到不同的域。但这都是浏览器检查。Chrome和firefox等浏览器都内置了这样的代码:“在发送此请求之前,我们将检查目的地是否与正在访问的页面匹配。”Postman(或cmd行上的CURL)没有这些内置检查。您手动与网站交互,因此您可以完全控制您发送的内容。
2uluyalo4#
虽然这里所有的答案都很好地解释了cors是什么,但对你的问题的直接回答是因为 Postman 和浏览器的以下差异。浏览器:发送OPTIONS调用以检查服务器类型,并在向API端点发送任何新请求之前获取标头。检查Access-Control-Allow-Origin。考虑到这一点,Access-Control-Allow-Origin头只指定允许哪些所有CROSS ORIGINS,尽管默认情况下浏览器只允许相同的起源。Postman :直接发送GET、POST、PUT、DELETE等。请求,而不检查服务器的类型,并通过对服务器的OPTIONS调用来获取标头Access-Control-Allow-Origin。
OPTIONS
Access-Control-Allow-Origin
GET
POST
PUT
DELETE
hwamh0ep5#
通常,Postman用于调试和开发阶段。但如果你想阻止它,甚至从 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(); });
字符串
3npbholx6#
使用浏览器/chrome postman插件来检查CORS/SOP,就像网站一样。使用桌面应用程序来避免这些控件。
6条答案
按热度按时间mdfafbf11#
CORS
(跨域资源共享)和SOP
(同源策略)是服务器端配置,客户端决定是否执行。与客户相关
CSRF
攻击相关的问题。qyyhg6bp2#
正如@Musa评论的那样,似乎原因是:
Postman不关心SOP,它是一个开发工具而不是浏览器
顺便说一下,这里有一个chrome extension,以便使它在您的浏览器上工作(这是一个用于chrome,但您可以找到FF或Safari)。
如果您想了解更多关于跨域以及为什么它适用于扩展,请查看here。
vmpqdwk33#
如果您使用网站并填写表格提交信息(例如您的社会安全号码),您希望确保信息被发送到您认为要发送的网站。因此,浏览器被构建为在默认情况下说,“不要向正在访问的域以外的域发送信息”。
最终,这变得过于限制,但默认的想法仍然存在于浏览器中。不要让网页将信息发送到不同的域。但这都是浏览器检查。Chrome和firefox等浏览器都内置了这样的代码:“在发送此请求之前,我们将检查目的地是否与正在访问的页面匹配。”
Postman(或cmd行上的CURL)没有这些内置检查。您手动与网站交互,因此您可以完全控制您发送的内容。
2uluyalo4#
虽然这里所有的答案都很好地解释了cors是什么,但对你的问题的直接回答是因为 Postman 和浏览器的以下差异。
浏览器:发送
OPTIONS
调用以检查服务器类型,并在向API端点发送任何新请求之前获取标头。检查Access-Control-Allow-Origin
。考虑到这一点,Access-Control-Allow-Origin
头只指定允许哪些所有CROSS ORIGINS,尽管默认情况下浏览器只允许相同的起源。Postman :直接发送
GET
、POST
、PUT
、DELETE
等。请求,而不检查服务器的类型,并通过对服务器的OPTIONS
调用来获取标头Access-Control-Allow-Origin
。hwamh0ep5#
通常,Postman用于调试和开发阶段。但如果你想阻止它,甚至从 Postman 尝试这个。
字符串
3npbholx6#
使用浏览器/chrome postman插件来检查CORS/SOP,就像网站一样。使用桌面应用程序来避免这些控件。