15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > Java Web开发实战—HTTP协议—HTTP协议概述、HTTP请求、HTTP响应、HTTP其他消息头

Java Web开发实战—HTTP协议—HTTP协议概述、HTTP请求、HTTP响应、HTTP其他消息头

时间:2023-07-18 17:36:02 | 来源:网站运营

时间:2023-07-18 17:36:02 来源:网站运营

Java Web开发实战—HTTP协议—HTTP协议概述、HTTP请求、HTTP响应、HTTP其他消息头:HTTP协议概述

HTTP协议简介

https://www.zhihu.com/video/1575493347980009472HTTP是超文本传输协议(HyperText Transfer Protocol)的缩写,它定义了客户端和Web服务器相互通信的规则。

作为被Web应用广泛采纳的数据传输协议,HTTP协议具有以下三个特点:

(1)HTTP协议基于标准的客户端服务器模型,主要由请求和响应构成。与其他传输协议相比,它永远都是客户端发起请求,服务器接收到请求后做出响应,如图6.1所示。




图6.1 HTTP的请求响应模型

(2)HTTP协议允许传输任意类型的数据,它的传输速度很快,当客户端向服务器请求服务时,需传送请求方法和路径。请求方法常用的有GET、POST等,每种方法规定了客户端与服务器联系的类型。

(3)HTTP协议是一个无状态的协议。无状态是指HTTP协议对于数据处理没有记忆能力。这意味着如果后续处理需要前面的信息,则它必须重传,这导致每次连接传送的数据量增大。

HTTP与TCP/IP

https://www.zhihu.com/video/1575493405567864832讲到HTTP协议,大家可能会将它和TCP/IP协议混淆。其实,它们之间有着严格区别。简单概括,HTTP协议是TCP/IP协议的应用层协议,是TCP/IP协议大家族的一员。

TCP/IP协议是互联网最基本的协议,它规定了计算机相互通信所涉及的各个方面的内容,如电缆的规格、IP地址的选定、寻找异地用户的方法、双方建立通信的顺序等。可以说,TCP/IP协议是互联网相关的各类协议族的集合,其涵盖的各类协议如图6.2所示。




图6.2 TCP/IP涵盖的各类协议

TCP/IP协议最重要的特点是分层管理,按照分层结构,TCP/IP协议自下而上可分为数据链路层、网络层、传输层、应用层,具体如表6.1所示。

表6.1 get与post方法的区别




TCP/IP协议相关通讯协议
应用层HTTPFTPSMTP
POP3NFSSSH
传输层TCPUDP
网络层IPICMP
数据链路层LANARPWAN



TCP/IP协议的每一层分别完成不同的功能,上层协议使用下层协议提供的服务。其中,数据链路层用来处理连接网络的硬件范畴,包括硬件的设备驱动、网卡、光纤等物理可见部分。网络层用来实现数据的选路和转发,确定通信路径。传输层用于定义数据封包的传送、流程的控制、传输过程的侦测等。应用层决定了向用户提供应用服务时通信的活动,HTTP即位于该层。

作为TCP/IP应用层的协议,HTTP的实现建立在下层协议的服务之上,一次HTTP请求要通过从上到下多层协议才能完成,如图6.3所示。




图6.3 一次HTTP请求的过程

从图6.3中可以看出,一次HTTP请求要经过以下几个步骤。

l 客户端在应用层(HTTP协议)发出获取某个Web页面的HTTP请求。

l 在传输层(TCP协议)把从应用层收到的数据进行分割,并打上标记序号及端口号后转发给网络层。

l 在网络层(IP协议)增加通信目的地MAC地址后转发给数据链路层。

l 接收端的服务器在数据链路层收到数据,按照顺序往上层发送,一直到应用层。当传输到应用层,才算真正接收到由客户端发过来的HTTP请求。

由此可见,HTTP协议的实现无法离开TCP/IP各层协议的支持。

HTTP的版本

https://www.zhihu.com/video/1575493452556546048HTTP自诞生以来已经历了多个版本,这从侧面反映了Web技术的快速发展。接下来,本书将对HTTP的相关版本做详细讲解。

1. HTTP 0.9

HTTP 0.9是第一个版本的HTTP协议,它的结构简单,不支持请求头,只允许获取一种请求方法,同时也无法向服务器传送太多信息。由于HTTP 0.9的功能单一,现在已很少使用,这里不再过多讲解。

