微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有可能拦截对AngularJS中HTTP OPTIONS预检的响应?

我正在尝试实现一个简单的拦截器,它允许我在我的Angular应用程序中显示“无法联系服务器”的消息.但是,由于API位于不同的主机上,我正在处理CORS飞行前OPTIONS请求.

我发现如果API不可用,Chrome开发工具会在OPTIONS请求中显示503,但Angular的$http拦截器会捕获对后续GET请求的404响应.我相信这是因为OPTIONS响应不包含所需的CORS头,因此实际上从未执行过GET.

是否有可能拦截OPTIONS响应?如果我看到的只是404,我无法区分“服务器关闭”和“没有这样的资源”.

您无法通过设计拦截此请求 – 浏览器正在“检查”您,确保您应该被允许发出请求.

我们使用了三种解决方案来解决这个问题:

>如果问题是您正在使用像NodeJS这样的开发环境,并且您的域名不匹配(也就是说,如果您通常不需要在生产中处理此问题),则可以使用代理. https://github.com/substack/bouncyBounceJS NodeJS Module一个易于使用的选项.然后,您的Web服务请求域将与您的页面所在的域匹配,并且不会触发检查. (你也可以在制作中使用这样的技巧,虽然它很容易被滥用!)>另外,对于临时使用,您可以使用类似fiddler或Charles的方法通过伪造所需的标题来操纵请求,或者告诉浏览器不要检查它们( – Chrome中的–disable-web-security).>如果您在生产中遇到此问题,则需要合法地修复它(调整Web服务处理程序以添加所需的标头 – 只有两个),或者找到一种方法以不触发的方式发出请求支票.例如,如果您同时控制源域和目标域,则可以在目标上放置一个脚本,以便向自己发出请求.无形地在IFRAME中运行它.然后你可以使用postMessage()之类的东西来回沟通.像Facebook这样的大型服务出于同样的原因使用“XHR桥”.

原文地址:https://www.jb51.cc/angularjs/141058.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