「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。
http 协议
http(HyperText Transfer Protocol):
超文本传输协议:在客户端和服务器端不仅可以进行文本传输,还可以传递图片,音视频;是浏览器和服务器端之间约定好了的一种规范;双方按照规范传递和接受数据;
https: 加密的传输协议;更安全,在协议中增加了秘钥,不容易被拦截和篡改,大多数对安全有要求的都会使用 https
http: 就像运行在客户端和服务端的快递小哥,可以把客户端的信息传递给服务器(请求: request),然后把服务器整理好的数据通过 http 协议发送给服务端(响应response)
前后端交互模型
在浏览器中输入一个 url, 到用户看到页面都经历了什么?
- http 请求阶段
- 浏览器得到了地址栏中的地址,发送给DNS 服务器
- DNS 服务器进行域名解析,找到域名对应的IP地址
- 把客户端的请求发送给上一步查出来的服务器地址
- http 响应阶段
- 服务器接收到请求之后,根据请求的信息,进行资源的整理,并且吧响应的资源通过http返回给客户端(数据或者html,js,css)
- 根据资源的类型不同,浏览器会进行不同的操作,如html和css进行资源解析渲染,js进行解析并执行
- 浏览器的渲染阶段
- 解析html文件形成DOM树根据节点间关系组织树的节点关系;
- 解析css形成css树
- 把DOM树和css树形成render树
- 接下来交给显卡,绘制成页面展示
http 的三次握手与四次挥手
http 协议建立和断开连接时并不是一次完成的,连接时是通过三次握手,断开时要经历四次挥手;
三次握手
- 客户端发送syn码数据包给服务器,客户端要求与服务器建立连接
- 服务端接受连接请求后,会发送ack码数据到客户端,表示你的请求我已收到,再次询问客户端是否确认建立连接
- 客户端收到服务端传回的ack码以后,校验是否正确,如果正确则再次将ack码发送给服务端,表示确认连接
- 三次握手如果成功,客户端和服务器成功建立连接,然后开始传递数据
四次挥手
- 当客户端发送数据结束后,会发送fin告知服务器,客户端要给服务器的数据传输完毕了
- 服务端返回给客户端一个 ack码,告知客户端已经知道数据传递完成,客户端收到ack后,就会把发送到服务器的数据通道关闭
- 服务端数据传输结束后,也会发fin给客户端
- 当客户端收到f服务器传回的fin后,会把ack码传回给服务端,表示客户端已经知道服务端的数据传输完毕,服务器收到客户端传回的ack码之后就会放心的把对客户端的数据传输通道关闭
uri\urn\url
- uri: 统一资源标识符
- urn: 统一资源名称
- url: 统一资源定位符
一个url的例子
https://www.dahai.com:443/tech/ai.html?user=mabin&time=1e8239473784#top
url各个部分的意义:
- http\https : 协议
- www.baidu.com : 域名
- :443 : 端口号,(http协议默认80,https默认443)
- /tech/ai.html : 路径
- ?user=mabin&time=2323456 : 参数(可以有可以没有,放在?后面的都是告知服务器的数据)
- #top锚点 : (哈希)