首页 文章

GAE(Spring Boot App)CORS检查不返回Access-Control-Allow-Origin标头

提问于
浏览
1

我花了一整天的时间尝试将Spring Boot Application(REST API)部署到Google App Engine,而我却试图通过CORS配置 .

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

但是,当我部署到GAE时,我收到以下错误 .

无法加载https://avian-infusion-156317.appspot.com/api/login:因此不允许对预检请求进行响应't pass access control check: No ' Access-Control-Allow-Origin ' header is present on the requested resource. Origin ' http://localhost:8100' .

以下是Chrome开发者工具交换的 Headers :

一般

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

请求 Headers

: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

响应 Headers

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

如您所见,响应中缺少 Headers “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”无济于事 .

我错过了什么?请帮忙!

1 回答

  • 0

    我能够解决这个问题 . 事实证明,这与CORS配置无关 . 我的控制器和REST endpoints 都没有在线 . 作为Google App Engine的新手,有一件事我完全被误解了 .

    我有一个错觉,谷歌应用引擎除了应用程序之外还拥有自己的CORS层,但事实并非如此 .

    我比较了quickstart spring boot示例和我的项目,而我失踪的一件事就是ServletInitializer .

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

    在与Application相同的根包中添加此类使控制器处于联机状态 . 我希望这对其他有类似问题的人有帮助 .

相关问题