HTTP首部扫盲
之前在做web开发时使用到HTTP首部的时候遇到不熟悉的都是现用现查,时间一长印象就不深刻了。最近在重读《图解HTTP》,其中有一章是专门讲解HTTP首部的,讲解的HTTP首部很多,在这里总结了一些平常使用比较多的首部。
1. HTTP报文首部
HTTP的请求和响应报文必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。
1.1 HTTP请求报文
HTTP请求报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。
我们可以自己通过浏览器查看请求首部信息,浏览器F12控制台选择Network,下面是我访问图灵社区网站的请求头部信息:
Request URL: http://www.ituring.com.cn/
Request Method: GET
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Host: www.ituring.com.cn
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
1.2 HTTP响应报文
HTTP响应报文由HTTP版本、状态码、HTTP首部字段3部分构成。
访问图灵社区网站的响应头部信息:
Status Code: 200 OK
Cache-Control: private
Content-Encoding: gzip
Content-Length: 25620
Content-Type: text/html; charset=utf-8
Date: Sat, 14 Apr 2018 15:07:28 GMT
Server: Microsoft-IIS/8.5
Vary: Accept-Encoding
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 5.2
X-Powered-By: ASP.NET
2. 四种HTTP首部字段类型
2.1 通用首部字段
请求报文和响应报文两方都会使用的首部。
2.1.1 Connection
Connection首部字段具备如下两个作用:
控制不再转发给代理的首部字段
请求报文和响应报文可以通过
Connection:不再转发的首部字段名
控制不再转发的首部字段管理持久连接
HTTP/1.1版本的默认连接都是持久连接,客户端会在持久连接上连续发送请求。当服务器想要断开连接时则指定Connection值为Close。HTTP/1.1版本之前的HTTP版本的默认连接都是非持久连接,因此如果想要在旧版本的HTTP协议上维持持久连接,则需要显式指定Connection首部字段值为keep-alive。
Connection:keep-alive
Connection:Close
2.1.2 Upgrade
Upgrade字段用于检测HTTP协议以及其他协议是否可使用更高的版本进行通信,或者是否可以切换到其他协议进行通信。Upgrade字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间,因此使用首部字段Upgrade时,需要额外指定Connection:Upgrade,此时Connection起到的作用就是前面提到的“控制不再转发给代理的首部字段”。对于附有首部字段Upgrade的请求,服务器可用101状态码作为响应返回。
关于Upgrade字段,最常用的场景就是由HTTP协议升级为Websock协议时,之前我还对这个过程进行了抓包分析,感兴趣的同学或者对Websock协议不是很了解的同学可以移步我之前的一篇博客原来你是这样的Websocket--抓包分析。
2.2 请求首部字段
从客户端向服务器发送请求报文时使用的首部。
2.2.1 Accept
Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可以使用type/subtype这种形式,一次指定多种媒体类型。若想要给媒体类型显式增加优先级,则使用q=来额外表示权重值,用(;)进行分隔。权重范围为0~1,默认权重为q=1.0。
2.2.2 Authorization
首部字段Authorization是用来告知服务器,用户代理的认证信息(证书值)。通常在需要认证的网络资源中,没有附加Authorization字段或Authorization字段值错误的请求,会被认为是非法请求,响应状态码为401。在Token认证方式下,客户端就是通过Authorization字段将Token值告知服务器的。
2.2.3 Host
首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一个必须被包含在请求内的首部字段。首部字段Host和单台服务器分配多个域名的虚拟主机的工作机制有很密切的联系,这是首部字段Host必须存在的意义。
2.2.4 Referer
首部字段Referer会告知服务器请求的原始资源的URI。
2.2.5 User-Agent
首部字段User-Agent会将创建请求的浏览器和用户代理名称等信息传达给服务器。
2.3 响应首部字段
从服务器向客户端返回响应报文时使用的首部。
2.3.1 Location
使用首部字段Location可以将响应接收方引导至某个与请求URI位置不同的资源。该字段会配合3XX:Redirection的响应,提供重定向的URI。几乎所有的浏览器接收到包含首部字段Location的响应后,都会强制性的尝试对已提示的重定向资源的访问。
2.3.2 Server
首部字段Server告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
2.3.3 WWW-Authenticate
首部字段WWW-Authenticate用于HTTP的访问认证。它会告知客户端用于访问请求的URI所指定资源的认证方案(Basic或Digest)和带参数提示的质询。状态码401 Unauthorized响应中,肯定带有首部字段WWW-Authenticate。
2.4 实体首部字段
请求报文和响应报文的实体部分使用的首部。
2.4.1 Allow
首部字段Allow用于通知客户端能够支持Request-URI指定资源的所有HTTP方法。当服务器收到不支持的HTTP方法时,会以状态码405 Method Not Allowed 作为响应返回。与此同时,还会把所有能支持的HTTP方法写入首部字段Allow后返回。
2.4.2 Content-Length
首部字段Content-Length表明了实体主体部分的大小(单位是字节)。
2.4.3 Content-Location
首部字段Content-Location给出与报文主体部分相对应的URI。和首部字段Location不同,Content-Location表示的是报文主体返回资源对应的URI。目的是为了当返回的页面内容和实际请求的对象不同时,Content-Location内会写明URI。
2.4.3 Content-Type
首部字段Content-Type说明了实体主体内对象的媒体类型。字段值采用type/subtype形式赋值。
这个字段我们实际接触是比较多的,当使用网络接口调试工具调试接口时就需要选择Content-Type,例如指定使用json媒体格式Content-Type:Application/json;charset=UTF-8
。
本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。
如果您认为还不错,不妨点击一下下方的【推荐】按钮,谢谢支持。
转载与引用请注明出处。
HTTP首部扫盲的更多相关文章
- 不惧面试:HTTP协议(1) - 基础扫盲
v博客前言 先交代下背景,之前在一家公司面试.NET开发,去了先是做一份笔试题,有一半是关于HTTP协议的,技术总监直接面试,也是问一大堆HTTP协议的知识点,可能跟该公司的产品有关,该公司属于互联网 ...
- HTTP/2协议–特性扫盲篇
HTTP/2协议–特性扫盲篇 随着web技术的飞速发展,1999年制定的HTTP 1.1已经无法满足大家对性能的要求,Google推出协议SPDY,旨在解决HTTP 1.1中广为人知的性能问题.SPD ...
- Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇
Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Internet与中国 Internet最早来源于美 ...
- 前端学HTTP之报文首部
前面的话 首部和方法配合工作,共同决定了客户端和服务器能做什么事情.在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些.本文将详细介绍HTTP报文中的首部 结构 ...
- [转载]敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S ...
- TCP服务和首部知识点小结
服务 应用程序会被TCP分割成数据段,而UDP不分割. TCP有超时重传和确认 如果检验和出错将丢弃 IP数据包可能会失序或者重复,所以TCP会处理 滑动窗口来进行流量控制 对字节流的内容不做任何解释 ...
- ECMAScript 6 扫盲
ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中 ...
- HTTP首部
前面有几篇博文介绍了HTTP协议.HTTP请求方法详解.Javascript中Cookie的那些事儿.HTTPS,今天我们来聊一聊关于HTTP首部的那些事儿 HTTP协议的请求和响应报文中肯定包含HT ...
- TCP首部解析
TCP首部: TCP数据被封装在一个IP数据报中,如下: TCP首部数据格式: 16位源都口号,16为目的端口号用于寻找发送端和接收端的应用进程,加上IP首部的源端IP及终端IP,唯一的确认一个TCP ...
随机推荐
- Redis查询,设置超时时间
1.定义 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...
- Kali Linux下安装Nessus扫描器
一.官网下载Nessus(http://www.tenable.com/products/nessus/select-your-operating-system),这里需要查找自己对应的版本,如下图一 ...
- nginx日志切割配置
编辑虚拟主机文件 /etc/nginx/conf.d/default.conf 在server段添加如下配置 if ($time_iso8601 ~ "^(\d{4})-(\d{2})-( ...
- Android,资料分享(2015 版)
Java 学习 我要再次强调,一定要有Java 基础(虽然现在使用其他语言也可以开发Android,但毕竟是很小众),也不要认为学习Java 两三周就可以不用管了,这会在以后的深入学习中暴露出问题,所 ...
- C语言博客-指针
一.PTA实验作业(5分) 题目1:6-1 两个4位正整数的后两位互换 1. 本题PTA提交列表 2. 设计思路 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明. 无 题目2:6-3 ...
- Mysql5.7.17中文乱码问题
写Java web调数据库,老是出现汉字乱码,一直没理睬,今天决定好好"整治"一下,却发现并没有那么简单.从网上找的方法,大部分都尝试了一遍都有一些问题. 有的改完了,数据库启动不 ...
- Alpha冲刺Day10
Alpha冲刺Day10 一:站立式会议 今日安排: 由林静完成第三方机构的用户信息管理模块 由张梨贤完成第三方机构的委托授权管理模块 由黄腾飞和周静平完成政府人员模块下风险管控子模块下的核实企业风险 ...
- JAVA使用和操作properties文件
java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properti ...
- verilog学习笔记(2)_一个小module及其tb
module-ex_cnt module ex_cnt( input wire sclk, input wire rst_n, output wire[9:0] cnt ); reg [9:0] cn ...
- python 继承基础
class annamal: def chi(self): print(self.name + '吃') def he(self): print(self.name + '喝') class dog( ...