2. HTTP 1.0

HTTP 1.0是第二个版本的HTTP协议。与HTTP0.9相比,它增加了如下特性。

l 增加请求的类型,如 HEAD、POST等。

l 添加请求和响应消息的协议版本,响应消息第一行以“HTTP/1.0”开始。

l 使用响应码来表示请求响应消息的成功与否,如200表示成功。

l 请求与响应支持头域。

l 扩大了处理的数据类型,支持对多媒体流信息的处理。

与HTTP 0.9相比,HTTP 1.0版本扩展了功能,增加了应用场景,因而被广泛应用。但随着互联网技术的发展,HTTP 1.0的不足之处也渐渐凸显。按照TCP/IP协议,HTTP的请求响应要建立在TCP连接之上,HTTP 1.0版本下的请求响应过程如图6.4所示。




图6.4 HTTP 1.0版本下的请求响应过程

从图6.4可以看出,在HTTP 1.0条件下,一次TCP连接只能支持一次HTTP请求响应,当服务器完成响应后,当前TCP连接就要关闭,如果想要再次发送HTTP请求,需要重新建立一个TCP连接。假如现在有如下一段HTML代码。

上面的HTML代码中有三个<img>标记,并且这三个<img>标记指向了图像的URL地址,当客户端访问这个HTML文件时,它首先要发出针对该网页文件的HTTP请求,然后,它还要发出三个访问图片的HTTP请求,并且每次请求都要重新建立TCP连接,如此一来,势必会影响系统的性能。

3. HTTP 1.1

HTTP 1.1是第三个版本的HTTP协议,也是目前主流的HTTP协议版本。HTTP 1.1的一个重要特性是支持持久连接,也就是说,同一个TCP连接,可以同时处理多个请求并用一定的机制来保证各个请求之间的分离性。在HTTP 1.1版本下,客户端与服务器的交互过程如图6.5所示。




图6.5 HTTP 1.1版本下的请求响应过程

从图6.5可以看出,服务器在给客户端返回第一个HTTP响应之后,TCP连接并没有马上关闭,浏览器可以在该TCP连接上继续发送HTTP 请求。这种运作模式减少了网络包,降低了新建和关闭连接造成的消耗和延迟。

HTTP与HTTPS

https://www.zhihu.com/video/1575493492658397184HTTP协议以明文方式传送内容,如果攻击者截取了客户端和服务器之间的传输报文,就可能窃取和篡改其中的信息。因此 HTTP 不适用于敏感信息的传播,例如银行卡、邮箱密码等,这时就需要引入 HTTPS。

HTTPS是超文本传输安全协议(HyperText Transfer Protocol over Secure Socket Layer)的缩写,是基于HTTP的安全信息通道,它使用安全套接字层(SSL)进行信息交换,简而言之,HTTPS就是HTTP的安全版。

HTTPS协议的作用如下。

l 建立一个信息安全通道,保证数据传输的安全

l 认证用户和服务器,确保数据发送到正确的客户端或服务器

与HTTP相比,HTTPS具有以下特点。

l 使用HTTPS协议需要到CA申请证书,一般免费证书较少,因此需要一定费用。

l HTTP采用明文传输传输数据,HTTPS 则是采用SSL对内容加密后再传输。

l HTTPS使用和HTTP不同的连接方式,HTTP建立在TCP连接之上,HTTPS除了建立TCP连接之外,还要建立SSL连接。

l HTTPS与HTTP使用不同的端口,前者是443,后者是80。

简而言之,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,大家应注意理解它与HTTP协议的联系与区别。

HTTP报文

https://www.zhihu.com/video/1575493527324323840HTTP报文是客户端和服务端相互通信时发送的数据块。当客户端访问Web资源时,它会向服务器发送HTTP请求报文。服务器接收到请求消息后,会向客户端返回HTTP响应报文。HTTP请求报文和HTTP响应报文统称为HTTP报文。

HTTP报文是HTTP协议的重要环节,它传递着客户端和服务端交互的细节。只有深入理解HTTP报文,才能更好的掌握和使用HTTP协议。由于HTTP报文对用户是不可见的,开发者要想对其进行研究,需要借助专用的网络查看工具,本书将使用版本为56.0的FireFox浏览器。FireFox浏览器从http://www.firefox.com.cn/下载,下载完成后将其安装到操作系统上。打开FireFox浏览器,界面如图6.6所示。

