Я пытаюсь развернуть угловое приложение в корзину Google Cloud Storage, чтобы я мог обслуживать приложение оттуда.Контейнер имеет публичный доступ и назван так, чтобы я мог использовать его как пользовательский веб-сайт через CNAME (скажем, test.example.com
).Контейнер также настроен для сопоставления главной страницы с index.html
, а обработчик 404 - с index.html
.
При загрузке https://test.example.com
большая часть приложения загружается нормально, но любой из ресурсов, загружаемых через XHR (GET
из /assets/
), получает ошибку HTTP 401.Нет предварительных запросов.Я попытался установить различные сочетания настроек CORS для корзины , но, похоже, ничего не помогло.Довольно неограниченный пример конфигурации:
[
{
"origin": ["*"],
"responseHeader": ["Accept", "Accept-Encoding", "Accept-Language", "Origin" , "Authorization", "Content-Type", "Content-Length", "user-agent", "referer", "cookie"],
"method": ["GET", "POST", "PUT", "HEAD", "DELETE"],
"maxAgeSeconds": 3600
}
]
Если я сверну актив и установлю заголовок Origin
, как запрос XHR, я получу ожидаемые заголовки, которые должны заставить работать XHR (в частности access-control-allow-origin
и access-control-expose-headers
):
➜ ~ curl -H "Origin: https://test.example.com" -I https://storage.googleapis.com/test.example.com/assets/icons/baseline-add_circle-24px.svg
HTTP/2 200
x-guploader-uploadid: AEnB2UqlMyfGJ4gfyQJUTL2CW7E7FU2UXUrRguYn4fSZUrP0DBVt0OwCUBhEGcvUR1OGiFSU7__Ui5IKHv6qeaLQhZmC-ChsMg
expires: Thu, 04 Apr 2019 14:53:32 GMT
date: Thu, 04 Apr 2019 14:53:32 GMT
cache-control: private, max-age=0
last-modified: Fri, 22 Mar 2019 16:06:05 GMT
etag: "121fb69a596fe32f1e77c4dec1c6ac35"
x-goog-generation: 1553270765793354
x-goog-metageneration: 1
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 238
x-goog-meta-goog-reserved-file-mtime: 1553270763
content-type: image/svg+xml
x-goog-hash: crc32c=s8OcMw==
x-goog-hash: md5=Eh+2mllv4y8ed8TewcasNQ==
x-goog-storage-class: MULTI_REGIONAL
accept-ranges: bytes
content-length: 238
access-control-allow-origin: *
access-control-expose-headers: Accept, Accept-Encoding, Accept-Language, Authorization, Content-Length, Content-Type, Date, Origin, Server, Transfer-Encoding, X-GUploader-UploadID, X-Google-Trace, cookie, referer, user-agent
server: UploadServer
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"
Если я сделаю запрос к CNAME'd DNS, как я ожидаю от браузера, я также увижу то, что ожидаю:
HTTP/2 200
date: Thu, 04 Apr 2019 16:40:36 GMT
content-type: image/svg+xml
content-length: 238
set-cookie: __cfduid=dfbe3886fec0acb8dc6284c08950ca0621554396036; expires=Fri, 03-Apr-20 16:40:36 GMT; path=/; domain=.gotponcho.dev; HttpOnly; Secure
x-guploader-uploadid: AEnB2Ur6g3DmXzRA9l5I9IHFrBpgLD0Yx6CsNrxjouI2_zXp0B5v6quBO85M-um0bPp0SQU4lnTyLCryKkf3aNbFpVl-W76BpUarlNqS6BOAjyNzIhN-kf4
expires: Thu, 04 Apr 2019 20:40:36 GMT
cache-control: public, max-age=14400
last-modified: Fri, 22 Mar 2019 16:06:05 GMT
etag: "121fb69a596fe32f1e77c4dec1c6ac35"
x-goog-generation: 1553270765793354
x-goog-metageneration: 1
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 238
x-goog-meta-goog-reserved-file-mtime: 1553270763
x-goog-hash: crc32c=s8OcMw==
x-goog-hash: md5=Eh+2mllv4y8ed8TewcasNQ==
x-goog-storage-class: MULTI_REGIONAL
access-control-allow-origin: *
access-control-expose-headers: Accept, Accept-Encoding, Accept-Language, Authorization, Content-Length, Content-Type, Date, Origin, Server, Transfer-Encoding, X-GUploader-UploadID, X-Google-Trace, cookie, referer, user-agent, x-concept-id, x-location-id
cf-cache-status: MISS
accept-ranges: bytes
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 4c24b99abc6cc7bf-DEN
Нужно ли что-нибудь еще, чтобы Angular мог работать из Google Cloud Storage?