HTTP 发布请求:401(未授权)

问题描述 投票:0回答:1

我有以下问题:

我的服务器响应一个 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=*
post cors httprequest
1个回答
0
投票

事实上,这是一个 CORS 问题。您的 API 需要正确回答这些 OPTIONS 请求,否则浏览器将阻止该请求。相关外部链接:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS.

SO 上的其他人也对这个问题提供了其他更深入的答案。 here.

可以找到一个很好的长格式答案
© www.soinside.com 2019 - 2024. All rights reserved.