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.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...