CORS介绍
CORS-CrossOrigin Resource Sharing,即跨域资源共享,它定义了一种服务器和浏览器的交互方式来确定是否允许跨域请求。CORS简单灵活,但有风险性,能实现ajax跨域访问。
CORS是一个由浏览器共同遵循的一套策略,通过http的header来进行交互。当浏览器识别到发送的请求是跨域请求的时候,会把Origin的Header加入到http请求一起发送到服务器。服务器会解析Header并判断是否允许跨域请求,如果允许,响应头中会有Access-Control-Allow-Origin这个属性。如果服务器允许所有跨域请求,将该属性设置为*即可,如果响应头没有改属性,则浏览器会拦截该请求。
以上是简单情况,CORS将规范分为两种类型的请求,一种是简单请求,另一种是携带预检的请求。预检机制是一种保护机制,防止资源被没有权限的请求修改。浏览器会在发送实际请求之前先发送一个OPTIONS的Http请求来判断服务器是否能接受跨域请求。如果不能接受,浏览器会直接取消后面的实际请求的发送。
java服务端配置方法
引入 cors-filter-1.7.jar和Java-property-utils-1.9.jar
在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>