我有以下问题:
我的服务器以401错误响应HTTP POST。在同一个webapp中,我能够使用HTTP GET请求并且工作正常。我用邮递员测试了POST请求,并且我能够成功获取数据(所以至少它正在工作)...
请求代码(从Postman复制):
var data = JSON.stringify({
"query": {
"objectTypeId": "168"
}
});
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", <here is my url>);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("crossdomain", "true");
xhr.setRequestHeader("Authorization", "Basic XXXXXXXX");
xhr.send(data);
我发现与此问题相关的大多数线程都指向CORS配置,但我认为这是有效的,因为get-request有效。无论如何,这里是CORS配置:
的web.xml:
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.configurationFile</param-name>
<param-value>/WEB-INF/cors.properties</param-value>
</init-param>
</filter>
cors.properties:
cors.allowGenericHttpRequests = true
cors.allowOrigin=*
cors.supportsCredentials = true
cors.supportedMethods=GET, POST, HEAD, PUT, DELETE, OPTIONS
cors.supportedHeaders=*
答案 0 :(得分:0)
事实上,这是一个CORS问题。您的API需要正确回答这些OPTIONS请求,否则浏览器将阻止请求。相关的外部链接:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS。
SO上的其他人也为这个问题提供了其他更深入的答案。可以找到一个很棒的长篇答案here。