图6.6 FireFox浏览器打开界面

单击右上角的

图标,在菜单中选择“开发者”→“附加组件”选项,浏览器出现“附件组件管理器”页面,如图6.7所示。

图6.7 附加组件管理器

在附件组件管理器中选择扩展选项,然后在页面右上角

图标右侧的组件搜索框中输入Firebug,出现Firebug的搜索结果,如图6.8所示。

图6.8 附加组件管理器

点击Firebug右侧的“安装”按钮,安装完成后,在FireFox浏览器的工具栏出现

图标,如图6.9所示。

图6.9 FireFox浏览器出现Firebug图标

点击浏览器工具栏中的Firebug图标,启动Firebug工具,这时在浏览器的下方出现Firebug的工具栏,如图6.10所示。

图6.10 Firebug工具栏

在浏览器的地址栏中输入http://www.qfedu.com访问千锋教育首页,在Firebug工具栏可以看到浏览器与服务器的互动信息列表,如图6.11所示。

图6.11 使用FireFox查看HTTP信息

单击URL地址左边的“+”号,在展开的头信息选项卡中可以看到HTTP报文,HTTP报文包含格式化后的响应头信息和请求头信息。其中,请求头具体如下。

响应头具体如下所示。




HTTP请求

HTTP请求方法

https://www.zhihu.com/video/1575493586694750208HTTP的请求方法规定了客户端操作Web资源的方式,随着版本的更新,HTTP 支持的请求方法越来越多。目前主流的HTTP1.1版本支持八种请求方法,具体如下。

l GET,向指定的URL请求Web资源。

l POST,向指定的URL提交数据(提交表单或上传文件等),请求服务器处理。

l HEAD,从指定的资源获取响应消息头。

l PUT,将网页放置到指定URL位置。

l DELETE,请求服务器删除指定URL标识的资源。

l OPTIONS,请求服务器告知其支持的功能,检查服务器的性能。

l TRACE,请求服务器返回客户端发送的请求信息,主要用于测试。

l CONNECT,请求服务器代替客户端去访问其它资源,主要用于HTTP代理。

下面通过一个表格对比它们的特性,具体如表6.2所示,大家在实际开发中应根据功能需求酌情使用。

表6.2 get与post方法的区别




对比项GETPOST
页面刷新没有影响数据会被再次提交
传输数据的大小有限制没有限制
传输数据的类型只允许ASCII字符没有限制,也允许二进制数据
可见性传递的参数在URL中显示,对所有人可见传递的参数不显示在URL中
安全性安全性较差,发送密码等敏感信息不使用安全性较好,发送的数据被隐藏
以上列举了HTTP请求的八种方法,其中最常用的是GET和POST,接下来通过实例对这两种请求方法进行演示。

(1)打开Eclipse,新建Web工程chapter06,在该工程的WebContent目录下分别新建login01.html和login02.html,具体代码如例书中6.1和例6.2所示。

两个HTML文档都定义了一个表单,不同的是,login01.html文档采用GET方式提交,login02.html采用POST方式提交。

(2)将工程chapter06添加到Tomcat服务器,启动Tomcat,打开Firefox浏览器,开启Firebug工具,访问http://localhost:8080/chapter06/login01.html,浏览器显示的页面如图所示。

(3)在login01.html页面中填写姓名abc和密码12345,单击“提交” 按钮,这时浏览器地址栏里的URL发生了变化,如图所示。

从图中可以看出,当提交login01.html页面中的表单时,原有的URL后面加上了表单中的参数信息。这时,查看Firebug显示的请求报文,发现请求行中的URL后也增加了表单中的参数信息,具体如下。

(4)接下来演示用POST方式提交表单,访问http://localhost:8080/chapter06/login02.html,在login02.html页面中填写姓名def和密码56789,单击提交按钮,这时浏览器地址栏里的URL没有变化,如下图所示。

5)点击Firebug的POST标签,发现请求报文中增加了表单中的参数信息,具体如下。

由此可见,在POST请求方式中,表单中的参数被作为实体内容传递给服务器。

通过案例演示,大家应该对GET和POST有了基本了解,下面通过一个表格来对比它们的特性,具体如表所示,大家在实际开发中应根据功能需求选择使用。




HTTP请求行

https://www.zhihu.com/video/1575493622115594241HTTP请求行位于请求报文的第一行,由请求方法、URL、协议版本三个部分组成,具体示例如下。

