JavaScript的跨域请求

JavaScript的跨域请求

[TOC]

神马是跨域请求

​ 因为浏览器的同源策略,默认情况下,JavaScript在发送AJAX请求时,URL的域名必须和当前页面完全一致。

也就是说,请求ajax的url,域名要相同(www.example.comexample.com不同),协议要相同(httphttps不同),端口号要相同(默认是:80端口,它和:8080就不同)。

解决方法

  1. 通过在同源域名下架设一个代理服务器来转发,JavaScript负责把请求发送到代理服务器。然后让代理服务器帮助我们完成请求。

  2. 通过JSONP,它有个限制,只能用GET请求,并且要求返回JavaScript。这种方式跨域实际上是利用了浏览器允许跨域引用JavaScript资源:

  3. 通过CORS进行跨域请求。

    cros是提出的新的跨域策略:

    这里写图片描述

    Origin表示本域,也就是浏览器当前页面的域。当JavaScript向外域(如sina.com)发起请求后,浏览器收到响应后,首先检查Access-Control-Allow-Origin是否包含本域(或者*),如果是,则此次跨域请求成功,如果不是,则请求失败,JavaScript将无法获取到响应的任何数据。

    可见,跨域能否成功,取决于对方服务器是否愿意给你设置一个正确的Access-Control-Allow-Origin,决定权始终在对方手中。