同源策略:是浏览器的一种安全策略。
同源:协议,域名,端口号必须完全相同。
当前网页资源的url与ajax请求的服务器目标资源的url必须三者保持一致,才满足同源策略。
ajax默认是遵循同源策略的,不遵循是不能直接发送ajax请求的。
违背同源策略就是跨域。
有时候需要多个服务器提供服务,就需要解决跨域问题。
如何解决跨域?
方案一:JSONP(只支持get请求)原生跨域解决方案
全称JSON with padding,一个非官方的跨域解决方案。
原理:网页中有些标签本身就具备跨域能力,比如:img,link,iframe,script等。
JSONP是利用script标签的跨域能力来发送请求的。
使用:创建script标签,设置src属性为请求url。
前端声明一个接收数据的函数,后端需要返回js代码(函数调用形式,参数为响应的数据),由script标签解析。
jQuery发送jsonp请求:$.getJSON()
注意:?callback?
实际发送请求时,callback是有值的。
服务端接收callback参数(用来注册函数),返回这个函数的调用。
方案二:设置CORS响应头实现跨域
CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS是官方的跨域解决方案,
- 特点:不需要在客户端做任何的操作,完全在服务器中进行处理
- 支持get,post请求
- 跨域资源共享标准新增了一组HTTP首部字段,允许服务器声明哪些资源站通过浏览器有权限访问哪些资源
工作原理:CORS通过设置响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应后就会对响应放行。
使用:主要是服务器端的设置
哪个域名都可以访问,也可以自定义头部信息,支持所有请求方法。
方案三:
通过iframe设置document.domain也可以实现跨域,这种方式用在主域名相同子域名不同的跨域访问中。
其他补充: