HTTP Range,If-Range,If-Match比较和实践

Range,If-Range,If-Match是HTTP中的几个头字段,其中Range和If-Range配合可以实现断点续传,If-Match也可以和Range配合,但底层逻辑确是不同。

Range: 按指定范围获取资源,范围越界报416。
If-Range: 断点续传恢复时,用If-Range携带上次获得的资源的etag或Last-Modified检查资源是否已发生变化,是则需要重新下载整个资源,否则取本次Range指定范围的资源。无论是否匹配都只会返回200。
If-Match: 如果资源未变动,则上传资源,否则报412。

btw: MDN上关于If-Match的描述有点小错误,即If-Match不匹配时,报412而不是416,更关键的是If-Match和Range虽然可以搭配使用,逻辑上不符合断点续传的要求,所以业务中,就不要使用Range+If-Match了。博主还提了一个PR,现在已经修正。

在这里插入图片描述

下面是一个实际的例子,包括了13个case。

其中使用了一个letter.txt文件作为资源文件。

[root@test01 conf]# cat ../html/letter.txt 
abcdefghijklmnopqrstuvwxyz

server {
   
		listen 80;
        server_name  test;
		
		root html;


        access_log  logs/200_range_access.log  main;
		error_log logs/200_range_error.log debug;

		location / {
   
			#本例验证Range,If-Range,If-Match使用文件letter.txt
		}

    }
#测试实例
#case1:验证letter.txt可访问

#[root@test01 conf]# curl test/letter.txt
#abcdefghijklmnopqrstuvwxyz

#case2:取etag
#[root@test01 conf]# curl test/letter.txt -I
#HTTP/1.1 200 OK
#Server: nginx/1.20.1
#Date: Wed, 06 Apr 2022 02:00:38 GMT
#Content-Type: text/plain; charset=utf-8
#Content-Length: 27
#Last-Modified: Fri, 03 Sep 2021 02:13:49 GMT
#Connection: keep-alive
#ETag: "613184dd-1b"
#Accept-Ranges: bytes
#
#case3:If-Match匹配etag
#[root@test01 conf]# curl test/letter.txt -H 'If-Match: "613184dd-1b"' -I
#HTTP/1.1 200 OK
#Server: nginx/1.20.1
#Date: Wed, 06 Apr 2022 02:01:00 GMT
#Content-Type: text/plain; chars
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值