Caching 当S3源视频/mp4资源替换为更大的文件时,来自cloudfront的416

Caching 当S3源视频/mp4资源替换为更大的文件时,来自cloudfront的416,caching,video,amazon-s3,amazon-cloudfront,Caching,Video,Amazon S3,Amazon Cloudfront,为什么在下面的场景中cloudfront会以416状态响应,尽管我认为请求的范围应该是可以满足的 原始S3对象 情景: 使用S3源配置cloudfront分发,对象缓存设置为“自定义”,最小/最大/默认TTL全部设置为0 将视频/mp4文件上载到S3,不设置与缓存相关的头 通过cloudfront在chrome中播放视频 在这一点上,一切似乎都很好。我看到3个网络请求资源-为什么chrome请求2和3的重叠范围,我不明白,但尽管如此,视频在这一点上播放得很好 覆盖S3对象 现在,不久之后: 将较

为什么在下面的场景中cloudfront会以416状态响应,尽管我认为请求的范围应该是可以满足的

原始S3对象 情景:

  • 使用S3源配置cloudfront分发,对象缓存设置为“自定义”,最小/最大/默认TTL全部设置为0
  • 将视频/mp4文件上载到S3,不设置与缓存相关的头
  • 通过cloudfront在chrome中播放视频
  • 在这一点上,一切似乎都很好。我看到3个网络请求资源-为什么chrome请求2和3的重叠范围,我不明白,但尽管如此,视频在这一点上播放得很好

    覆盖S3对象 现在,不久之后:

  • 将较大的(~2x)文件上载到相同的S3位置
  • 通过cloudfront在chrome中播放视频
  • 这一次,发生了一个错误

    这里的resp 1似乎是正常的(即内容长度看起来是正确的)-虽然不确定为什么它是来自cloudfront的
    未命中
    -鉴于TTL设置,我本以为它是
    刷新命中

    为什么即使请求的范围在resp 1的内容长度范围内,第二页加载的“req 2”也会因416而失败?

    注:

    • 直接转到S3,没有问题
    • 将较大的文件替换回较小的文件,视频将再次正常播放
    • 使用“缓存控制:无缓存”将文件上载到S3,没有问题,但我总是收到“来自cloudfront的未命中”。我的理解是,cloudfront应该始终使用S3检查内容是否随此配置而改变
    • 等待一段时间(比如30秒)-问题自行解决
    • 以前尝试复制此场景时,在覆盖之后,S3向CloudFront添加了304个响应,但我无法复制该行为(现在只有一个216个)

    日志 原始S3对象 铬 云锋 S3 云锋 S3
    8CD9B72DE42431DF4ADADADAB73AABF29EA0B34B5D821565FE4A16A3080509坏视频测试[11/Dec/2016:23:24:06+0000]150.101.108.33 arn:aws:iam:::user/E58826B8A66DBA1B REST.PUT.OBJECT video.mp4“PUT/video.mp4 HTTP/1.1“200--956852 7367 53”-“aws cli/1.9.11/2.7.10 Darwin/16.1.1.0 botocore/1.4.26”-
    8CD9B72DE42431DF4DADAB73AABF29EA0B34B5D821565FE4A16A3080509坏视频测试[11/Dec/2016:23:24:18+0000]54.239.202.45-BA1C06FEA7DAC83F REST.GET.OBJECT video.mp4“GET/video.mp4 HTTP/1.1”206-956852 956852 40 35-“亚马逊云前端”-
    
    您看不到的是,在覆盖后的第一个请求中,S3向CloudFront提供的是哪个对象——旧对象还是新对象

    当您在S3中覆盖现有对象时,覆盖始终是一个原子操作,从这个意义上说,每个请求都将通过完整的旧对象或完整的新对象来满足。。。但是时间并不能保证,因为S3有一个覆盖现有对象的最终一致性模型

    AmazonS3为所有区域的覆盖放置和删除提供了最终的一致性

    对单个密钥的更新是原子的。例如,如果您对现有密钥执行PUT操作,后续读取可能会返回旧数据或更新的数据,但它永远不会写入损坏或部分数据

    即使bucket没有启用版本控制,当两个对象都存在于S3中时,也会有一个时间窗口(通常很短)。考虑到上述陈述是正确的,这不可能是任何其他方式

    类似地,也可以从S3请求一个不存在的对象,然后上传该对象,然后再次请求它,并在下载成功之前继续获得404(或403,取决于bucket配置)响应一小段时间

    相反,如果从未尝试下载不存在的对象,则在上载后,您将始终发现该对象可立即下载。这是一种折衷,本质上是大规模设计的必要性

    bucket和distribution日志应该有助于揭示幕后发生的事情,特别是在上传后的任何下载尝试中从S3进行CloudFront下载时,如果显示与旧对象一致的字节计数


    经过进一步思考这里还有第二种可能的解释这里发生了什么,很难决定这是否被认为是CloudFront中的错误,如果这确实是实际问题的话

    在S3中替换对象之后,让我们暂时假设一致性不是问题——让我们假设上传之后的所有后续请求实际上都会导致S3向CloudFront提供对象的当前版本

    这里的问题可能是,在对象被替换后的第一次下载——这本应导致CloudFront收回其对象的旧缓存版本——被浏览器取消。(我见过Chrome这样做,但我不知道它为什么这样做。)

    取消下载时,源站的响应不会被缓存

    取消的请求

    如果某个对象不在边缘缓存中,并且如果在CloudFront从您的源站获取该对象后但在它可以交付请求的对象之前,查看器终止了会话(例如,关闭浏览器),则CloudFront不会将该对象缓存在边缘位置

    当然,这表示“如果对象不在边缘缓存中”,您可以争辩说它实际上是。。。但这可能是一个语义问题:CloudFront从S3请求的对象可能不在缓存中——缓存中的对象是不同的对象(在相同的URI)。如果这个逻辑成立,那么“CloudFront不缓存对象”的断言也可能成立

    所以。。。
    [
      {
        "url": "https://dvayusv1lektq.cloudfront.net/video.mp4?u=1481498631683",
        "response_status": 206,
        "request_headers": [
          { "name": ":path", "value": "/video.mp4?u=1481498631683" },
          { "name": "pragma", "value": "no-cache" },
          { "name": "accept-encoding", "value": "identity;q=1, *;q=0" },
          { "name": "accept-language", "value": "en-US,en;q=0.8,fr;q=0.6,id;q=0.4" },
          { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" },
          { "name": "accept", "value": "*/*" },
          { "name": "cache-control", "value": "no-cache" },
          { "name": ":authority", "value": "dvayusv1lektq.cloudfront.net" },
          { "name": ":scheme", "value": "https" },
          { "name": "range", "value": "bytes=0-" },
          { "name": ":method", "value": "GET" }
        ],
        "response_headers": [
          { "name": "date", "value": "Sun, 11 Dec 2016 23:23:54 GMT" },
          { "name": "via", "value": "1.1 0ea9662a9e73b2ca5836ede6924f81b0.cloudfront.net (CloudFront)" },
          { "name": "last-modified", "value": "Sun, 11 Dec 2016 23:23:45 GMT" },
          { "name": "server", "value": "AmazonS3" },
          { "name": "etag", "value": "\"4ab3cf8dcd7747d45c1723eb19c0c7fa\"" },
          { "name": "status", "value": "206" },
          { "name": "x-cache", "value": "Miss from cloudfront" },
          { "name": "content-type", "value": "video/mp4" },
          { "name": "content-range", "value": "bytes 0-535350/535351" },
          { "name": "accept-ranges", "value": "bytes" },
          { "name": "content-length", "value": "535351" },
          { "name": "x-amz-cf-id", "value": "-6zzzNwipKKtO_L-vU3o4dbH30cBHV2zu-28rZXwVrZm5uI8oKADYw==" }
        ]
      },
      {
        "url": "https://dvayusv1lektq.cloudfront.net/video.mp4?u=1481498631683",
        "response_status": 206,
        "request_headers": [
          { "name": ":path", "value": "/video.mp4?u=1481498631683" },
          { "name": "pragma", "value": "no-cache" },
          { "name": "accept-encoding", "value": "identity;q=1, *;q=0" },
          { "name": "accept-language", "value": "en-US,en;q=0.8,fr;q=0.6,id;q=0.4" },
          { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" },
          { "name": "accept", "value": "*/*" },
          { "name": "cache-control", "value": "no-cache" },
          { "name": ":authority", "value": "dvayusv1lektq.cloudfront.net" },
          { "name": ":scheme", "value": "https" },
          { "name": "if-match", "value": "\"4ab3cf8dcd7747d45c1723eb19c0c7fa\"" },
          { "name": "range", "value": "bytes=524288-" },
          { "name": ":method", "value": "GET" }
        ],
        "response_headers": [
          { "name": "date", "value": "Sun, 11 Dec 2016 23:23:54 GMT" },
          { "name": "via", "value": "1.1 0ea9662a9e73b2ca5836ede6924f81b0.cloudfront.net (CloudFront)" },
          { "name": "last-modified", "value": "Sun, 11 Dec 2016 23:23:45 GMT" },
          { "name": "server", "value": "AmazonS3" },
          { "name": "etag", "value": "\"4ab3cf8dcd7747d45c1723eb19c0c7fa\"" },
          { "name": "status", "value": "206" },
          { "name": "x-cache", "value": "RefreshHit from cloudfront" },
          { "name": "content-type", "value": "video/mp4" },
          { "name": "content-range", "value": "bytes 524288-535350/535351" },
          { "name": "accept-ranges", "value": "bytes" },
          { "name": "content-length", "value": "11063" },
          { "name": "x-amz-cf-id", "value": "_z3F_A7pVXHz5PBulj8-4OeRolEzWdgT9R4-JdvgUpTLq463MZ-C_A==" }
        ]
      },
      {
        "url": "https://dvayusv1lektq.cloudfront.net/video.mp4?u=1481498631683",
        "response_status": 206,
        "request_headers": [
          { "name": ":path", "value": "/video.mp4?u=1481498631683" },
          { "name": "pragma", "value": "no-cache" },
          { "name": "accept-encoding", "value": "identity;q=1, *;q=0" },
          { "name": "accept-language", "value": "en-US,en;q=0.8,fr;q=0.6,id;q=0.4" },
          { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" },
          { "name": "accept", "value": "*/*" },
          { "name": "cache-control", "value": "no-cache" },
          { "name": ":authority", "value": "dvayusv1lektq.cloudfront.net" },
          { "name": ":scheme", "value": "https" },
          { "name": "if-match", "value": "\"4ab3cf8dcd7747d45c1723eb19c0c7fa\"" },
          { "name": "range", "value": "bytes=32768-" },
          { "name": ":method", "value": "GET" }
        ],
        "response_headers": [
          { "name": "date", "value": "Sun, 11 Dec 2016 23:23:54 GMT" },
          { "name": "via", "value": "1.1 0ea9662a9e73b2ca5836ede6924f81b0.cloudfront.net (CloudFront)" },
          { "name": "last-modified", "value": "Sun, 11 Dec 2016 23:23:45 GMT" },
          { "name": "server", "value": "AmazonS3" },
          { "name": "etag", "value": "\"4ab3cf8dcd7747d45c1723eb19c0c7fa\"" },
          { "name": "status", "value": "206" },
          { "name": "x-cache", "value": "RefreshHit from cloudfront" },
          { "name": "content-type", "value": "video/mp4" },
          { "name": "content-range", "value": "bytes 32768-535350/535351" },
          { "name": "accept-ranges", "value": "bytes" },
          { "name": "content-length", "value": "502583" },
          { "name": "x-amz-cf-id", "value": "8MGICqcddKwl5HZ2sNN6fpTSwO1I8qkvvurVfbBftlikXKdi-FQhdQ==" }
        ]
      }
    ]
    
    #Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query cs(Cookie) x-edge-result-type x-edge-request-id x-host-header cs-protocol cs-bytes time-taken x-forwarded-for ssl-protocol ssl-cipher x-edge-response-result-type cs-protocol-version
    2016-12-11      23:23:53        MEL50   34771   150.101.108.33  GET     dvayusv1lektq.cloudfront.net    /video.mp4      206     -       Mozilla/5.0%2520(Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_12_1)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/55.0.2883.87%2520Safari/537.36        u=1481498631683 -       Error   -6zzzNwipKKtO_L-vU3o4dbH30cBHV2zu-28rZXwVrZm5uI8oKADYw==        dvayusv1lektq.cloudfront.net    https   46      1.613   -       TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256     Miss    HTTP/2.0
    2016-12-11      23:23:56        MEL50   11408   150.101.108.33  GET     dvayusv1lektq.cloudfront.net    /video.mp4      206     -       Mozilla/5.0%2520(Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_12_1)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/55.0.2883.87%2520Safari/537.36        u=1481498631683 -       RefreshHit      _z3F_A7pVXHz5PBulj8-4OeRolEzWdgT9R4-JdvgUpTLq463MZ-C_A==        dvayusv1lektq.cloudfront.net    https   47      2.194   -       TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256     RefreshHit      HTTP/2.0
    2016-12-11      23:23:56        MEL50   503468  150.101.108.33  GET     dvayusv1lektq.cloudfront.net    /video.mp4      206     -       Mozilla/5.0%2520(Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_12_1)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/55.0.2883.87%2520Safari/537.36        u=1481498631683 -       RefreshHit      8MGICqcddKwl5HZ2sNN6fpTSwO1I8qkvvurVfbBftlikXKdi-FQhdQ==        dvayusv1lektq.cloudfront.net    https   47      0.259   -       TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256     RefreshHit      HTTP/2.0
    
    8cd9b72de42431df1df4dadadab73aabf29ea0b34b5d821565fe4a16a3080509 bad-video-test [11/Dec/2016:23:23:44 +0000] 150.101.108.33 arn:aws:iam::<IAM ID>:user/<username> FB18FDABAA5DF6CA REST.PUT.OBJECT video.mp4 "PUT /video.mp4 HTTP/1.1" 200 - - 535351 6448 118 "-" "aws-cli/1.9.11 Python/2.7.10 Darwin/16.1.0 botocore/1.4.26" -
    8cd9b72de42431df1df4dadadab73aabf29ea0b34b5d821565fe4a16a3080509 bad-video-test [11/Dec/2016:23:23:53 +0000] 54.239.202.78 - 934DB75AC20953C3 REST.GET.OBJECT video.mp4 "GET /video.mp4 HTTP/1.1" 206 - 535351 535351 101 98 "-" "Amazon CloudFront" -
    8cd9b72de42431df1df4dadadab73aabf29ea0b34b5d821565fe4a16a3080509 bad-video-test [11/Dec/2016:23:23:54 +0000] 54.239.202.78 - 56EF7496F985D4B3 REST.GET.OBJECT video.mp4 "GET /video.mp4 HTTP/1.1" 304 - - 535351 11 - "-" "Amazon CloudFront" -
    8cd9b72de42431df1df4dadadab73aabf29ea0b34b5d821565fe4a16a3080509 bad-video-test [11/Dec/2016:23:23:56 +0000] 54.239.202.78 - 7F0087B4769D0FD3 REST.GET.OBJECT video.mp4 "GET /video.mp4 HTTP/1.1" 304 - - 535351 4 - "-" "Amazon CloudFront" -
    
    [
      {
        "url": "https://dvayusv1lektq.cloudfront.net/video.mp4?u=1481498656967",
        "response_status": 206,
        "request_headers": [
          { "name": ":path", "value": "/video.mp4?u=1481498656967" },
          { "name": "pragma", "value": "no-cache" },
          { "name": "accept-encoding", "value": "identity;q=1, *;q=0" },
          { "name": "accept-language", "value": "en-US,en;q=0.8,fr;q=0.6,id;q=0.4" },
          { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" },
          { "name": "accept", "value": "*/*" },
          { "name": "cache-control", "value": "no-cache" },
          { "name": ":authority", "value": "dvayusv1lektq.cloudfront.net" },
          { "name": ":scheme", "value": "https" },
          { "name": "range", "value": "bytes=0-" },
          { "name": ":method", "value": "GET" }
        ],
        "response_headers": [
          { "name": "date", "value": "Sun, 11 Dec 2016 23:24:19 GMT" },
          { "name": "via", "value": "1.1 0ea9662a9e73b2ca5836ede6924f81b0.cloudfront.net (CloudFront)" },
          { "name": "last-modified", "value": "Sun, 11 Dec 2016 23:24:07 GMT" },
          { "name": "server", "value": "AmazonS3" },
          { "name": "etag", "value": "\"d4d5776a96931962b41476857f34ab6d\"" },
          { "name": "status", "value": "206" },
          { "name": "x-cache", "value": "Miss from cloudfront" },
          { "name": "content-type", "value": "video/mp4" },
          { "name": "content-range", "value": "bytes 0-956851/956852" },
          { "name": "accept-ranges", "value": "bytes" },
          { "name": "content-length", "value": "956852" },
          { "name": "x-amz-cf-id", "value": "CjmlHAFcyEWCiV68Q0G3gltuQSV7maR5bUoX0CfngDgDBp5fDvI38A==" }
        ]
      },
      {
        "url": "https://dvayusv1lektq.cloudfront.net/video.mp4?u=1481498656967",
        "response_status": 416,
        "request_headers": [
          { "name": ":path", "value": "/video.mp4?u=1481498656967" },
          { "name": "pragma", "value": "no-cache" },
          { "name": "accept-encoding", "value": "identity;q=1, *;q=0" },
          { "name": "accept-language", "value": "en-US,en;q=0.8,fr;q=0.6,id;q=0.4" },
          { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" },
          { "name": "accept", "value": "*/*" },
          { "name": "cache-control", "value": "no-cache" },
          { "name": ":authority", "value": "dvayusv1lektq.cloudfront.net" },
          { "name": ":scheme", "value": "https" },
          { "name": "if-match", "value": "\"d4d5776a96931962b41476857f34ab6d\"" },
          { "name": "range", "value": "bytes=917504-" },
          { "name": ":method", "value": "GET" }
        ],
        "response_headers": [
          { "name": "date", "value": "Sun, 11 Dec 2016 23:24:19 GMT" },
          { "name": "via", "value": "1.1 0ea9662a9e73b2ca5836ede6924f81b0.cloudfront.net (CloudFront)" },
          { "name": "server", "value": "CloudFront" },
          { "name": "x-cache", "value": "Error from cloudfront" },
          { "name": "content-type", "value": "text/html" },
          { "name": "status", "value": "416" },
          { "name": "content-length", "value": "49" },
          { "name": "x-amz-cf-id", "value": "WIb50z_8rXTdqaC4CzUSYSL0kuIE9CWlCnKNgzps7AoCSRoJplBBbA==" },
          { "name": "expires", "value": "Sun, 11 Dec 2016 23:24:19 GMT" }
        ]
      },
      {
        "url": "https://dvayusv1lektq.cloudfront.net/video.mp4?u=1481498656967",
        "response_status": 0,
        "request_headers": [
          { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" },
          { "name": "Range", "value": "bytes=32768-" },
          { "name": "Accept-Encoding", "value": "identity;q=1, *;q=0" }
        ],
        "response_headers": []
      }
    ]
    
    #Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query cs(Cookie) x-edge-result-type x-edge-request-id x-host-header cs-protocol cs-bytes time-taken x-forwarded-for ssl-protocol ssl-cipher x-edge-response-result-type cs-protocol-version
    2016-12-11      23:24:19        MEL50   52198   150.101.108.33  GET     dvayusv1lektq.cloudfront.net    /video.mp4      206     -       Mozilla/5.0%2520(Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_12_1)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/55.0.2883.87%2520Safari/537.36        u=1481498656967 -       Error   CjmlHAFcyEWCiV68Q0G3gltuQSV7maR5bUoX0CfngDgDBp5fDvI38A==        dvayusv1lektq.cloudfront.net    https   46      1.551   -       TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256     Miss    HTTP/2.0
    2016-12-11      23:24:19        MEL50   302     150.101.108.33  GET     dvayusv1lektq.cloudfront.net    /video.mp4      416     -       Mozilla/5.0%2520(Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_12_1)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/55.0.2883.87%2520Safari/537.36        u=1481498656967 -       Error   WIb50z_8rXTdqaC4CzUSYSL0kuIE9CWlCnKNgzps7AoCSRoJplBBbA==        dvayusv1lektq.cloudfront.net    https   47      0.001   -       TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256     Error   HTTP/2.0
    
    8cd9b72de42431df1df4dadadab73aabf29ea0b34b5d821565fe4a16a3080509 bad-video-test [11/Dec/2016:23:24:06 +0000] 150.101.108.33 arn:aws:iam::<IAM ID>:user/<username> E58826B8A66DBA1B REST.PUT.OBJECT video.mp4 "PUT /video.mp4 HTTP/1.1" 200 - - 956852 7367 53 "-" "aws-cli/1.9.11 Python/2.7.10 Darwin/16.1.0 botocore/1.4.26" -
    8cd9b72de42431df1df4dadadab73aabf29ea0b34b5d821565fe4a16a3080509 bad-video-test [11/Dec/2016:23:24:18 +0000] 54.239.202.45 - BA1C06FEA7DAC83F REST.GET.OBJECT video.mp4 "GET /video.mp4 HTTP/1.1" 206 - 956852 956852 40 35 "-" "Amazon CloudFront" -