目录
1、HTTP协议的基本概念
超文本传输协议HTTP协议,定义了浏览器怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把文档传送给浏览器。从层的角度,HTTP协议是面向事务的应用层协议,是万维网能够可靠地交换文件的重要基础。
2、HTTP协议的主要特点
HTTP使用了面向连接的TCP协议作为运输层协议,保证了数据的可靠性传输;
HTTP不考虑数据在传输过程中的数据丢失和重传的问题;
HTTP协议本身是无连接的,也就是说,通信双方在交换HTTP报文之前不需要先建立HTTP连接;
HTTP协议是无状态的,也就是说,客户端第二次访问服务器时,服务器的反应和第一次访问是一样的;
浏览器发起的TCP连接建立的三次报文握手中,第三次握手中就会传递HTTP的请求报文,而服务器会在三次握手之后,响应HTTP报文请求,发送HTTP响应报文,包含客户端需要的数据;
3、HTTP的持续连接
3.1 背景:
HTTP 1.0有一个明显的缺点,就是每次请求文档都会建立TCP连接,这带来了一些不必要的开销:
- 每次请求一个文档,就需要两倍的RTT时延,一个用于TCP连接建立的前两次报文握手,一个用于HTTP报文的请求和响应的发送;
- 万维网服务器和客户端(浏览器)每次建立TCP连接,都要分配缓存和变量,这也带来一些开销。、
3.2 解决方案:
HTTP 1.1使用了持续连接,即服务器在发送响应后仍然在一段时间内保持这条连接,是同一个客户端和该服务器在一定时间内仍然可以继续发送HTTP的请求报文和响应报文。
3.3 持续连接的工作方式:
HTTP 1.1的持续连接有两种工作方式:非流水线方式和流水线方式。
工作方式 | 特点描述 | 特点 |
非流水线方式 | 客户端在收到前一个响应后才能发出下一个请求,即客户端每访问一个对象都要消耗一个RTT时延 | 1)比非持续连接节省了一个RTT; 2)服务器发完一个对象后就处于空闲状态,浪费了服务器资源 |
流水线方式 | 客户端在收到响应报文之前就能发送新的请求报文 | 减少了TCP连接的空闲时间,提供了文档下载效率 |
4、HTTP报文结构
4.1 报文结构
请求报文和响应报文都是由三部分组成的:
- 开始行:用于区分请求报文和响应报文,在请求报文中的开始行叫做请求行,响应报文中的开始行叫做状态行。开始行的三个字段都以空格隔开,最后一回车换行CR和LF进行分隔。
- 首部行:用来说明浏览器、服务器和报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有回车和换行。整个首部结束时,还有一空行将首部行和后面的实体主体分开。
- 实体主体:在请求报文中一般都不用这个字段,而在响应报文中也有可能没有这个字段。
一个完整报文的例子:
4.2 方法:
方法就是对所请求的对象进行操作,所谓的方法,实际上就是一些命令。因此,请求报文的类型就是由它的方法来决定的。常用的方法包括:
方法 | 作用 |
GET | 请求读取有URL所标注的信息 |
POST | 给服务器添加信息 |
PUT | 在指明的URL下存储一个文档 |
DELETE | 删除指明的URL所指示的文档 |
CONNECT | 用于代理服务器 |
HEAD | 请求读取有URL所标志的信息的首部 |
OPTION | 请求一些选项的信息 |
TRACE | 用来进行环回测试的请求报文 |
这里最常用的就是GET/POST/PUT/DELETE方法。
4.3 URL
URL是统一资源定位符,用来表示从互联网上得到的资源位置和访问这些资源的方法。URL给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。实际上,URL就是资源在互联网上的地址,互联网上的所有资源都有一个唯一确定的URL。
URL的格式:
URL的一般形式由4个部分组成: <协议>://<主机>:<端口>/<路径>
- 协议:使用什么协议来获取该万维网文档。可用的协议包括HTTP协议、ftp协议等;
- 主机:该主机在互联网的域名或者IP;
- 端口和路径:这两个有时候可以省略
4.4 HTTP状态码
状态码都是三位数,分为5大类,分别以不同的数字开头:
状态码分类 | 意义 |
1xx | 表示通知信息,例如请求收到了,或者正在进行处理 |
2xx | 表示成功,例如接受或知道了 |
3xx | 表示重定向,例如要完成请求还必须采取进一步的行动 |
4xx | 表示客户端的差错,例如请求中有错误的语法或不能完成 |
5xx | 表示服务器的差错,例如服务器失效无法完成请求 |
常见的状态行:
状态行 | 意义 |
HTTP/1.1 202 Accepted | 接受 |
HTTP/1.1 400 Bad Request | 错误的请求 |
HTTP/1.1 404 Not Found | 找不到目标 |
HTTP/1.1 301 Moved Permanently | 永久性迁移 |
4.5 状态码总结
整理了一下主要的状态码和状态码的作用,参考文章:HTTP状态码
5、Cookie
Cookie表示在HTTP服务器和客户端之间传递的状态信息。
Cookie的工作原理:
当用户浏览某个使用Cookie的的网站时,该网站服务器就为用户产生一个唯一标识码,并以此作为索引在服务器的后端数据库中产生一个项目。接着在给客户端的HTTP响应报文中添加一个叫做Set-cookie的首部行。
当客户端收到这个响应,其浏览器就在它管理的特定Cookie文件中添加一行,包括这个服务器的主机名和Set-cookie后面给出的识别码。当客户端继续浏览这个网站时,每发送一个HTTP请求报文,其浏览器就会从Cookie文件中取出这个网站的识别码,并防到HTTP请求报文的Cookie首部行中。当服务器再次收到客户端的请求消息后,就可以根据这个Cookie信息跟踪用户在该网站的活动。
如果客户端几天后再次访问这个网站,那么浏览器会在其HTTP请求报文中继续使用这一Cookie首部行,而网站根据cookie信息可以找到用户的访问记录,包括浏览的网页、查看的商品,以及用户的姓名、邮件、银行卡号等在这个网站使用过的信息。