【问题标题】:Postman Resolving "Invalid CORS request" for a POST Request邮递员解决 POST 请求的“无效 CORS 请求”
【发布时间】:2016-12-11 05:03:51
【问题描述】:

我刚刚开始使用 Postman 来测试我正在集成的 API。

我有以下不断出现的错误

无效的 CORS 请求

注意以下几点:

  1. API 使用不记名令牌身份验证 (OAuth2)。我有这个 工作没有问题。
  2. 我确实成功获得了不记名令牌,将其分配给环境变量,然后尝试将其用于 RESTful 操作。
  3. 问题出在使用令牌的后续 RESTful 操作中。
  4. 当我使用旧令牌(通过 POST 操作)时,它是正确的 告诉我它已过期且未授权。
  5. 当我生成一个新的并尝试运行 restful 调用时,它给了我Invalid CORS request 错误。
  6. 使用 cURL,我没有问题。但我对 Postman 感到沮丧

到目前为止我发现了什么:

  1. Using postman with Http POST requests - 我没有得到粗体部分

万一其他人有同样的问题,这里是如何解决的 它。在您的 chrome 中转到 https://www.getpostman.com/docs/capture 浏览器。单击拦截器扩展,然后选择添加到 铬合金。添加后,两者的右上角都会出现一个新图标 看起来像红绿灯的浏览器和邮递员。在邮递员中单击 这个,它变成绿色。 然后为每个请求添加一个标头 第三道光。每个标头都由标头名称和值组成。 开始输入标头名称和允许的 http 标头列表 出现。选择“原点”。在值的单元格中,只需键入 您的服务器的完整 URL。 (不要忘记“http://”或“https://”)

  1. What is the expected response to an invalid CORS request? - 迄今为止我看到的关于 CORS 错误的最佳解释。

另一种材料讲的是Access-Control-Allow-Method headerpreflight requests

...并且有一个说明性的 Apache Tomcat 流程图 CORS 流。

【问题讨论】:

    标签: api rest postman


    【解决方案1】:

    您可以尝试新版本的 PostMan。对我来说,将邮递员版本从 5.5.5 升级到 7.36.5 后它可以工作

    【讨论】:

    • 您应该添加从哪个版本升级到哪个版本。如果将来的版本导致相同的问题,或者如果他们已经在最新版本上但仍然存在问题,则此答案可能对将来的某人无用。
    • @Lomtrur 编辑的版本。感谢您的评论
    【解决方案2】:

    只是避免使用浏览器/chrome postman 插件。请改用桌面应用程序!

    【讨论】:

      【解决方案3】:

      似乎我们的服务器从 Postman 手动 HTTP POST 中看到该来源无效 b/c 它来自 Postman 为“chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop”

      不确定为什么或如何在客户端/邮递员方面解决。似乎我们的服务器按原样拒绝它并发出 403。

      【讨论】:

      • 面临同样的问题,邮递员拦截器不起作用。还有其他方法吗?
      【解决方案4】:

      API 后端应允许 Postman 请求中设置的“Origin”标头的值。比如使用 Spring Boot for API 应该有 next:

      @Configuration
      public class WebConfig implements WebMvcConfigurer {
      
          @Value("${cors.allowedOrigins}")
          private String allowedOrigins;
      
          @Override
          public void addCorsMappings(CorsRegistry registry) {
              registry.addMapping("/**")
                  .allowedOrigins(allowedOrigins)
                  .allowedMethods("*")
                  .allowedHeaders("*");
          }
      
      }
      

      其中 allowedOrigins 是使用 application.properties 属性设置的,cors.allowedOrigins 具有逗号分隔的允许来源列表,例如:

      cors.allowedOrings=http://localhost:8080,http://example.com
      

      并将 Postman 中的 'Origin' 值设置为来自 cors.allowedOrigins 的任何 url

      【讨论】:

        【解决方案5】:

        如果您的后端服务端代码检查请求的来源(只是为了避免 CORS 攻击),您在通过邮递员测试 Rest API 时可能会遇到此问题。

        如何解决这个问题?

        您需要安装一个名为 Postman Interceptor (https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo?hl=en) 的 Chrome 插件。

        成功安装此插件后,在您的 Postman 客户端中,您会看到一个名为 Postman Interceptor 的小图标,您需要将其打开。

        现在您可以添加如下请求标头

        RequestHeader 键“来源” RequestHeader Value “您的应用程序基础 URL”

        Check this image

        现在您应该能够克服您面临的 CORS 问题 干杯!!

        【讨论】:

          【解决方案6】:

          这是你再次找到的答案:

          以防万一其他人有同样的问题,这里是如何解决它。在 chrome 浏览器中转到 https://www.getpostman.com/docs/capture。单击拦截器扩展,然后选择添加到 chrome。添加后,浏览器和邮递员的右上角都会出现一个新图标,看起来像一个红绿灯。在邮递员中单击它,它变成绿色。

          ...用粗体字翻译:

          然后在您的请求中添加一个标头。标头 Key 应为“Origin”,标头 Value 应为服务器的完整 URL(不要忘记 http://https://)。

          请注意,Chrome/Postman 不允许您在没有 Interceptor 插件的情况下添加带有来源键的标头。

          另外请注意,至少在我的系统上,拦截器图标不再看起来像红绿灯。

          【讨论】:

            猜你喜欢
            • 2021-01-14
            • 2018-03-29
            • 2023-03-14
            • 2017-12-30
            • 2016-09-15
            • 1970-01-01
            • 1970-01-01
            • 2019-04-28
            • 1970-01-01
            相关资源
            最近更新 更多