首页 文章

邮递员为 POST 请求解决“无效的 CORS 请求”

提问于
浏览
15

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

我有以下错误,一直出现

无效的 CORS 请求

请注意以下事项:

  • API 使用 Bearer 令牌 authentication(OAuth2)。我有这个工作没有问题。

  • 我成功获得了承载令牌,将其分配给 Environment 变量,然后尝试将其用于 RESTful 操作。

  • 问题出在后续使用令牌的 RESTful 操作中。

  • 当我使用旧令牌(通过 POST 操作)时,它正确地告诉我它已过期且未经授权。

  • 当我生成一个新的并尝试运行 restful 调用时,它会给我Invalid CORS request错误。

  • 使用 cURL,我没有问题.但我对 Postman感到沮丧。

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

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

其他材料讲的是Access-Control-Allow-Method headerpreflight requests

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

在此输入图像描述

4 回答

  • 21

    以下是您再次找到的答案:

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

    ...用粗体翻译的位:

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

    请注意,Chrome/Postman 将不允许您在没有 Interceptor 插件的情况下添加带有 Key of Key 的 Header。

    另请注意,至少在我的系统上,Interceptor 图标不再像交通灯一样。

  • 6

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

    如何解决这个问题.?

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

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

    现在您可以添加 Request 标头,如下所示

    RequestHeader Key“Origin”RequestHeader Value “您的应用程序基本 URL”

    检查此图片

    现在你应该能够解决你所面临的 CORS 问题!

  • 0

    API 后端应允许在 Postman 请求中设置“Origin”标头的值。例如,使用 Spring Boot for API 应具有下一个:

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

    其中 allowOrigins 是使用application.properties property cors.allowedOrigins设置的,其中包含逗号分隔的允许来源列表,例如:

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

    并将 Postman 中的“Origin”值设置为cors.allowedOrigins中的任何 url

  • -1

    您可以尝试新版本的 PostMan。对我来说,升级后的邮递员版本之后就可以了

相关问题