【问题标题】:GAE(Spring Boot App) CORS check not returning Access-Control-Allow-Origin headerGAE(Spring Boot App)CORS 检查不返回 Access-Control-Allow-Origin 标头
【发布时间】:2018-01-05 11:57:55
【问题描述】:

我一整天都在尝试将 Spring Boot 应用程序 (REST API) 部署到 Google App Engine,但我一直在尝试通过 CORS 配置。

spring 应用程序在本地工作,所以我知道 Spring CORS 配置是正确的。

但是,当我部署到 GAE 时出现以下错误。

无法加载https://avian-infusion-156317.appspot.com/api/login:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:8100' 因此不允许访问。

以下是来自 Chrome 开发者工具的交换标头:

一般

Request URL:https://avian-infusion-156317.appspot.com/api/login
Request Method:OPTIONS
Status Code:200 
Remote Address:172.217.26.52:443
Referrer Policy:no-referrer-when-downgrade

请求标头

:authority:avian-infusion-156317.appspot.com
:method:OPTIONS
:path:/api/login
:scheme:https
accept:*/*
accept-encoding:gzip, deflate, br
accept-language:ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
access-control-request-headers:content-type
access-control-request-method:POST
origin:http://localhost:8100
user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36

响应标头

allow:GET, HEAD, POST, TRACE, OPTIONS
alt-svc:hq=":443"; ma=2592000; quic=51303431; quic=51303339; quic=51303338; quic=51303337; quic=51303335,quic=":443"; ma=2592000; v="41,39,38,37,35"
content-length:0
content-type:text/html
date:Wed, 03 Jan 2018 16:22:06 GMT
server:Google Frontend
status:200
x-cloud-trace-context:7369ca471aca5fe01fb46903e9af3b9f;o=1

如您所见,响应中缺少标题“Access-Control-Allow-Origin”。

我在 GAE 上的 cors 配置如下:

gsutil cors get gs://avian-infusion-156317.appspot.com
[{"maxAgeSeconds": 3600, "method": ["*"], "origin": ["*"], "responseHeader": ["content-type", "authorization"]}]

在使用 * 作为来源之前,我已经尝试了特定的 URL,即“http://localhost:8100”,但无济于事。

我错过了什么?请帮忙!

【问题讨论】:

    标签: java google-app-engine spring-boot cors


    【解决方案1】:

    我能够解决这个问题。事实证明,这与 CORS 配置无关。我的所有控制器以及因此的 REST 端点都没有在线。作为 Google App Engine 的新手,我完全误解了一件事。

    我有一种错觉,认为 Google App Engine 除了应用程序之外还有自己的 CORS 层,这不是真的。

    我比较了快速入门的 spring boot 示例和我的项目,我缺少的一件事就是 ServletInitializer。

    public class ServletInitializer extends SpringBootServletInitializer
    {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
    
    }
    

    在与应用程序相同的根包中添加此类使控制器在线。我希望这对遇到类似问题的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-01-25
      • 2016-05-07
      • 2016-08-21
      • 2019-06-19
      • 2018-09-08
      • 2018-06-21
      • 2019-03-31
      相关资源
      最近更新 更多