目录
- 1 浏览器输入 URL 后 HTTP 请求返回的完整过程
- 2 网络协议分层
- 3 HTTP 协议历史
- 4 HTTP 的三次握手
- 5 URI、URL 和 URN
- 6 HTTP 报文格式
- 7 使用 node 创建一个 HTTP 服务
1 浏览器输入 URL 后 HTTP 请求返回的完整过程

说明:
-
1、Redirect:因为浏览器可能已经记录了你要访问的地址 URL,已经需要跳转到新的地址 URL,所以,浏览器首先需要判断是否应该 Redirect 跳转;
-
2、App cache:是否有缓存,如果没有缓存,可需要去请求服务器;
-
3、DNS:域名解析成对应的 IP 地址,才能访问到服务器
-
4、TCP:有了 IP,就可以创建 TCP 连接,需要 3 次握手,才能把 TCP 创建起来;如果是 https,那还需要创建一个 https 连接,跟 TCP 3 次握手又不太一样,因为 https 中间要有保证传输安全的过程;HTTP 的发送,是在 TCP 连接的基础之上的。
-
5、Request:连接创建成功后,才真正可以发送 HTTP 请求数据包;
-
6、Response:服务器接受到数据包后,操作完成,返回请求需要的数据;
2 网络协议分层

说明:
-
1、应用层:
为应用软件提供了很多服务;构建于 TCP 协议之上;
屏蔽网络传输相关的细节;
-
2、传输层:
有两个协议,TCP 和 UDP 协议,一般会选择 TCP 协议,因为更可靠,帮我们去传输数据;向用户提供可靠的端到端(End-To-End)服务;
传输层向高层屏蔽了下层数据通信的细节;
简单理解:在传输层,传输的数据大或者小,大了如何分片、打包,数据传输的处理,都是在传输层做的;
-
3、网络层:数据在结点之间传输创建逻辑链路;(例:如何去访问到百度的服务器所在的地址,这里一个逻辑关系,是在网络层实现的)
-
4、数据链路层:在通信的实体间建立数据链路连接;(有了物理设备,数据也要通过这些物理设备建立起电路,进行数据传输,如:0101...)
-
5、物理层:定义物理设备如何去传输数据;(电脑硬件、网卡端口、网线、光缆等等)
3 HTTP 协议历史
-
HTTP / 0.9
只用一个命令 GET
没有 HEADER 等描述数据的信息
服务器发送完毕,就关闭 TCP 连接;
注意:这里的 TCP 连接,跟 HTTP 连接不是同一个概念,同一个 TCP 连接,对应的是多个 HTTP 请求,而一个 HTTP 请求,它是在某一个 TCP 连接里面进行发送;
-
HTTP / 1.0
增加了很多命令
增加 status code 和 header
多字符集支持、多部分发送、权限、缓存等
-
HTTP / 1.1
持久连接
pipeline
增加 host 和其他的一些命令
-
HTTP2
所有的数据以二进制传输
同一个连接里面发送多个请求不再需要按照顺序来(并行,解决串行请求问题)
头信息压缩以及推送等提高效率的功能
4 HTTP 的三次握手
客户端与服务端进行 HTTP 请求与响应,是需要在 TCP 连接的基础之上的,因为 HTTP 是不存在连接的概念,它只有请求和响应的概念,请求和响应都是数据包,他们之间的传输是需要进行一个传输的通道,而这个通道是通过 TCP 建立起来的连接。

HTTP 连接的三次握手

为什么要进行三次握手尼?
为了防止服务端开启一些无用的连接,因为网络传输是有延时的,如果客户端发送一个请求给服务器端,服务端直接发送数据给客户端, 这个数据包有可能因为网络的原因丢失了,所以,客户端就无法接受到服务器返回的数据,则,客户端可能会关闭这个连接,重新发起一个新的请求,而服务端是不知道客户端有没有接受到数据的这个过程。
如果没有第三次握手的话,服务端也不知道客户端有没有接受到这个信息,并且也无法确定到底是要关闭或者保持这个连接,服务端就会一直开着这个端口,等待客户端来发送请求,它是无法确定这个连接是否失败,所以,需要三次握手,来让客户端和服务端及时的知道该连接是否由于网络问题,而出现错误,避免资源浪费;
5 URI、URL 和 URN
-
URI
Uniform Resource Identifier / 统一资源标识符
用来唯一标识互联网上的信息资源
包括 URL 和 URN
-
URL
Uniform Resource Locator / 统一资源定位器
http://user:pass@host.com:80/path?query=string#hash
此类格式都是叫 URL,如 ftp 协议
-
URN (了解)
永久统一资源定位符
在资源移动之后还能被找到
目前还没有非常成熟的使用方案
6 HTTP 报文格式

请求报文首行信息包括,方法、URL、 HTTP 协议和版本
相应报文首行信息包括,HTTP 协议、状态码、状态码语义
-
HTTP 方法
常用:GET、POST、PUT、DELETE -
HTTP Code
7 使用 node 创建一个 HTTP 服务
service.js:
const http = require('http');
http.createServer(function (request, response) {
console.log('request', request.url);
response.end('1111')
}).listen(8888)
console.log('server listing 8888');
运行:node service.js
网友评论