序言
在学习Http的时候,走了很多弯路,开始觉得是简单的百度出来,看看别人的博客就好了,结果发现基本上都是第三手、第四手资源,里面讲的东西仍是停留于几年前,这让我这个小白无从下手,最终直接去了MDN官网翻翻东西。git
Http简介
Http又称超文本传输协议,是用于传输例如HTML的超媒体文档的应用层协议,主要用于浏览器与web服务器之间的通讯。HTTP是无状态协议,即服务器不会在两次请求之间保留任何数据,但使用Cookies能够建立有状态的会话。。 github

客户端和服务端经过交换各自的消息(与数据流正好相反)进行交互。由像浏览器这样的客户端发出的消息叫作 requests,被服务端回应的消息叫作 responses。web
TCP/IP 三次握手
HTTP 的传输协议是 TCP/IP 协议,该协议链接是须要进行三次握手的。
大白话:
浏览器
那么为何须要三次握手?这里引用知乎上的一个回答: 缓存
这个问题的本质是, 信道不可靠, 可是通讯双发须要就某个问题达成一致. 而要解决这个问题, 不管你在消息中包含什么信息, 三次通讯 是理论上的最小值. 因此三次握手不是TCP自己的要求, 而是为了知足"在不可靠信道上可靠地传输信息"这一需求所致使的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就不要紧了. 所以,若是信道是可靠的, 即不管何时发出消息, 对方必定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就能够了.服务器
官方语言上的三次握手步骤:网络
- 客户端发送 SYN 报文给服务器端,进入 SYN_SEND 状态。 —— 客户端向服务器端发送消息,请求它的回应。
- 服务器收到 SYN 报文,回应一个 SYN ACK 报文,进入 SYN_RECV 状态。 —— 服务器端收到消息,采起回应行为,回复消息告诉客户端收到了。
- 客户端收到服务器 SYN 报文,回应一个 ACK 报文,进入链接状态。 —— 客户端收到消息,这时客户端收到响应,代表发送的数据有回信了。可是服务器端发送了回应却还不知道客户端有没有收到。这时客户端须要再次发送消息告诉服务器我收到了。服务器收到消息后,客户端和服务器都知道对方已准备好通信,而后就开始链接通信了。
Http的request和response
-
request
请求为客户端发送给服务器的数据。具体有以下数据:学习
- 请求方法:如 GET、 POST 这类请求方法。
- 要获取的资源路径。
- HTTP协议版本号。
- Headers:传递附加信息。
- body:若是想 POST 请求,就会传递 body 资源数据给服务器。

-
response
响应为服务器收到客户端发送数据返回的数据,具体有以下数据:加密
- HTTP协议版本号。
- 状态码(status code)。
- 状态消息(status message)。
- Headers:传递附加信息。
- body: 响应返回的资源存在body中。通常返回图片、HTML等资源。
-
Headers 头文件
头文件容许客户端和服务器经过请求和响应传递附加信息。
下面列出一些经常使用的消息头及其用法:spa
- Date 信息来源的日期时间
- Content-Type 指定服务器文档的MIME类型,帮助用户代理去处理接收到的数据。
- Content-Length 表示 body 的字节长度。
- Host 服务器的域名。
- User-Agent 能够用来识别发送请求的浏览器,是产品标记符和注释的清单。
- Accept 用户代理指望的MIME类型列表
- Accept-Encoding 列出用户代理支持的压缩方法
- Accept-Ranges 指望范围。参数:byte、none。
- Assess-Control-Allow-Origin 容许组织链接控制 。
- Age 对象在代理缓存中的时间
- Cache-Control 指定缓存机制
- Connection 是否保持网络链接打开状态。参数:keep-alive、close。
- ETag 特定版本资源标识符
- Expires 过时时间日期
- Server 服务器信息,如JSP、Apache等。
- Referer 可用于识别用户访问位置
Https
- Http与Https的区别
Https在传输的信息上是通过了加密的,而Http是明文传输。
-
Https运行机制
- 客户端发起 HTTPS 请求
- 服务端获取数字证书CA —— 服务器向数字证书认证机构申请获取数字证书 CA 代表服务器是合法的、无害的。
- 传送数字证书 —— 将数字证书传给客户端
- 客户端解析证书 —— 客户端向数字证书认证机构查询,验证服务器合法性。
- 客户端传输加密后的信息给服务端
- 服务端解密信息
- 服务端传输加密后的信息给客户端
- 客户端解密信息
参考连接:
- Http|MDN https://developer.mozilla.org...
- 通俗大白话来理解TCP协议的三次握手和四次分手 https://github.com/jawil/blog...
- HTTP 协议学习笔记(扫盲文)https://www.jianshu.com/p/e0a...