与POSTMAN的CORS

Isr*_*Gab 58 http cors postman

这个问题已被问过几次,但我仍然不明白:

当我读到关于的答案

没有'Access-Control-Allow-Origin'标题

问题,它说应该在请求的服务器上设置一个设置,以允许跨域:add_header 'Access-Control-Allow-Origin' '*';.

但是,请告诉我为什么当从邮递员(这是一个客户)询问时,它的工作就像一个魅力,我收到了所请求服务器的回复?

谢谢

Isr*_*Gab 36

正如@Musa评论它,似乎原因是:

Postman不关心SOP,它是开发工具而不是浏览器

顺便说一下,这是一个chrome扩展,以使其在您的浏览器上工作(这个是用于chrome,但你可以找到FF或Safari).

如果您想了解有关Cross-Origin的更多信息以及为什么它可以用于扩展,请在此处查看.

  • 那么如何保护我的 API 路由被 Postman 等工具访问呢?例如,需要验证码验证的 API。但如果直接从Postman访问,则绕过验证码验证 (10认同)
  • Sadman Muhib Samyo,CORS 不是用来保护服务器的。它的作用是保护客户端免受 cookie 窃取和其他客户端攻击。 (10认同)
  • 扩展程序的链接已损坏。 (5认同)
  • @Rationalist 考虑一下产品上的警告。生产商在玩具上贴有“4+ yrs”警告。如果客户遵守并在适当的环境下使用该产品,它可以挽救生命。服务器定义的规则可以在访问者的浏览器遵守规则时保存访问者的数据,从而防止来自外部页面的脚本从用户的计算机访问 API。 (2认同)

小智 24

如果您使用网站并填写表单以提交信息(例如您的社会安全号码),您希望确保将信息发送到您认为正在发送的网站.因此,默认情况下,浏览器构建为"不要将信息发送到被访问域以外的域".

最终这变得过于局限,但默认的想法仍然存在于浏览器中.不要让网页将信息发送到其他域.但这是所有浏览器检查.Chrome和firefox等内置代码,表示"在发送此请求之前,我们将检查目标是否与正在访问的页面匹配".

邮递员(或cmd行上的CURL)没有那些内置的支票.您手动与网站进行交互,因此您可以完全控制要发送的内容.

  • 更准确地说,邮递员不会发送会被检查的 XmlHttp 请求,而是发送顶级网络调用(例如您在新的浏览器选项卡上打开 URL),因此即使在扩展时它也不会被启动 (3认同)
  • 浏览器不会检查您的网站是否未将数据发送到另一个域:如果其他域网站允许所有来源,则您的浏览器 100% 可以接受。相反,它保护另一个域,以防您的网站未经授权使用其资源。 (2认同)

Ris*_*tra 22

虽然这里的所有答案都很好地解释了 cors 是什么,但直接回答您的问题是因为邮递员和浏览器存在以下差异。

浏览器:OPTIONS在向 API 端点发送任何新请求之前,发送调用以检查服务器类型并获取标头。它检查的地方Access-Control-Allow-Origin。考虑到这一点,Access-Control-Allow-Originheader 只是指定允许所有 CROSS ORIGINS 的,尽管默认浏览器只允许相同的来源。

邮差:发送直接GETPOSTPUTDELETE等没有检查什么类型的服务器是和获取的头请求Access-Control-Allow-Origin通过OPTIONS调用服务器。

  • “在向 API 端点发送任何新请求之前,发送 OPTIONS 调用来检查服务器类型并获取标头”——事实并非如此。它仅对非简单请求执行此操作。 (2认同)

小智 10

SOP是客户决定或不执行的服务器端配置.大多数浏览器都会强制执行它以防止与CSRF相关的问题.大多数开发人员工具都不关心它.

  • CORS 不能防止 CSRF 攻击,但 CSRF 令牌可以 (4认同)
  • 如果您发送“Origin”作为标头键并将任何其他来源(例如:https://google.com)作为标头值发送,您也可能会从 Postman 产生 CORS 错误。这将消除对 UI 的依赖来调试此问题。 (2认同)