我正在开发一个项目,保护资源(此处:webfonts)是法律要求,CORS被认为是足够的。通过AMP CDN访问受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
这简单易懂。
现在,当我针对相应的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。
更令人困惑的是,放大器cdn将此响应发送到下游:
HTTP/2 404
access-control-allow-origin: *
x-content-type-options: nosniff
...
那么,CORS应该如何使用AMP CDN上的资源?
答案 0 :(得分:0)
这是AMP CDN的实际问题。我与Google的联系人进行了1:1的工作,他们已经解决了该问题。
此外,我们的来源没有发送Content-Type
响应标头,这是必需的。