关于跨域的ajax——Cross-Origin Resource Sharing (CORS)
发布时间:2020-12-16 00:23:20 所属栏目:百科 来源:网络整理
导读:对于IE, 1. 把IE的信任站点中把“通过域访问数据资源”设成启用有效。 2.将当前站点设置为可信站点。 -------------------------------------------------------------------------------------------------------- CORS浏览器支持:Firefox 3.5+,Safari 4+
对于IE,
1. 把IE的信任站点中把“通过域访问数据资源”设成启用有效。 2.将当前站点设置为可信站点。 -------------------------------------------------------------------------------------------------------- CORS浏览器支持:Firefox 3.5+,Safari 4+,Chrome,Safari for iOS,and WebKit for Android
允许多个域名? 可以考虑把 域名做一个白名单,读取到服务器,然后再进行匹配。 上述的这种跨域请求有几个限制: 1. 不会携带cookie信息到服务器端;服务器端也不能写cookie到客户端; 2. 不能通过setRequestHeader()自定义头部信息; 3. getAllResponseHeaders()返回值为空字符串。 关于预检请求(Preflighted Request): 事实上,如果用户通过setRequestHeader自定义了头部信息,浏览器会默认先发送一个请求,用了判断请求是否合法,如果不通过, ajax请求就失败了,如果通过了,浏览器会再发一次请求,读取服务器的返回数据。 例如,上述例子中,如果调用: objXMLHTTP.setRequestHeader("hello","world"); 则浏览器会发出请求,内容为空,请求头部为: OPTIONS /jsp/json.jsp HTTP/1.1 Host: www.test.com:8080 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,* / * ;q=0.8 Accept-Language: zh-cn,zh;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Origin: http://shawn.test2.com Access-Control-Request-Method: GET Access-Control-Request-Headers: hello 注意,头部请求中,多出几个选项: Origin: http://shawn.test2.com Access-Control-Request-Method: GET Access-Control-Request-Headers: hello 如果想采用POST方式提交ajax数据,需要手动设置
因为这里定义请求头,所以后端也需要做设置支持:
浏览器支持预检请求:Firefox 3.5+,and Chrome 关于携带验证信息的请求(Credentialed Requests) 如果希望把cookie信息、HTTP授权信息、客户端的SSL证书等发送到服务器端。可以如下设置:
注意: 1. 这里面,请求携带的是 服务器所在域名的cookie。例子中,就是 www.test.com (包括test.com)的cookie信息。 2. 如果服务端这时候设置了cookie,那么它是起作用的,默认挂在 www.test.com 域名下。 IE8+ 下的跨域对象: IE8+ 支持一个XDomainRequest (XDR) 对象,用来进行跨域的ajax通信。 XDomainRequest 相比较普通的Ajax对象,有以下限制: 1. 不支持Cookie的发送和接收; 2. 除了 Content-type,不能设置其他请求头部; 3. 无法读写返回头部; 4. 仅支持 GET / POST 方法。(其它的方法的是?)
总的来说,IE下出于安全的考虑,对于跨域的ajax限制很大,功能也弱。XDomainRequest也支持 progres、timeout等事件,更多内容可以参考MSDN. 参考资料: https://developer.mozilla.org/en-US/docs/HTTP_access_control http://msdn.microsoft.com/ZH-CN/library/cc288060 https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control 《javascript高级程序设计3》 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |