【发布时间】:2018-04-26 16:42:13
【问题描述】:
我正在从事一个项目,其中保护资源(此处为:webfonts)是一项法律要求,并且认为 CORS 已足够。通过 AMP CDN 访问受 CORS 保护的资源似乎是不可能的。
我们如何在原点处理 cors
对于受保护的资源,我们根据正则表达式检查 Origin: 请求标头,并为匹配生成匹配的 Access-Control-Allow-Origin: 响应标头加上 Vary: Origin 始终。
本质上(简化、简化的例子):
curl -H 'Orgin: https://allowed.domain' -I https://site/.../font.woff2
->
HTTP/1.1 200 OK
Cache-Control: public, immutable, max-age=26680348
Access-Control-Allow-Origin: https://allowed.domain
Vary: Origin, Accept-Encoding
curl -H 'Orgin: https://evil.domain' -I https://site/.../font.woff2
->
HTTP/1.1 200 OK
Cache-Control: public, immutable, max-age=26680348
Vary: Origin, Accept-Encoding
这是简单的 CORS。
amp cdn 的行为方式
现在,当我针对相应的 AMP CDN URL 发出相同的请求时...
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 上的资源?
【问题讨论】:
-
尝试查看有关CORS in AMP的文档。 “本文档解释了在 AMP 中使用 CORS 的关键方面”。希望对您有所启发。
-
@MαπμQμαπkγVπ.0 我确实读过它,它涵盖了这个主题,但 CDN 的行为并不像预期的那样。特别是,它不转发 Origin 标头的事实没有被涵盖,在我看来是完全错误的。
-
现在也通过github报道:github.com/ampproject/amphtml/issues/15591