SpringMVC-CROS:使用Chrome无法跨域使用PUT和DELETE请求
基础环境:SpringMVC4.2.1,使用<mvc:cors>进行跨域配置
<!-- 跨域设置 -->
<mvc:cors>
<mvc:mapping path="/mobile/**"
allowed-origins="*"
allowed-methods="GET, PUT, DELETE, POST, OPTIONS"
allowed-headers="*"
exposed-headers=""
allow-credentials="false"
max-age="60" />
<!--
Allow-Methods: 真实请求允许的方法
Allow-Headers: 服务器允许使用的字段
Allow-Credentials: 是否允许用户发送、处理 cookie
Max-Age: 预检请求的有效期,单位为秒。有效期内,不会重复发送预检请求
-->
</mvc:cors>
现象:使用IE和Firefox均可以正常响应PUT和DELETE的OPTIONS预检请求,但是使用Chrome时被拒绝。
原因:在Chrome的52版本以后,浏览器处理Access-Control-Request-Headers有Bug,如果不设置的话,Chrome会提交一个空字符串,导致Spring的CROS拒绝请求,所以在发送请求前设置一个header
解决办法:
$.ajax({
type : "PUT",
url : url+"put",
data : {},
dataType : 'json',
async : true,
beforeSend: function(xhr){
xhr.setRequestHeader("X-THOR");
//在Chrome的52版本以后,浏览器处理Access-Control-Request-Headers有Bug,如果不设置的话,Chrome会提交一个空字符串,导致Spring的CROS拒绝请求,所以在发送请求前设置一个header
},
error : function(reques, textStatus, errorThrown){
alert(textStatus+":"+errorThrown);
},
success : function(result){
alert(result.success);
}
});
浙公网安备 33010602011771号