之前在做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首部扫盲的更多相关文章

  1. 不惧面试:HTTP协议(1) - 基础扫盲

    v博客前言 先交代下背景,之前在一家公司面试.NET开发,去了先是做一份笔试题,有一半是关于HTTP协议的,技术总监直接面试,也是问一大堆HTTP协议的知识点,可能跟该公司的产品有关,该公司属于互联网 ...

  2. HTTP/2协议–特性扫盲篇

    HTTP/2协议–特性扫盲篇 随着web技术的飞速发展,1999年制定的HTTP 1.1已经无法满足大家对性能的要求,Google推出协议SPDY,旨在解决HTTP 1.1中广为人知的性能问题.SPD ...

  3. Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇

    Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Internet与中国 Internet最早来源于美 ...

  4. 前端学HTTP之报文首部

    前面的话 首部和方法配合工作,共同决定了客户端和服务器能做什么事情.在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些.本文将详细介绍HTTP报文中的首部 结构 ...

  5. [转载]敏捷开发之Scrum扫盲篇

    现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP...      为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S ...

  6. TCP服务和首部知识点小结

    服务 应用程序会被TCP分割成数据段,而UDP不分割. TCP有超时重传和确认 如果检验和出错将丢弃 IP数据包可能会失序或者重复,所以TCP会处理 滑动窗口来进行流量控制 对字节流的内容不做任何解释 ...

  7. ECMAScript 6 扫盲

    ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中 ...

  8. HTTP首部

    前面有几篇博文介绍了HTTP协议.HTTP请求方法详解.Javascript中Cookie的那些事儿.HTTPS,今天我们来聊一聊关于HTTP首部的那些事儿 HTTP协议的请求和响应报文中肯定包含HT ...

  9. TCP首部解析

    TCP首部: TCP数据被封装在一个IP数据报中,如下: TCP首部数据格式: 16位源都口号,16为目的端口号用于寻找发送端和接收端的应用进程,加上IP首部的源端IP及终端IP,唯一的确认一个TCP ...

随机推荐

  1. vuex的学习笔记

    什么是Vuex? vuex是一个专门为vue.js设计的集中式状态管理架构.状态?我把它理解为在data中的属性需要共享给其他vue组件使用的部分,就叫做状态.简单的说就是data中需要共用的属性. ...

  2. 网络通信 --> TCP三次握手和四次挥手

    TCP三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 一.TCP报文格式 如下图: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发 ...

  3. SQL语法语句总结

    一.SQL语句语法 ALTER TABLE ALTER TABLE 用来更新已存在表的结构. ALTER TABLE tablename (ADD|DROP column datatype [NULL ...

  4. Lucene 4.4.0中常用的几个分词器

    一.WhitespaceAnalyzer 以空格作为切词标准,不对语汇单元进行其他规范化处理.很明显这个实用英文,单词之间用空格. 二.SimpleAnalyzer 以非字母符来分割文本信息,并将语汇 ...

  5. QQ数据库管理

    1,数据库关系图 ##用例1:查询数据 #01.查询QQ号码为54789625的所有好友信息,包括QQ号码,昵称,年龄 select RelationQQID as QQ号码,NickName as ...

  6. SpringBoot03 项目热部署

    1 问题 在编写springBoot项目时,经常需要修改代码:但是每次修改代码后都需重新启动,修改的代码才会生效 2 这么实现IDEA能够像Eclipse那样保存过后就可以自动进行刷新呢 将sprin ...

  7. 启动tomcat时jmx port被占用

    一.问题描述 今天一来公司,在IntelliJ IDEA 中启动Tomcat服务器时就出现了如下图所示的错误: 错误: 代理抛出异常错误: java.rmi.server.ExportExceptio ...

  8. Leetcode 2——Range Sum Query - Mutable(树状数组实现)

    Problem: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), ...

  9. Java中的Integer

    包装类---Integer Integer 类在对象中包装了一个基本类型int的值.Integer类型的对象包含一个 int 类型的字段.此外,该类提供了多个方法,能在 int 类型和 String ...

  10. io多路复用(二)

    服务端 import socket sk1 = socket.socket() sk1.bind(('127.0.0.1',8001,)) sk1.listen() inputs = [sk1,] i ...