“相同域”上的角度选项 http 预检?

Posted

技术标签:

【中文标题】“相同域”上的角度选项 http 预检?【英文标题】:angular OPTIONS http preflight on "Same Domain"? 【发布时间】:2015-08-19 19:11:42 【问题描述】:

我目前对 Angular 的 (jquery) 预检 OPTIONS 调用是如何“选择”或选择在请求之前执行感到困惑。

我有一个正常的 RESTful api 调用 (api.domain.co)

我在我的主机文件/etc/hosts 中创建了一个主机条目127.0.0.1 local.domain.co

我已经创建了自签名证书:

http://www.akadia.com/services/ssh_test_certificate.html

我已将我的 mac 中的证书配置为受信任:

http://abetobing.com/blog/port-forwarding-mac-os-yosemite-81.html

我已经配置了我的优胜美地端口转发规则:

http://abetobing.com/blog/port-forwarding-mac-os-yosemite-81.html

我从浏览器的角度理解(Chrome):

我有一个从 https://local.domain.co 加载的 Angular 应用程序,该应用程序带有一个调用 https:// 的可信证书api.domain.co/user 证书看起来一切都是绿色的,我仍然收到对我的 api.domain.co 服务器的预检 OPTIONS 调用,这是一个支持 CORS 的节点 resitfy 服务器

一切正常……但是

我想摆脱 OPTIONS 预检任何指针?

【问题讨论】:

更新 - 域 myapp.domain.co api.domain.co 的实际服务器上的坏消息正在生成预检选项调用。来自同一台服务器。 【参考方案1】:

不幸的是,子域仍然受到预检规则的影响,因此如果您想删除 OPTIONS,您可以使用 jsonp 或为站点和 api 使用相同的子域。

【讨论】:

httphttps 或端口差异将构成 CORS【参考方案2】:

您不能使用本地主机。我必须在我的主机文件中创建一个条目,以将 127.0.0.1 关联到任意名称,例如 mackbook。那么它应该适合你。

【讨论】:

第 4 行就是这么说的。 REST 服务器是否知道您的主机名 local.domain.co。换句话说,local.domain.co 是 REST 服务器的受信任主机名吗? 是的,这就是 cors 预检和其他一切工作正常的原因。我只想摆脱预检 OPTIONS 调用,我担心即使来自同一台服务器,也可能 api.domain.com 和 app.domain.com 评估为跨域。可能需要 api 不需要像 app.domain.com/rest-api 那样位于 .com 后面。最后一部分听起来很荒谬,这只是一种恐惧,一种严重的恐惧:-) 这有点长,但我非常感谢我不得不继续 :-) 这已经很长了,但我非常感谢我不得不继续 :-) 我所有的电话都工作得很好。我的服务器有适当的 CORS 支持,甚至还有飞行前的 OPTIONS 请求支持。我得到了所有的回应。我建议,将 app.mydomain.com 和 api.mydomain.com 评估为需要此安全措施的跨域可能是错误的,并且由于某些我可能能够更改。所有的调用都再次正常工作,然后返回服务器并返回有效负载。但这不应该是 CORS 恕我直言(app.mydomain.com ==> api.mydomain.com != 需要跨域安全性)

以上是关于“相同域”上的角度选项 http 预检?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome中的慢速cors预检选项请求[关闭]

Rails 在 CORS 预检选项请求中以 404 响应

为啥在预检请求后 Chrome 不在开发工具网络选项卡上显示 POST 请求?

选项而不是 Post:对预检请求的响应未通过访问控制检查。

Angular 2 - 预检响应具有无效的 HTTP 状态代码 401

使用子域时防止预检选项