【问题标题】:amp cdn & cors requests to resourcesamp cdn & cors 对资源的请求
【发布时间】: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

标签: cors amp-html


【解决方案1】:

这是一个实际的 AMP CDN 问题。我与来自 google 的联系人进行了一对一的合作,他们已经解决了这个问题。

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

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 2018-08-30
    • 2018-10-24
    • 1970-01-01
    • 2015-11-28
    • 2019-07-21
    • 2022-11-11
    • 2017-04-23
    相关资源
    最近更新 更多