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 ...
随机推荐
- 计时器setInterval()-慕课网
计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...
- canvas填充样式
填充样式主要针对fillStyle.fillStyle除了可以赋值为color,还可以赋值渐变色,包括线性渐变色和径向渐变色,还是和css3里的内容类似. 一.线性渐变 1.设置线性渐变的填充样式 设 ...
- redis 相关知识
1. 什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...
- 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
上一节课,我给大家分享了微信API接入以及事件推送的回复,这是微信开发的第二节课,重点给说一说单图文回复,多图文回复,access_token,微信SDK. 公众号消息回复很多种形式,常见的形式有,文 ...
- java基础笔记(6)----面向对象的三大特性
简介:面向对象的三大特性就是封装,继承,多态,是面向对象的核心. 封装 简介:封装是类的边界,可以对数据起到保护作用 特性:属性私有,提供公开的get/set方法 属性私有:private 数据类型 ...
- Django+xadmin打造在线教育平台(八)
十一.用户信息 11.1.个人信息展示 (1)新建‘usercenter-bae.html’当母板 {% load staticfiles %} <!DOCTYPE html> <h ...
- 《团队-Oldnote-最终程序》
托管平台地址:https://github.com/Vcandoit/Notepad 小组名称:TOP 小组成员合照:待添加 程序运行方法:手机app,安装到手机点击即可运行,打开页面会有图标提示. ...
- alpha-咸鱼冲刺day4
一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 QAQ具体工作量没啥进展.但是前后端终于可以数据交互了!.. 四,问题困难 日常啥都不会,百度真心玩一年. 还得自学nodejs ...
- 1013团队Beta冲刺day5
项目进展 李明皇 今天解决的进度 服务器端还未完善,所以无法进行联动调试.对页面样式和逻辑进行优化 明天安排 前后端联动调试 林翔 今天解决的进度 完成维护登录态,实现图片上传,微信开发工具上传图片不 ...
- 2018上C语言程序设计(高级)作业- 第2次作业
作业要求一 提交截图: 6-7: 6-8: 6-9: 7-1: 作业要求二 题目6-7删除字符中数字字符 1.设计思路: (1)第一步:本题要求是删除字符中的数字字符,我的主要思路是通过数组遍历若遇到 ...