跨域解决方式
Posted 燕子的路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨域解决方式相关的知识,希望对你有一定的参考价值。
1. 跨域
废话不多说,就是为了解决同源策略的苛刻,直接说解决方式jsop和cors两种方式
jsop是大家用的比较多也是最常见的一种,简单说下原理:
利用script标签的方式向不同的域下发送请求。首先动态的创建script标签,其src属性是没有跨域限制的,将请求的路径赋给src,type="text/javascript",这样就会一段执行之后就会将结果返回一段js代码,那么就在客户端注册一个callback方法(如:jsonCallback)。那么服务器端在返回这段内容的时候就会包裹上jsonCallback(....),客户端就会自动执行这个方法。正式由于这种方式是利用的script标签,因此也就注定了他的局限性,只能解决get请求。
同样的还可利用<image src>标签来实现
那么对于现在比较流行的restfull风格的POST,PUT,DELETE等方式就束手无策了吗,不是的,还有一种方式是cors策略
这种方式主要是服务器端进行操作,Access-Control-Allow-Origin: | * // 授权的源控制 Access-Control-Max-Age: // 授权的时间 Access-Control-Allow-Credentials: true | false // 控制是否开启与Ajax的Cookie提交方式 Access-Control-Allow-Methods: [, ]* // 允许请求的HTTP Method Access-Control-Allow-Headers: [, ]* // 控制哪些header能发送真正的请求 但是通常情况下CORS这种方式是不会传递cookie的,一般浏览器强制将cookie添加到header的做法,也会被浏览器拒绝并报错,上面提到的Access-Control-Allow-Credentials来控制是否允许cookie提交。因此需要在angular中进行设置withCredentials:true,或者ajax中xhrFiled:{withCredentials:true},crossDomain:true.
http://www.nowamagic.net/librarys/veda/detail/224/
2. Cookie
原因是这样的,我在进行ajax请求的时候,服务器端通过response.header set-cookie通知浏览器生成cookie文件,涉及到登陆我需要将cookie信息传递过去,可是我就在我自己的域下面怎么也找不到相应的cookie。原来cookie默认是设置在请求的域底下的,所以他是在我的ajax中的请求域名底下存在。搜戴斯乃,终于思路撸通了。
以上是关于跨域解决方式的主要内容,如果未能解决你的问题,请参考以下文章