对同源其他资源造成副作用的 HTTP 响应 headers

HTTP response headers that cause side effects for other resources on the same origin

我有一台服务器,它为同一主机名上的多个用户托管资源。例如:

我想允许用户为其目录中的资源指定他们自己的响应 headers,类似于在 AWS S3 上所做的。例如,Carol 可能希望她的 TODO 列表可从另一个域上的脚本读取,因此她可能希望 Access-Control-Allow-Origin: * 设置为 todo.txt

虽然我希望此功能尽可能灵活,但我不能允许仅指定任何响应 headers,因为某些响应 headers 会对整个来源或主机名产生副作用。例如,Set-Cookie 可用于一个人的目录,但用户代理随后可以使用 cookie 值向其他人的目录发出请求。作为另一个示例,用户可以设置 Strict-Transport-Security,可能会阻止其他用户使用普通 HTTP。

还有哪些其他 HTTP 响应 headers 可能对整个来源产生副作用,而不仅仅是请求的资源?到目前为止我的清单:

与其阻止可能影响整个域的响应 headers,不如推荐一种稍微不同的方法,并指定一个绝对可以使用的响应 headers 白名单。可能会有新的、实验性的或 browser-specific headers non-standard 但可能会影响使用特定浏览器的用户的整个域。

我建议以下 headers 可以安全使用并且应该是您的用户需要修改的所有内容:

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers
  • 年龄
  • 允许
  • Cache-Control
  • Content-Disposition
  • Content-Encoding
  • Content-Language
  • Content-Length
  • Content-Location
  • Content-Range
  • Content-Type
  • 日期
  • ETag
  • 过期
  • Last-Modified
  • Link
  • 位置
  • 编译指示
  • Retry-After
  • Transfer-Encoding

对于文件和 html 页面等静态内容,我不会手动设置 Content-Range 或 Content-Length。服务器应该自动设置其中的许多 headers。然而,覆盖它们对于某些用户来说可能是有意义的。如果您的服务器支持,Transfer-Encoding 可用于在传输过程中添加 gzipdeflate,但不得与 HTTP/2.

一起使用

此外,Location、Allow 和 Retry-After 仅对某些状态代码有意义。你可能想忽略它们