首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置“接受-编码”时,CloudFront删除访问控制公开报头。

设置“接受-编码”时,CloudFront删除访问控制公开报头。
EN

Server Fault用户
提问于 2019-08-03 06:41:21
回答 1查看 1.4K关注 0票数 2

我试图让CloudFront提供一个压缩的文本文件以及Content-Length: <bytes>Access-Control-Expose-Headers: Content-Length头,这样我就可以在使用fetch()时显示下载进度。

我的设置是:

  1. 在上传到S3并设置Content-Encoding: gzip之前,用gzip预压缩文件。(使用CloudFront的自动压缩将意味着它是动态压缩的,Content-Length头也不会被设置。)
  2. S3设置Allow-Control-Expose-Headers: Content-Length的CORS设置如下:
代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>Content-Length</ExposeHeader>
</CORSRule>
</CORSConfiguration>
  1. 具有相应的CloudFront源文件和:的S3设置
    • 得了吧,头,允许选择
    • 原产地标头白化
    • “自动压缩对象”禁用

使用此配置,我得到:

  • 请求S3:curl <s3 URL> -H "Accept-Encoding: gzip" -H "Origin: example.com" -I
代码语言:javascript
复制
HTTP/1.1 200 OK
x-amz-id-2: ...
x-amz-request-id: ...
Date: Sat, 03 Aug 2019 06:28:41 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Expose-Headers: Content-Length
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Last-Modified: Sat, 03 Aug 2019 05:32:02 GMT
ETag: "6483b10f491dc607412899efad695a04"
Content-Encoding: gzip
x-amz-version-id: ...
Accept-Ranges: bytes
Content-Type: text/plain; charset=utf-8
Content-Length: 559354
Server: AmazonS3
  • 向CloudFront请求而不指定Accept-Encoding: gzip (或故意将其拼写错误为gzp):curl <cloudfront URL> -H "Origin: example.com" -I
代码语言:javascript
复制
HTTP/2 200
content-type: text/plain; charset=utf-8
content-length: 559354
date: Sat, 03 Aug 2019 06:05:26 GMT
access-control-allow-origin: *
access-control-allow-methods: GET, HEAD
access-control-expose-headers: Content-Length
last-modified: Sat, 03 Aug 2019 05:32:02 GMT
etag: "6483b10f491dc607412899efad695a04"
content-encoding: gzip
x-amz-version-id: ...
accept-ranges: bytes
server: AmazonS3
vary: Origin
age: 1572
x-cache: Hit from cloudfront
via: 1.1 xxxxx.cloudfront.net (CloudFront)
x-amz-cf-pop: ...
x-amz-cf-id: ...
  • 从CloudFront请求指定Accept-Encoding: gzipcurl <cloudfront URL> -H "Accept-Encoding: gzip" -H "Origin: example.com" -I
代码语言:javascript
复制
HTTP/2 200
content-type: text/plain; charset=utf-8
content-length: 559354
date: Sat, 03 Aug 2019 05:39:50 GMT
access-control-allow-origin: *
access-control-allow-methods: GET, HEAD
last-modified: Sat, 03 Aug 2019 05:32:02 GMT
etag: "6483b10f491dc607412899efad695a04"
content-encoding: gzip
x-amz-version-id: ...
accept-ranges: bytes
server: AmazonS3
vary: Origin
age: 3239
x-cache: Hit from cloudfront
via: 1.1 xxxx.cloudfront.net (CloudFront)
x-amz-cf-pop: ...
x-amz-cf-id: ...

注意,access-control-expose-headers: Content-Length头被从CloudFront响应头中删除,这仅仅是因为我们设置了Accept-Encoding: gzip

(还请注意,S3很乐意返回它,即使设置了Accept-Encoding: gzip。)

当请求有CloudFront时,有什么方法可以让Access-Control-Expose-Headers保持Accept-Encoding: gzip头呢?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2019-08-03 07:10:35

我相信我已经找到答案了。有必要将Accept-Encoding添加到CloudFront缓存行为中的白头集中。这样做,然后运行无效,似乎是修复它。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/977818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档