欢迎使用CSDN-markdown编辑器

来源:互联网 发布:linux cat 全部 编辑:程序博客网 时间:2024/05/29 17:27

Ajax如何实现跨域问题

一个域名的组成

http:// www . abc.com : 8080 /scripts/jquery.js 协议   子域名   主域名   端口号   请求资源地址
  • 当协议、子域名、主域名、端口号中任意一个不同时,都算作不同域。

  • 同域之间相互请求资源,就算作”跨域”。


同源策略

JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象——同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性。也就是说,受到请求的 URL 的域必须与当前Web页面的域相同。这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作。这个浏览器策略很旧,从 Netscape Navigator 2.0 版本开始就存在。

处理跨域的方式

  1. 代理

    通过同域名的服务器创建一个代理——让 Web 页面向它源自的 Web 服务器请求数据,并且让 Web 服务器像代理一样将请求转发给真正的第三方服务器。如:

    北京服务器:www.beijing.com

    上海服务器:www.shanghai.com

    北京web服务器后台:www.beijing.com/proxy-shanghaiservice.php

    来调用上海服务器的服务:www.shanghai.com/service.php

    然后将响应结果返回给前端,这样前端调用背景同域名的服务就和调用上海的服务具有相同的效果。

  2. 处理跨域方式二——JSONP(只支持GET请求)

    JSONP可用于解决主流浏览器的跨域数据访问的问题。

    在www.aaa.com页面中:

    <script>    function jsonp(json){alert(json["name"]);}</script><script src="http;//www.bbb.com/jsonp.js"></script>

    在www.bbb.com页面中:

    jsonp({'name':'xx','age':24})
  3. 处理跨域的方法三——XHR2

    *HTML5提供的XMLHttpRequest Level2已经实现了跨域访问以及其他的一些新功能

    *IE10以下的版本都不支持

    *在服务器端

    header('Access-Control-Allow-Origin:*');header('Access-Control-Allow-Methods:POST,GET');

0 0
原创粉丝点击