放大器和放大器科尔斯要求资源

时间:2018-04-26 16:42:13

标签: cors amp-html

我正在开发一个项目,保护资源(此处: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

这简单易懂。

放大器cdn的行为

现在,当我针对相应的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上的资源?

1 个答案:

答案 0 :(得分:0)

这是AMP CDN的实际问题。我与Google的联系人进行了1:1的工作,他们已经解决了该问题。

此外,我们的来源没有发送Content-Type响应标头,这是必需的。