关于Ajax跨域问题之CORS
文章来源:http://blog.csdn.net/saytime/article/details/51549888 一、介绍
1. 跨域资源共享(CORS)Cross-Origin Resource Sharing(CORS) 是W3c工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。 2. CORS与JSONPCORS与JSONP相比,更为先进、方便和可靠。
二、实战1、模拟跨域请求同样的还是http://blog.csdn.net/saytime/article/details/51540876的案例,用jsonp(8080)页面的按钮去获取other(8888)中jsp的数据。(模拟servlet接口) http://localhost:8080/jsonp/index.jsp
http://localhost:8888/other/index.jsp
查看http请求信息,发现状态码是200,但是就是提示跨域。 其实写的很明白了,XMLHttpRequest不能加载8888端口的数据,在请求的资源上没有Access-Control-Allow-Origin的头部header,因此8080这个域没有访问权限。 2、设置Access-Control-Allow-Origin加入响应头。
查看http请求信息,对比之前的http请求信息。 ); 这里*为通配符,表示允许所有的域请求来源。一般情况下,为了安全,设置为自己信任的域名,表示仅供信任的域名访问,其他域名也就访问不了了。 );这样设置同样可以访问,这里就不贴图了,这里的域信息必须完全匹配,包括端口,为了演示,下面设置为 自己看信息呀,依旧跨域,所以设置的时候要注意。 3、设置Access-Control-Allow-MethodsAccess-Control-Allow-Methods:表示允许请求的请求类型,比如GET,POST,OPTIONS,PUT等。
设置成如下,同样可以访问,因为我们ajax方法设置的是post,如果我们改为put,然后请求结果如下:
这里有几个问题,我也不是很清楚。 2、我设置成GET,发现POST请求照样能通过,设置成POST,GET也能通过,暂时不清楚,希望知道的能给我解答。 4、设置Access-Control-Allow-Methods 标准的CORS请求不对cookies做任何事情,既不发送也不改变。如果希望改变这一情况,就需要将withCredentials设置为true。 简而言之,withCredentials:true 那么 Access-Control-Allow-Credentials:true,反之不成立。
CROS差不多讲完了,一般解决实际问题的时候,都是设置上面三个属性。当然还有Access-Control-Request-Headers等等可以设置,这就需要你十分了解HTTP协议啦。 之后可能另外再开一个跨域异步文件上传以及Tomcat跨域问题的解决方案,涉及到crossdomain.xml,有兴趣的可以先去了解了解。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- flex 给文本框添加控制输入法的
- ruby-on-rails – 如何使用I18n宝石翻译电子邮件正文?
- c# – 当我知道成员名称时访问动态对象成员的最佳方法?
- EasyDSS RTMP流媒体服务器videojs flash播放RTMP/HLS提示错
- Flash Builder实用快捷键集锦
- ruby-on-rails – M Hartl的Ruby on Rails教程第5章主页上的
- Persist PostgreSQL Json datatype with Hibernate
- cocos2d 制作动态光晕效果基础 —— blendFunc
- ruby-on-rails – 带有Haml的Ruby on Rails – 如何从erb切
- C#调用微信接口的相关代码