概述
Ajax跨域是前端开发中常见的问题,本文描述了以Google浏览器Chrome作为客户端和以Tomcat作为Web服务器的情况下的解决办法。
问题现象
当出现跨域访问的时候ajax通常会报类似如下错误:
XMLHttpRequest cannot loadhttp://192.168.2.12: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)
这里描述以Tomcat为Web服务器情况下的解决办法,在Java Web程序的WEB-INF下的web.xml文件中加入如下配置即可。
<!--cors filter-->
<filter>
解决办法三:配置Web服务器支持跨域访问(支持weblogic/tomcat)
1.在Java Web程序的WEB-INF下的web.xml文件中加入如下配置
<filter>
<filter-name> CORS </filter-name>
<filter-class> com.thetransactioncompany.cors.CORSFilter </filter-class>
<init-param>
<param-name> cors.allowOrigin </param-name> <!--配置授信的白名单的域名!-->
<param-value> * </param-value>
</init-param>
<init-param>
<param-name> cors.supportedMethods </param-name>
<param-value> GET,POST,HEAD,PUT,DELETE </param-value>
</init-param>
<init-param>
<param-name> cors.supportedHeaders </param-name>
<param-value> Accept,Origin,X-Requested-With,Content-Type,Last-Modified </param-value>
</init-param>
<init-param>
<param-name> cors.exposedHeaders </param-name>
<param-value> Set-Cookie </param-value>
</init-param>
<init-param>
<param-name> cors.supportsCredentials </param-name>
<param-value> true </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name> CORS </filter-name>
<url-pattern> /* </url-pattern>
</filter-mapping>