首页 > 趣谈HTTP协议中的那些MIME header

趣谈HTTP协议中的那些MIME header

HTTP协议是我们最常使用到的协议,我们通过浏览器上网,下载文件,上传数据很多都是使用的它,但是我以前对它还是懵懵懂懂的,逐渐地,我有些感悟了,所以就记载到这里。本文将尽量使用诙谐的笔法介绍HTTP中的那些mime header field 头域。

场景一:使用wget来下载一个源码包,比如ATS 5.3版本,使用下面的命令:

wget -d "http://mirror.bit.edu.cn/apache/trafficserver/trafficserver-5.3.0.tar.bz2"



我们重点看response header部分:

HTTP/1.1 告诉我们使用的是HTTP协议的1.1版本,现在HTTP/2已经出来了,但是我们见到的还不多;

200 OK 告诉我们响应的状态码是200,就是正常返回数据了,其它还有很多响应码,比如2xx,3xx,4xx,5xx等等,不细说了;

Server告诉我们服务器软件是Nginx,版本是1.1.9,现在最新版的已经到1.8.x了;

Content-Type告诉我们响应的数据类型,这里是C++源码,当然是application/octet-stream了,其它还有图片,视频,json,html,xml之类的;

Content-Length告诉我们response body的长度,也就是源码包的字节大小;

Date 告诉我们从服务器获取该源码包的时间,和我目前的时间差8小时,估计是时区设置的问题;

Last-Modified 告诉我们,这个ATS 5.3的源码包放到服务器上的时间,刚好是其对外发布时间;

Connection:告诉我们,C/S直接的连接保持方式,这里的keep-alive表示是保活的,没有立即断开,如果还有其它请求,可以重用这里TCP连接;

Accept-Ranges告诉我们从需要的字节开始接收;

由此可见,这些response header都是很有参考意义的,能给我们提供丰富的信息。

场景二:使用curl通过ATS 5.3下载一个普通的网页文件,使用下面的命令:

curl -o /dev/null -vx 127.0.0.1:8081  -H "Accept-Encoding: gzip,deflate,sdch" "http://news.sohu.com"



相同的头在这里不再重复了。

Vary告诉我们,对Accept-Encoding头的不同值要区分,来得到不同的document副本,比如gzip压缩的,deflate压缩的,没有压缩的,这些都是不同的副本;

Cache-Control告诉我们缓存规则,这里是不要对document做变换,document的最大存活期是120秒,从缓存获得该文件开始计算,超过120s要向服务器再次验证;

Expires告诉我们,到那个指定的时刻,这个document就是过期的,必须向源站重新请求;

Content-Encoding告诉我们,该document是使用gzip压缩的;

Age告诉我们,文档的存活期,刚获取的文档,存活期是0;

Proxy-Connection告诉我们,curl和Proxy的网络连接是保活的;

Via告诉我们,请求从源站到达客户端所经过的代理情况,这里只经过了一个代理ATS 5.3,注意后面的缓存情况[cMsSfW]表明是回源获取的;

X-RS,FSS-Cache是源站自定义头,不做表述。

将上述请求再重复几次,我们得到



我们看到了几点差异:

Age值有变化,原来是0,现在是8,表明该document在ATS的缓存中存活了8秒,它最大存活期是120秒,对一个新闻门户网站来说,这是合理的,120秒后必须刷新网页内容;

Via头中缓存状态有变化,现在是[cRs f ],表示是从ATS中的RAM中获取的热点内容;

场景三:range请求和检查服务器是否支持断点续传功能

curl命令行中的-r/--range选项支持向服务器发送Range请求,-i选项指定显示响应头信息



注意返回状态码是206,

Accept-Ranges告诉我们服务器是否支持指定范围请求及哪种类型的分段请求,这里是byte

Content-Range告诉我们在整个返回体中本部分的字节位置,因为我们请求的是图片的前10个字节,所以Content-Range的值是bytes 0-9/1575,后面的1575是图片总的字节数。

上面是curl获取到的响应头信息,其中如果能够找到Content-Range则表明服务器支持断点续传,有些服务器还会返回Accept-Ranges。Nginx服务器默认支持断点续传的,无须做任何额外配置。



更多相关:

  • 英语的重要性,毋庸置疑!尤其对广大职场人士,掌握英语意味着就多了一项竞争的技能。那,对于我们成人来说,时间是最宝贵的。如何短时间内在英语方面有所突破,这是我们最关心的事情。英语学习,到底有没有捷径可以走,是否可以速成?周老师在这里明确告诉大家,英语学习,没有绝对的捷径走,但是可以少走弯路。十多年的教学经验告诉我们,成功的学习方法可以借...

  • 展开全部 其实IDLE提供了一个显32313133353236313431303231363533e78988e69d8331333365663438示所有行和所有字符的功能。 我们打开IDLE shell或者IDLE编辑器,可以看到左下角有个Ln和Col,事实上,Ln是当前光标所在行,Col是当前光标所在列。 我们如果想得到文件代码...

  • 前言[1]从 Main 方法说起[2]走进 Tomcat 内部[3]总结[4]《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spri...

  • 【本文摘要】【注】本文所述内容为学习Yjango《学习观》相关视频之后的总结,观点归Yjango所有,本文仅作为学习之用。阅读本节,会让你对英语这类运动类知识的学习豁然开朗,你会知道英语学习方面,我们的症结所在。学习英语这类运动类知识,需要把握四个原则第一,不要用主动意识。第二,关注于端对端第三,输入输出符合实际情况第四,通过多个例子...

  • 点云PCL免费知识星球,点云论文速读。文章:RGB-D SLAM with Structural Regularities作者:Yanyan Li , Raza Yunus , Nikolas Brasch , Nassir Navab and Federico Tombari编译:点云PCL代码:https://github.co...

  • 滑块式验证码用户通过拖动滑块行为来完成校验,支持PC端及移动端。可以将用户拖动行为的时间、精度,滑动轨迹等信息到服务器,然后进行后台算法验证。特别介绍Blazor 版本的滑块验证码 传送门在线演示效果图快速开始组件依赖 font-awesomeCSS将引入样式表的 标签复制并粘贴到 中,并放在所有其他样式表之前。JS将引入脚本的 用...

  • Ktor 是一个使用 Kotlin 以最小的成本快速创建 Web 应用程序的框架。Ktor 是一个用于在连接系统(connected systems)中构建异步服务器和客户端的 Kotlin 框架。它由 Kotlin 团队创建,因此,它充分利用了 Kotlin 的语言特性,为开发者提供出色的体验和运行时性能。import io.kto...

  • l VDI (Virtual Desktop Infrastructure)VDI构架采用的“集中存储、集中运算”构架,所有的桌面以虚拟机的方式运行在服务器硬件的虚拟化层上,桌面以图像传输的方式发送到客户端。l IDV (Intelligent Desktop Virtualization) 由于VDI方案对服务器资源、网络带宽要求比...

  • 受昨晚闰秒问题影响,今天内网和线上的ATS服务器都出现了CPU负载增高的问题,参见下面的截图 下面是tsar监控到负载异常记录,从今天(20150701)早上8:05分开始: 我们内网和线上的服务器Linux kernel内核版本都是 经过实践摸索,发现如下规律: 1.如果已经开启ntpd,如果昨晚没有关闭n...

  • 下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL R720 2U服务器 CPU  8核 Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz 内存 32G 硬盘  系统盘 /...