我正在从事一个项目,其中保护资源(此处: webfonts)是一项法律要求,而CORS被认为是足够的。通过AMP CDN访问CORS保护的资源似乎是不可能的。
我们如何处理原产地的cors
对于受保护的资源,我们根据正则表达式检查Origin:请求头,并为匹配加上Vary: Origin始终生成匹配的Access-Control-Allow-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-Encodingcurl -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。
安培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的阅读方式至少也是如此。
这似乎并不重要,如果起源:结束于cdn.ampproject.org,cdn似乎没有转发它。
因此,如上文所示,我们的原产地是200,而不是above.
更令人困惑的是,安培cdn将此响应发送到下游:
HTTP/2 404
access-control-allow-origin: *
x-content-type-options: nosniff
...那么,CORS应该如何使用AMP CDN上的资源呢?
发布于 2019-02-13 09:43:53
这是一个实际的AMP CDN问题。我与谷歌的联系人进行了1:1的合作,他们已经解决了这个问题。
此外,我们的原产地没有发送Content-Type响应头,这是必需的。
https://stackoverflow.com/questions/50048154
复制相似问题