POST /login.html HTTP/1.1

以上示例中,POST是请求方法,告诉服务器要执行怎样的操作,/login.html是URL,一般是服务器根目录下的相对目录,要以“/”开头,HTTP/1.1是指这次请求采用的协议版本,各个部分之间以空格分割。

HTTP请求头

HTTP请求头位于请求行之后,实际上是一个键/值对的列表,它包含了很多关于客户端环境和请求内容的附加信息。例如,请求头可以声明浏览器所用的语言、浏览器的类型、请求正文的长度、请求正文的类型等,具体示例如下。

在以上示例中,每个请求头字段都由一个字段名和一个值构成,中间用冒号隔开,头字段之间以换行符分开。

为实现不同的功能,HTTP协议提供了多种请求头字段,接下来,将对一些常用的请求头字段进行讲解。

1. Host

在HTTP1.1版本中,当客户端(通常是浏览器)发送请求时,该头字段是必须要有的,它通常从URL中提取出来,用于指定被请求资源的主机名和端口号。例如,用户在浏览器中输入http://www.qfedu.com,这次请求的HOST头字段如下。

Host:http://www.qfedu.com:80

由于浏览器默认的端口是80,所以此处的80可以省略。

2. Accept

Accept用于指定客户端可以接收的媒体类型。假如,浏览器希望接收gif格式的文件,可以发送包含image/gif的Accept请求头,服务器检测到浏览器的请求信息,可以在网页中的img元素中使用gif类型的文件。

能作为Accept头字段的媒体类型很多,常用的几种如下。

Accept:text/html

表示客户端希望接收HTML文本

Accept:application/xml

表示客户端希望接收XML文本

Accept:image/jpg

表示客户端希望接收jpg图片

Accept:video/mpeg

表示客户端希望接收mpeg视频文件

Accept:application/zip

表示客户端希望接收zip文件

Accept:image/*

表示客户端希望接收所有image格式的图片

Accept:*/*

表示客户端希望接收所有格式的内容

3. Accept-Charset

Accept-Charset用于指定客户端可以接收的字符编码。假如浏览器使用的是utf-8的字符集,则Accept-Charset头字段的格式如下。

Accept-Charset: utf-8

常用的字符集还有ISO-8859-1、GB2312等,这里要提醒大家的是,Accept-Charset的字段值可以设置为多个,只需将它们以逗号分开即可。如果客户端没有发送Accept-Charset请求头,则默认客户端能接受任意字符集的数据。

4. Accept-Encoding

Accept-Encoding用于指定客户端有能力解码的压缩编码类型,常用的压缩编码类型有gzip,、deflate等。Java语言中的Servlet能够向支持gzip的客户端返回经gzip编码的HTML页面,这可以缩短下载时间,提升响应速度。Accept-Encoding头字段的格式如下。

Accept-Encoding: gzip, deflate

5. Accept-Language

Accept-Language用于指定客户端支持的语言类型,它可以指定多个国家或地区的语言,语言之间用逗号分开,Accept-Language头字段的格式如下。

Accept-Language: zh-cn,zh-hk,en-us

其中,zh-cn代表简体中文,zh-hk代表繁体中文,en-us代表美国英语,服务器会按照Accept-Language请求头中设置的语言的顺序,优先返回位于前面的国家语言的网页文档。

6. User-Agent

User-Agent用于向服务器告知客户端的名称、版本、操作系统等信息。用户在访问某些网页时,可能会看到一些欢迎信息,其中列出了当前用户的操作系统信息以及浏览器属性等,这些就是从User-Agent这个请求报头中获取的。User-Agent头字段的格式如下。

7. Referer

浏览器通过Referer请求头向Web 服务器表明当前请求的超链接所在的URL,例如,如果用户在千锋教育主页单击扣丁学堂的链接,那么此次请求包含的Referer请求头如下。

Referer: http://www.qfedu.com/index.html

如果本次请求不是通过超链接而是直接在浏览器地址栏输入URL,那它就没有Referer请求头。

在开发中,Referer请求头常被用于追踪网站访问者的来源,如果访问者属于恶意访问,就可以对其进行阻止或屏蔽。

8. If-Match

为减少网络延迟、提升响应速度,当用户访问已被客户端缓存的页面时,服务器会检索该页面是否有更新,如果没有更新,服务器会通知客户端访问本地已缓存的页面,这是HTTP的缓存机制。

