有关Ajax跨域问题的两种解决方法
概述
ajax跨域是前端开发中常见的问题,本文描述了以google浏览器chrome作为客户端和以tomcat作为web服务器的情况下的解决办法。
问题现象
当出现跨域访问的时候ajax通常会报类似如下错误:
xmlhttprequest cannot load . 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]。
以上两种方法均能解决ajax跨域问题,希望本文分享对大家有所帮助。
上一篇: 各种AJAX方法的使用比较详解