我花了一整天的时间尝试将一个Spring Boot应用程序(REST API)部署到Google App Engine,而我却试图通过CORS配置。
spring应用程序在本地工作,所以我知道Spring CORS配置是正确的。
但是,当我部署到GAE时,我收到以下错误。
无法加载https://avian-infusion-156317.appspot.com/api/login:对预检请求的响应未通过访问控制检查:否' Access-Control-Allow-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"]}]
在诉诸*来源之前,我尝试过特定的网址,即' http://localhost:8100'无济于事。
我错过了什么?请帮忙!
答案 0 :(得分:0)
我能解决这个问题。事实证明,这与CORS配置无关。我的控制器和REST端点都没有在线。作为Google App Engine的新手,有一件事我完全被误解了。
我有一种错觉,即除了应用程序之外,Google App Engine还拥有自己的CORS层,但事实并非如此。
我比较了quickstart spring boot示例和我的项目,而我失踪的一件事就是ServletInitializer。
var targetNode = document.querySelector('#device\\:emulator-5554 .browsers')
var callback = function(mutationsList) {
for (var mutation of mutationsList) {
if (mutation.addedNodes.length) {
document.querySelector('#device\\:emulator-5554 .action').click();
}
}
};
var observer = new MutationObserver(callback);
observer.observe(targetNode, {childList: true});
在与应用程序相同的根包中添加此类使控制器联机。我希望这对其他有类似问题的人有所帮助。