《图解http》读书笔记(二)

Posted by WWJ Blog on February 17, 2020

《图解HTTP》读书笔记-简单的HTTP协议

HTTP协议和TCP/IP协议族中众多协议一样,用于客户端和服务端之间的通信

请求肯定是由客户端发出的,由服务端响应请求。换句话说,首先是从客户端开始建立通信的,服务端在没有接收到请求报文之前,是不会有任何响应的。

请求报文的结构 Alt text

响应报文的组成 Alt text

HTTP是不保存状态的协议 HTTP协议自身是不会对请求和响应之间的通信状态做任何的保存,也就是说,协议对发送过的请求和响应都不会做持久化处理。 每当有新的HTTP请求发送时,都会有对应的新的响应生成。

HTTP请求方法

GET:获取资源 GET方法用来请求已被URI识别的资源。如果请求的是文本资源,那么服务器就会将文本资源保持原样返回,如果请求的是需要经过网关的接口,那么服务器就会返回经过处理后的结果。

POST:传输实体主体 虽然用GET也可以传输实体主体,但一般不用GET传输而用POST,因为POST的目的不是为了获取响应的主体内容。 还有一个原因就是用GET传输实体主体的话会暴露实体主体的内容,会有安全隐患。

PUT:传输文件 PUT方法用来传输文件。就像FTP协议的文件上传一样,将文件上传指URI指定的位置。因为在HTTP/1.1中,PUT方法不带有验权机制,任何人都可以上传文件,存在安全性问题,所以一般不用PUT方法上传文件。

HEAD:获取报文首部 HEAD方法和GET方法一样,只是不返回报文主体部分,用来确认URI的有效性以及资源的更新时间等等。

DELETE:删除文件 与PUT方法相反,DELETE方法是用来删除文件。和PUT方法一样,也是没有验权机制,所以一般web网站不使用该方法删除文件。

持久化连接

在HTTP初始版本中,客户端和服务端之间每建立完一次通信之后都会断开一次TCP连接。在最开始的web中,只是进行一些简单的文本传输,每次请求完成之后断开TCP连接并不会造成什么性能影响,但随着HTTP的普及,文档中包含大量图片的情况多了起来。 比如,浏览器在请求HTML文档资源的时候,也会请求文档中的其他资源,如果频繁的断开TCP连接的化,那么通信的开销就会增加。

为了解决上述问题,HTTP/1.0提出keep-alive的方法,使用该方法之后,建立一次TCP连接之后就可进行多次请求和响应的交互,除非一方明确提出断开连接,否则会一直保持TCP连接。

使用Cookie做状态管理

因为HTTP是无状态协议,协议本身不会保存请求和响应之间的任何状态。如果某个需要登录认证的web页面无法做登录状态管理,那么每次跳转新页面都会要求登录一次。为了解决这个问题,HTTP引入了Cookie技术,Cookie会根据从服务端的响应报文中的set-cookie字段来通知客户端进行cookie缓存,等下次发送请求的时候在,客户端会自动在请求报文首部添加cookie字段。