<>前言

本博客参考内容来自**《计算机网络自顶向下方法》**与网络博客总结

<>HTTP概况

Web的应用层协议为HTTP协议(超文本传输协议),是web的核心。
HTTP由两个程序实现:用户程序、服务器程序。

<>基本Web术语

* Web页面:Web页面(文档)由对象组成。一个对象只是一个文件,比如HTML文件,JPEG文件等。多数Web页面含有一个HTML页面和多个引用对象。
* Web浏览器:实现HTTP的客户端。
* Web服务器:实现HTTP的服务端,存储Web对象,每个对象由URL寻址。
* 往返时间(Round-Trip
Time,RTT):指一个短分组从客户到服务器然后再返回客户所花费的时间。包括分组传播时延,分组在中间路由器和交换机上的排队时延以及分组处理时延。
HTTP使用TCP作为其支撑运输协议,服务器向客户发送被请求的文件,不存储任何有关用户的信息,则HTTP是一个无状态协议。

<>持续连接与非持续连接

* 非持续连接:每个请求/响应对经过一个新的TCP单独发送。
* 持续连接:每个请求/相应对通过同一个TCP发送。
<>非持续连接的HTTP

在HTTP1.0中,默认非持续连接。我们可以知道在进行HTTP连接之前,我们要先建立TCP连接,建立TCP连接耗时一个RTT,并且建立一个HTTP耗时一个RTT。因此一次请求/响应对所花费的时间为2*RTT。

缺点:

* 必须为每一个请求对象建立和维护一个全新的连接,需要在客户和服务器中都分配TCP缓冲区和保持TCP变量,为服务器带来严重负担。
* 一次HTTP请求需要两倍RTT时间。
<>持续连接的HTTP

在HTTP1.1中,默认HTTP为持续连接。服务器在发送响应后保持TCP打开,此后相同的客户和服务器之间后续请求和响应可以通过同一个TCP进行传输。

<>HTTP报文格式

HTTP报文分为两种:请求报文与响应报文

<>请求报文

HTTP请求报文的第一行为请求行,后续的行称为首部行。
请求行分为三个字段:

* 方法字段
* URL字段
* HTTP版本字段
方法字段有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT八种。

<>响应报文

响应报文分为三个部分:初始状态行、首部行、实体类。
实体行是其报文主要部分,包含请求本身。
状态行有三个字段:HTTP协议版本、响应码、响应状态信息。

可以看到,其实除了状态行与请求不同以外,其他的都与请求报文相同。
在开发过程中,常见的HTTP响应报文状态码有

* 200 OK ,请求成功
* 400 Bad
Request,这是开发过程中经常遇到的bug,在平时的SpringBoot编码中,一般是请求参数写错了。在HTTP中,指示该请求无法被服务器理解。
* 404 Not Found,找不到资源。
<>用户与服务器的交互

我们刚刚提到了,HTTP是一种无状态协议,他并没有办法保留用户状态。但是有的时候,一些网站希望服务器能够记住客户,因此诞生了Cookie技术。

Cookie技术有四个组件:

* 在HTTP响应报文中的一个cookie首部行;
* 在HTTP请求报文中的一个cookie首部行;
* 在用户端系统中保留一个cookie文件,并且由用户浏览器进行管理;
* 位于web沾点的一个后端数据库。
相当于整个请求过程中所有状态都进行了保存。
在我所写的项目中,使用到了JWT生成Token进行单点登录,将Token保存在Cookie或者LocalStorage中,这样就保存了用户响应的状态。
但是Cookie技术一直都存在隐私泄露等各种问题。

<>Web缓存技术

缓存技术是计算机中常用的以空间换时间的技术,其思路其实非常简单,在客户与服务器之间加入一台中间代理服务器。

假设浏览器发起一个请求,其将会按照下列步骤运行:

* 浏览器先创建一个倒Web缓冲器的TCP连接,向Web缓冲器中的对象发送一个请求。
* Web缓冲器检查是否存储了对象副本,若有那么Web缓存器向客户浏览器用HTTP响应报文返回对象。
* 若没有该对象,Web缓存器打开一个与该对象的初始服务器的TCP连接。收到请求后,初始服务器向Web缓冲器发送具有相同对象的HTTP响应。
* Web缓冲器在接收到初始服务器的对象之后,在本地存储一个副本, 并向客户浏览器发送带有对象的响应报文。
<>条件GET方法

相信大家看到这个Web缓存技术的流程之后可以发现,他只是保存了副本,但是并没有更新副本的操作,也就是说你不知道他是否已经是过期的资源。

条件GET方法步骤如下:

* Web服务器向Web缓冲器发送一个带有Last-Modified的字段的响应报文,该字段映射该对象最后一次修改的时间.
* 在一段时间后,缓冲器发送一个条件GET执行检查,该请求带有If-modified-since字段,该字段为Last-Modified保存的时间.
* 假设没有修改过,则Web服务器向缓冲器发送一个带空实体类的响应.,并且状态码为304.
<>总结

通过这篇博客HTTP的基础内容便是讲完了,HTTP是基于请求/响应模式的协议,并且是一种无状态协议。
但是由于某些应用想要基于某些原因记录用户,那么便产生了Cookie技术,Cookie技术可以保存用户的部分信息。
又基于以空间换时间的思想,增加了Web缓存,并且用条件Get方法来避免缓存主存不一致性问题。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信