#google-chrome #http-headers #cors #cache-control
#google-chrome #http-заголовки #cors #контроль кэша
Вопрос:
Я не уверен, обсуждалась ли эта проблема здесь, но что-то странное. Я использую эту версию Chrome в Windows 10: версия 86.0.4240.198 (официальная сборка) (64-разрядная версия)
У меня есть домен, скажем p.com , он извлекает PDF-файл из облачного хранилища Google с таким URL-адресом, как этот: https://storage.googleapis.com/bucket/aaa.pdf
В облачном хранилище Google уже установлена CORS как таковая:
[{"maxAgeSeconds": 3600, "method": ["GET", "HEAD", "OPTIONS"], "origin": ["*"], "responseHeader": ["Content-Type", "Access-Control-Allow-Origin", "X-Requested-With", "Date", "Range", "Vary", "Access-Control-Allow-Headers"]}]
Когда я выполняю выборку без кэширования в заголовках запроса, она проходит успешно. Но когда я включаю кэширование в заголовках запроса, таких как этот:
fetch("https://storage.googleapis.com/bucket/aaa.pdf", {
"headers": {
"cache-control": "max-age=315360000",
"expires": "Mon, 06 Dec 2021 06:39:19 GMT",
"pragma": "cache"
},
"method": "GET",
});
Он завершается неудачей с этой ошибкой:
Access to fetch at 'https://storage.googleapis.com/bucket/aaa.pdf' from origin 'http://p.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Мой вопрос в том, является ли CORS и кэширование бинарным выбором? Либо или? Я имею в виду, что у вас не может быть обоих. Я хотел бы включить CDN и кэширование, чтобы ресурс загружался быстро.
Ответ №1:
В вашей конфигурации CORS должно быть явно указано, какие заголовки запросов разрешены (кроме небольшого количества заголовков, которые уже считаются «безопасными»). Итак, вы получаете эту ошибку, потому что вы добавили заголовки запросов, которые не разрешены. Чтобы исправить это, вам необходимо включить все разрешенные заголовки в responseHeader
поле.
Тем не менее, вы уверены, что действительно хотите использовать эти заголовки? Хотя его можно использовать Cache-Control
в качестве заголовка запроса, это необычно и не «включает кэширование». Скорее всего, вы хотите, чтобы эти заголовки были заданы в ответе, что вы можете сделать, настроив облачное хранилище Google.
Комментарии:
1. Да, я запускал запрос на кэширование, но спасибо за указатель на документы.