ajax跨域问题

当两个域具备相同的协议(如http), 相同的端口(如80),相同的host(如www.example.org),那么咱们就能够认为它们是相同的域javascript

Access-Control-Allow-Origin解决Ajax跨域问题 // 指定可信任的域名来接收响应信息,推荐php

<?php header('Access-Control-Allow-Origin:http://A.abc.com'); ?>html

或加入 // 使用通配符 * ,表示当前服务端通话任何域名发起请求,不推荐html5

<?php header('Access-Control-Allow-Origin:*'); ?>java

就这样在服务端简单加一句响应头responese headers声明,一个跨域请求就不会被浏览器的同源安全策略所阻止了 header('Access-Control-Allow-Origin:*');是html5新增的一项标准功能,所以 IE10如下 版本的浏览器是不支持 的, 所以,若是要求兼容IE9或更低版本的ie浏览器,会致使使用此种方式的跨域请求以及传递Cookie的计划夭折, 最终还得回归JSONP(目前主流的处理方式是使用JSONP,易于实现,兼容性好 须要注意的是: 添加响应头responese headers时,容许跨域请求的域名带不带斜杠/仍是有区别的,带斜杠/会报错: XMLHttpRequest cannot load abc.com/B. The 'Access-Control-Allow-Origin' header has a value 'http://A.abc.org/' that is not equal to the supplied origin. Origin 'http://A.abc.org' is therefore not allowed access.web

跨域解决后,若是还要操做Cookie,还得继续补增响应头:ajax

<?php header('Access-Control-Allow-Credentials:true'); ?>chrome

须要将 XMLHttpRequest 对象的 withCredentials 属性设置为 true,JQuery1.5.1+ 就开始提供了相应的字段,使用方式以下: $.ajax({ url:"B.abc.com", xhrFields:{ withCredentials:true }, crossDomain:true }); 哦也~ 收到 Cookie 了。 设置 withCredentials 为 true 的请求中会包含 A.abc.com端的全部Cookie,这些Cookie仍然遵循同源策略,因此,你只能访问其中和 abc.com/B同根域的Cookie,而没法访问其余域的Cookie。 Access-Control-Allow-Origin实则是html5 Cross-Origin Resource Sharing实现的最重要的一点参数配置。 Cross-Origin Resource Sharing,跨域资源共享,简称 CORS,能够做为一种跨域请求以及响应的解决方案。json

附: 禁用chrome本地安全策略,不用配服务器环境也能发起ajax请求: chrome 桌面快捷键 右键属性 在快捷方式标签下的“目标”框中加入 --disable-web-security,重启浏览器便可跨域

1.server端加上header设为 Access-Control-Allow-Origin:* # 跨域处理 弊端:不支持ie10如下版本浏览器的提交,项目中提交发现一直不成功

异常 ie10如下浏览器访问 提示 javascript 访问受限
request.open(method, url, true);(异步处理)受限制 由于 不支持ie10如下版本浏览器

2.ie9 和ie8版本处理 利用ajax jsonp 形式 post提交

注意:注意服务器端数据的返回 必须是jsonp的格式(在这里卡半天,一直用json的格式返回  echo json_encode($rstr))
 echo $callback."(".json_encode($rstr).")";
相关文章
相关标签/搜索