AJax技术

关于Ajax跨域访问问题的一种解决办法

字号+ 作者:H5之家 来源:H5之家 2015-10-17 15:19 我要评论( )

关于Ajax跨域访问问题的一种解决办法日期:2015年10月10日作者:雨水概述Ajax跨域是前端开发中常见的问题,本文描述了以Google浏览器Chrome作为客户端和

关于Ajax跨域访问问题的一种解决办法,有需要的朋友可以参考下。


日期:2015年10月10日 作者:雨水

概述

Ajax跨域是前端开发中常见的问题,本文描述了以Google浏览器Chrome作为客户端和以Tomcat作为Web服务器的情况下的解决办法。


问题现象

当出现跨域访问的时候ajax通常会报类似如下错误:

XMLHttpRequest cannot load :8001/oss/api/version/check. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access.


解决办法一:关闭浏览器的跨域安全设置,仅限于开发的时候测试用

以chrome浏览器为例,右键点击chrome的快捷方式,然后在Target的值后面追加 --disable-web-security,注意--前面有个空格。例如:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security

启动之后,Chrome浏览器会提示您"您使用的是不受支持的命令行标记:--disable-web-security",说不安全,因此仅限于测试。

这样就可以直接测试,不会出现跨域的错误了!



解决办法二:配置Web服务器支持跨域访问

这里描述以Tomcat为Web服务器情况下的解决办法,在Java Web程序的WEB-INF下的web.xml文件中加入如下配置即可。

<!--cors filter-->

<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>

</filter-mapping>


注意:org.apache.catalina.filters.CorsFilter下面有好几个配置的选项,上面没有配置时就采用系统的默认配置。在实际生产环境要根据需要进行配置来提高安全性。比如cors.allowed.origins配置允许访问的源地址,默认为所有,即*。此外,还有cors.allowed.methods,cors.allowed.headers等等。具体的配置细节请参见本文参考资料中的[1]。


以上两种解决办法是独立的,选择其中一种即可。


参考资料:

1.https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html 参考CORS Filter章节

2.

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评