Я размещаю одностраничное приложение для хостинга Firebase, и мне нужно разрешить перекрестный запрос домена к движку приложения. Приложение размещено на project-id.firebaseapp.com и службе движка приложения на project-id.appspot.com. Я краю deployment documentation, и нет примера, как добавить заголовок Access-Control-Allow-Origin для URL.Firebase хостинг Access-Control-Allow-Origin для URL-адреса приложения URL
Вот что мой firebase.json выглядит следующим образом:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "public",
"redirects": [
{
"source": "/server/:rest*",
"destination": "https://app-id.appspot.com/:rest*",
"type": 301
}
],
"rewrites": [
{
"source": "/views/**",
"destination": "/views/**"
},
{
"source": "**",
"destination": "/index.html"
}
],
"headers": [ {
"source" : "https://app-id.appspot.com/registration/generate",
"headers" : [ {
"key" : "Access-Control-Allow-Origin",
"value" : "*"
} ]
} ]
}
}
Я попытался установить CORS с помощью gsutils, но это не помогло, а также:
Вот мой cors.json
[
{
"maxAgeSeconds": 3600,
"method": ["GET", "POST"],
"origin": ["https://project-id.appspot.com/"]
}
]
заранее спасибо
РЕШЕНИЕ:
Если вы хотите разрешить CORS для статических файлов, тогда достаточно установить заголовок Access-Control-Allow-Origin в приложении app.yaml. Этот заголовок не разрешается находиться в app.yaml для динамических запросов, поэтому вам придется добавлять его программно.
Если ваш запрос является простым, то следующий код работает:
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
resp.addHeader("Access-Control-Allow-Origin", "*");
resp.addHeader("Content-Type", "text/csv");
resp.getWriter().append("Response");
}
Однако, если ваш запрос заранее маршевой вам придется переопределить метод doOptions и добавьте соответствующие заголовки:
@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.addHeader("Access-Control-Allow-Origin", "*");
resp.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
resp.addHeader("Access-Control-Allow-Headers", "Content-Type");
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.addHeader("Access-Control-Allow-Origin", "*");
resp.addHeader("Content-Type", "text/csv");
resp.getWriter().append("Response");
}
Here является полезной схемой, которая проясняет реализацию CORS на сервере: