Я работаю над проектом, в котором защита ресурсов (здесь: веб-шрифты) является законным требованием, и CORS считается достаточным. Доступ к защищенным ресурсам CORS кажется невозможным через AMP CDN.
как мы обращаемся с Cors в начале координат
Для защищенных ресурсов мы проверяем заголовок запроса Origin:
на соответствие регулярному выражению и генерируем соответствующий заголовок ответа Access-Control-Allow-Origin:
для совпадения плюс Vary: Origin
всегда.
По существу (упрощенный, сокращенный пример):
->
HTTP/1.1 200 OK
Cache-Control: public, immutable, max-age=26680348
Access-Control-Allow-Origin: https://allowed.domain
Vary: Origin, Accept-Encoding
->
HTTP/1.1 200 OK
Cache-Control: public, immutable, max-age=26680348
Vary: Origin, Accept-Encoding
Это просто простые CORS.
как ведет себя усиленный cdn
Теперь, когда я запускаю тот же запрос к соответствующему URL AMP CDN ...
curl -H 'Orgin: https://allowed.domain' -I https://site.cdn.ampproject.org/r/s/site/.../font.woff2
Я вижу запрос с
User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Google-AMPHTML)
с разрешения IP до google-proxy-*.google.com
, , но ни Origin:
, ни AMP-Same-Origin:
заголовок запроса . Тем не менее, как я читаю https://github.com/ampproject/amphtml/blob/master/spec/amp-cors-requests.md#pseudo-cors-logic, я должен ожидать, по крайней мере, либо
Кажется, не имеет значения, если Origin: заканчивается cdn.ampproject.org
, cdn, кажется, не передает его.
Следовательно, наше происхождение отвечает 200, а не A-C-A-O, как показано выше.
Еще более запутанно то, что amp cdn отправляет следующий ответ:
HTTP/2 404
access-control-allow-origin: *
x-content-type-options: nosniff
...
Итак, как CORS должен работать с ресурсами в AMP CDN?