HTTP的缓存机制可以通过If-Match请求头和ETag响应头实现。当服务器向客户端响应网页文件时,会传送一些代表实体内容特征的头字段,具体如下。

ETag: “mark”

当客户端再次向服务器请求这个页面时,会使用If-Match头字段附带以前缓存的内容,具体如下。

If-Match: “mark”

服务器收到请求后,会将If-Match请求头的内容和当前网页中的实体内容做比较,如果两者相同,会直接通知客户端访问本地已缓存页面;否则,返回新的页面文件和ETag头字段内容。

9. If-Modified-Since

和If-Match 类似,If-Modified-Since请求头也用于实现HTTP的缓存机制。当服务器向客户端响应网页文件时,会传送该网页文件的最后修改时间,具体如下。

Last-Modified: Thu, 30 Nov 2017 08:41:19 GMT

当客户端再次向服务器请求这个页面时,会使用If-Match头字段告诉服务器它上次访问该页面的最后修改时间,具体如下。

If-Modified-Since: Thu, 30 Nov 2017 08:41:19 GMT

服务器收到请求后,会将If-Modified-Since请求头传递的最后修改时间和当前网页实际的最后修改时间做比较,如果两者相同,会返回一个304状态码,表示客户端缓存的文件是最新的,这时,客户端仍使用本地已缓存页面。




HTTP响应

HTTP响应行

https://www.zhihu.com/video/1575493705410318336HTTP响应行位于响应报文的第一行,由HTTP协议版本、状态码和状态码描述信息组成,具体如下。

HTTP/1.1 200 OK

其中,HTTP/1.1是通讯使用的协议版本,200是状态码,OK是状态描述,请求行每个部分需要用空格分隔。

对于协议版本,大家已经比较熟悉,这里不再过多陈述,接下来对HTTP的状态码进行详细讲解。

HTTP状态码反映了Web服务器处理客户端请求的状态,由三位数字组成,其中首位数字规定了状态码的类型,具体如下。

1xx:信息类(Information),表示收到Web浏览器请求,正在进一步的处理中。

2xx:成功类(Successful),表示用户请求被正确接收、解析和处理。例如:200 OK。

3xx:重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。

4xx:客户端错误(Client Error),表示客户端提交的请求有错误。

5xx:服务器错误(Server Error),表示服务器不能完成对请求的处理。

以上列举了状态码的五种类型,其中每种类型都有若干个状态码,为了便于大家理解和查询,下面通过表格对不同类型的状态码进行解释说明,如表6.3~表6.7所示。

表6.3 1xx状态码




状态码说明
100(继续)告知客户端应当继续发送请求
101(切换协议)表示服务器遵从客户端要变换通讯协议的请求,切换到另外一种协议



表6.4 2xx状态码




状态码说明
200(成功)请求已成功,请求所希望的响应头或数据体将随此响应返回
201(已创建)请求已被实现,新的资源已经依据请求建立,且其 URL已经随Location 响应头返回
202(已接受)服务器已接受请求,但尚未完成处理。最终该请求可能会也可能不会被执行。这样做的目的是允许服务器接受其他过程的请求,而不必让客户端一直保持与服务器的连接直到处理全部完成
203(非权威信息)服务器已成功处理请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方
204(无内容)服务器成功处理了请求,但不需要返回任何实体内容
205(重置内容)服务器成功处理了请求,且没有返回任何内容,主要用于重置表单
206(部分内容)服务器成功返回部分内容,还有剩余内容没有返回。大文件分段下载、断点续传等通常使用此类响应方式



表6.5 3xx状态码




状态码说明
300(多项选择)被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向
301(永久移动)请求的资源已被永久移动到新的URL,响应信息会包含新的URL,客户端会自动定向URL
302(临时移动)资源被临时移动,客户端继续使用原有URL
303(参见其他)与302类似,很多客户端处理303状态码的方式和302相同
304(未修改)客户端请求的资源未修改,服务器返回此状态码,不会返回任何资源
305(使用代理)告知客户端其请求的资源必须通过代理访问
307(临时重定向)HTTP 1.1版本新增的状态码,客户端只能重定向GET请求



表6.6 4xx状态码




