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

javascript – 浏览器实施同源政策​​的方式有很大的差异吗?

我的主页上有一张表格,设置为通过XHR POST提交到URL https://mydomain.com/send_sms.

当我访问Internet Explorer(http://mydomain.com)的主页的非SSL版本时,提交表单,没有任何反应.在Webkit控制台中,我收到一个有用的错误,说明Access-Control-Allow-Origin不允许Origin http://mydomain.com.

然而,在Firefox 13中,请求明确地提交& a返回200 OK,尽管响应体是空白的.此外,服务器端操作(发送SMS)实际上是由Firefox请求而不是其他浏览器触发的.

我一直认为同源政策甚至拒绝发送请求,但是也许是浏览器从不允许的响应中接收数据?

任何人都知道这是Mozilla的实现(甚至是监督)的有意义的区别吗?

解决方法

首先,http://example.com和https://example.com是不同的起源.对于 XHR Level 1,这意味着不允许跨原始请求.

但是对于目前的XHR (Level 2),当支持CORS(由服务器和客户机!)支持跨原始请求时,跨源请求可以是

> simple cross-orgin request,如果

>请求方法是GET,HEAD或POST,以及
>请求头字段之一不是接受,接受语言,内容语言或内容类型,而是
>没有设置预检标志

要么
> cross-origin request that requires a preflight,否则.

对于简单的跨原始请求,允许浏览器发送请求.但是当接收到响应时,它需要为check whether the server allows to share the resource.这是Access-Control-Allow-Origin头域和其他Access-Control- *响应头字段被检查的地方.只有通过此检查,浏览器才允许脚本读取响应.

对于其他跨原始请求,需要使用预检来与服务器协商在实际请求中允许发送哪些信息.这个预检要求基本上是一个OPTIONS请求,告诉服务器实际请求将包含什么(请求方法和头字段).那么服务器可以决定是否允许这样的请求.

在您的情况下,观察到的行为可能有多个原因.我猜你的send_sms脚本不是support the server side part for CORS.

原文地址:https://www.jb51.cc/js/153406.html

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

相关推荐