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 ...
随机推荐
- Dockerfile 指令 VOLUME 介绍
在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数 ...
- ASCII十进制转字符串的方法
/// <summary> /// ASCII转字符串 /// </summary> /// <param name="asciiCode">A ...
- Spring Boot with Spring-Data-JPA学习案例
0x01 什么是Spring Boot? Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的"接班人",和微服务紧密联系 ...
- ava集合---HashSet的源码分析
一.HasnSet概述 Hashset实现set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set的迭代顺序.特别是它不保证该顺序恒久不变.此类允许使用Null元素 一.HasnSe ...
- The Beginning of the Graph Theory
The Beginning of the Graph Theory 是的,这不是一道题.最近数论刷的实在是太多了,我要开始我的图论与树的假期生活了. 祝愿我吧??!ShuraK...... poj18 ...
- oracle exp(expdp)数据迁移(生产环境,进行数据对比校验)
前言:客户需要迁移XX 库 ZJJJ用户(迁移到其他数据库),由于业务复杂,客户都弄不清楚里面有哪些业务系统,为保持数据一致性,需要停止业务软件,中间件,杀掉oracle进程. 一.迁移数据倒出部分= ...
- 【总结】关于YUV-RGB格式转换的一些个人理解
这段时间一直在研究YUV的格式问题例如YUV422.YUV420,在网上搜索了很多这方面的资料,发现很多资料讲的东西是重复的,没有比较深入的讲解,所以看了之后印象不是很深,过了一段时间之后又对它们有了 ...
- 极其简单的帮你理解ORM中的关联关系
ORM对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转 ...
- 《团队-Android手机便签-项目进度》
首先想提个小意见,结对编程那边还有些问题需要处理,这个时候就催团队进度是不是不太好,至少应该让我们把结对处理完是吧.但是作业终究是作业,布置了就得做,我们只得匆匆忙忙画了个界面,功能什么的根本没来得及 ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...