状态码说明
400(请求无效)客户端请求的语法错误,服务器无法理解
401(未经授权)通知客户端发送请求时要带有身份认证信息
402(需要付款)保留备用的状态码
403(禁止)服务器理解客户端的请求,但拒绝处理
404(找不到)服务器无法找到客户端请求的资源
405(请求方法被禁止)客户端本次使用的请求方法不被服务器允许
406(不能接受)服务器无法根据客户端请求的内容特性(如语言、字符集、压缩编码等)处理请求
407(需要验证代理身份)请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408(请求超时)服务器等待客户端发送的请求时间过长,超时
409(冲突)服务器完成客户端的PUT请求时可能返回此状态码,请求的操作和当前资源状态有冲突
410(离开)客户端请求的资源已经被移除,服务器不知道重定向到哪个位置
411(需要长度)服务器无法处理客户端发送的不带Content-Length请求头的信息
412(先决条件错误)客户端请求信息的先决条件在服务器中检验失败
413(请求实体过大)由于请求的实体过大,服务器无法处理,因此拒绝请求
414(请求URI过长)请求的URI(通常是网址) 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求
415(不支持的媒体类型)请求中提交的实体并不是服务器所支持的格式,因此请求被拒绝
416(请求的范围无效)客户端请求中指定的数据范围与当前资源的可用范围不重合
417(预期失败)服务器无法满足请求头Expect 中指定的预期内容



表6.7 5xx状态码




状态码说明
500(服务器内部错误)服务器内部出现错误,无法处理请求
501(未实现)服务器无法识别请求的方法,无法支持其对任何资源的请求
502(无效网关)作为网关或者代理的服务器发送请求时,从上游服务器接收到无效的响应
503(服务不可用)由于超载或系统维护,服务器当前无法处理请求
504(网关超时)作为网关或者代理的服务器,未及时从上游服务器获取请求
505(HTTP版本不被支持)服务器不支持请求的HTTP协议的版本,无法完成处理



HTTP响应头

https://www.zhihu.com/video/1575493746149474304HTTP响应头位于响应行之后,和请求头一样,它实际上也是一个键/值对的列表,它包含了很多关于服务器属性和响应内容的附加信息。例如,服务器名称、页面资源的最后修改时间、文档编码、内容长度等,具体如下。

以上示例中,每个响应头字段都有一个字段名和一个值构成,中间用冒号隔开,头字段之间以换行符分开。

为实现不同的功能,HTTP协议提供了多种响应头字段,接下来,本节将对一些常用的响应头字段进行讲解。

1. Server

Server头字段用于指定服务器软件名称,它由Web服务器自己设置,Server头字段的格式如下。

Server: Apache-Coyote/1.1

2. Accept-Ranges

Accept-Ranges头字段用于指定服务器是否支持客户端发送的Range请求头请求资源,如果通知客户端使用以bytes为单位的Range请求,则Accept-Ranges头字段的格式如下。

Accept-Ranges: bytes

如果服务器通知客户端不使用Range请求,则Accept-Ranges头字段的格式如下。

Accept-Ranges: none

3. Age

Age头字段用于指定页面文件在客户端或代理服务器中的缓存时间,值以秒为单位,具体格式如下。

Age: 12345

当客户端访问某个已缓存的页面文件时,如果该页面缓存在本地的持续时间小于Age头字段的值,则客户端直接使用缓存到本地的页面内容,否则,客户端向服务器发出对该页面文件的请求。

4. Etag

Etag头字段用于向客户端传递代表实体内容特征的标记信息,利用这些标记信息,客户端可以识别在不同时间获得的同一路径下的资源是否相同。Etag头字段通常和If-Match请求头配合使用,实现HTTP的缓存机制。Etag头字段的格式如下。

Etag: “mark”

5. Location

Location头字段通常与302状态码配合使用,用于通知客户端获取资源的新地址,将客户端引向另一个资源,它的值通常是一个URL,具体格式如下。

Location: http://www.qfedu.com




HTTP其他消息头

通用消息头

https://www.zhihu.com/video/1575493781952069632在HTTP报文中,有些消息头既可以用于请求,也可以用于响应,下面,本书将对一些常用的通用消息头作详细讲解。

1. Cache-Control

Cache-Control消息头用于控制请求和响应遵循的缓存机制。Cache-Control的值可以为public、private、no-cache、no-store、max-age、must-revalidated等,在一个头字段中可以设置多个值,这些值之间用逗号分隔,具体格式如下。

Cache-Control: no-cache,no-store,must-revalidated

根据浏览方式,Cache-Control消息头的值的作用也不同,主要分为以下几种。

1)打开新窗口

当Cache-Control消息头的值为private、no-cache、must-revalidate时,打开新窗口访问页面文件时会重新访问服务器。如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器。

2)在地址栏回车

当Cache-Control消息头的值为private或must-revalidate时,只有第一次请求页面文件时会访问服务器,以后就不再访问,而是直接读取本地缓存。当Cache-Control消息头的值为no-cache时,每次都要访问服务器。当Cache-Control消息头的值为max-age时,在过期之前不会重复访问。

3)按后退按扭

当Cache-Control消息头的值为private、must-revalidate、max-age时,不会重复访问服务器,当Cache-Control消息头的值为no-cache,每次都重复访问。

4)按刷新按扭

无论Cache-Control消息头为何值,客户端都会重复访问服务器。

2. Connection

Connection消息头用于指定客户端与服务器之间是否建立持久连接。Connection头字段的格式如下所示。

Connection: keep-alive

keep-alive代表持久连接。当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器,会继续使用这条已经建立的连接。

Connection: close

close代表服务器完成响应后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送请求,需要重新建立TCP连接。

3. Date

Date消息头表示消息发送的时间,它的值为GMT格式,具体格式如下。

Date: Thu, 30 Nov 2017 02:45:15 GMT

一般情况下,无论是请求还是响应,都会传送Date消息头。

4. Via

Via消息头用于指定HTTP请求途径的代理服务器使用的协议和主机名。当HTTP请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加Via 消息头并填上自己的相关信息,当下一个代理服务器收到第一个代服务器的请求时,会在自己发出的请求中复制前一个代理服务器的请求的Via头部,并把自己的相关信息加到后面,依此类推,Via消息头的具体格式如下所示。

Via: HTTP/1.1 Proxy1, HTTP/1.1 Proxy

5. Warning

Warning消息头主要用于提示一些警告信息,具体格式如下。

Warning: 110 Response is stale

以上Warning消息头表示请求已过时。

实体消息头




实体消息头用于描述HTTP传送的实体内容的属性,它既可以包含在请求报文,也可以包含在响应报文中,下面本书将对常用的实体消息头作详细讲解。

1. Content-Encoding

Content-Encoding消息头用于表示实体内容的编码方式,客户端应按照指定编码方式请求资源。Content-Encoding消息头的格式如下。

Content-Encoding: gzip

2. Content-Language

Content-Language消息头用于告知客户端实体内容支持的国家或地区的语言类型,常见的有zh-cn、cn-us等。Content-Language消息头的格式如下。

Content-Language: zh-cn

3. Content-Length

Content-Length消息头用于告知客户端实体内容的长度,以方便客户端辨别每个相应内容的开始和结束位置。Content-Length消息头的格式如下所示。

Content-Length: 348

4. Content-Location

Content-Location消息头用于给出与实体内容相对应的URL,具体格式如下。

Content-Location: /index.htm

5. Content-MD5

Content-MD5消息头用于提供实体内容的MD5校验值,验证数据完整性以及确认传输是否到达。Content-MD5消息头的格式如下。

Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

6. Content-Range

Content-Range消息头告知客户端实体内容的哪个部分符合HTTP请求的范围。以字节为单位。Content-Range消息头的格式如下。

Content-Range: bytes 21010-47021/47022

7. Expires

Expires消息头用来控制缓存的失效日期,它的值为GMT格式,其格式如下。

Expires: Thu, 30 Nov 2017 02:45:15 GMT

8. Last-Modified

Last-Modified消息头用于指明页面文件最终修改的时间。在浏览器第一次请求某一个URL时,服务器响应回页面内容,同时有一个Last-Modified消息头标记此文件在服务器端最后被修改的时间。Last-Modified消息头的格式如下。

Last-Modified: Thu, 30 Nov 2017 02:45:15 GMT




小结 :Java Web开发实战—HTTP协议—HTTP协议概述、HTTP请求、HTTP响应、HTTP其他消息头

主要讲解了HTTP协议的相关知识,包括HTTP协议概述、HTTP请求、HTTP响应、HTTP的其他消息头等。通过本章知识的学习,大家要能够理解HTTP的概念、特性及工作机制,区分HTTP与HTTPS,掌握HTTP的POST和GET请求方法,理解常用的HTTP消息头的用法,为后面的学习做好准备。



关键词:协议,响应,请求,实战

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