熟知HTTP基础

79 阅读4分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。

一、http协议

1.1 什么是http协议?

http(HyperText Transfer Protocol): 超文本传输协议:在客户端和服务器端不仅可以进行文本传输,还可以传递图片,音视频;是浏览器和服务器端之间约定好了的一种规范;双方按照规范传递和接受数据;

  • https: 加密的传输协议;更安全,在协议中增加了秘钥,不容易被拦截和篡改,大多数对安全有要求的都会使用https;

http: 就像运行在客户端和服务端的快递小哥,可以把客户端的信息传递给服务器(请求: request),然后把服务器整理好的数据通过http协议发送给服务端(响应response);

1.2 前后端交互模型

  • 在浏览器总输入一个url,到用户看到页面都经过了什么?

1.2.1 http 请求阶段

  1. 浏览器得到地址栏中的地址,发送给DNS服务器
  2. DNS服务器进行域名解析,找到域名对应的IP地址
  3. 把客户端的请求发送给上一步查出来的服务器地址

1.2.2 http 响应阶段

  1. 服务器接收到请求后,根据请求的信息,进行资源的整理,并且把响应的资源通过http返回给客户端(数据或者html、js、css文件等);
  2. 根据资源的类型不同,浏览器会进行不同的操作,如html和css进行解析渲染,js进行解析并执行;

1.2.3 浏览器的渲染阶段

  1. 解析html文件形成DOM树根据节点间关系组织树的节点关系;
  2. 解析CSS形成CSS树
  3. 把DOM树和CSS树组合形成render树
  4. 接下来交给显卡,绘制成页面;

二、http的三次握手和四次挥手

http 协议建立和断开连接时不是一次就完成的,连接时而是通过三次握手,断开时要经历4次挥手;

2.1 三次握手

  • 第一次握手:客户端发送syn码数据包给服务器,客户端要求和服务器建立连接;
  • 第二次握手:服务端接收到连接请求后,会发送ack码数据到客户端,表示你的连接请求已经收到,再次询问客户端是否确认建立连接
  • 第三次握手:客户端收到服务器的ack码后,检验是否正确,如果正确则再次发送ack给服务器,表示确认连接;
  • 三次握手如果成功,客户端和服务端的连接成功建立,才会开始传递数据;

2.2 四次挥手:

  1. 当客户端发送数据结束后,会发送fin告知服务器,客户端要给服务器的数据传输完了;
  2. 服务端返回给客户端一个ack码,告知客户端已经知道数据传递完成。客户端收到ack,就会把发送到服务端的通道关闭;
  3. 服务端数据传输结束后,也会发送fin给客户端;
  4. 当客户端收到fin后,会发送ack给服务端,表示客户端知道服务端已经发送完毕,服务器收到ack后就可以放心的关闭数据传输通道;

三、uri/urn/url

  • URI: 统一资源标识符
  • URN: 同一资源成名
  • URL: 同一资源定位符;

3.1 url各部分代表的意义

一个url的例子:

https://www.dahai.com:443/tech/ai.html?user=q1&time=1e8239473784#top
复制代码

url各部分代表的意义:

  1. http http/https: 协议
  2. www.dahai.com 域名
  3. :443 端口号 http 协议默认80,https默认443
  4. /tech/ai.html 路径
  5. ?user=q1&time=2323456 参数(可以有可以没有)放在?后面的都是告知服务器的数据
  6. #top 锚点:(哈希)

四、HTTP报文

4.1 http报文是什么?

HTTP报文用于http协议交互的信息,因为http通信分为请求和响应两个阶段,所以报文分为两种;

  • 请求报文
  • 响应报文

4.2 报文的结构:

报文分为:报文首部 空行 报文主体;

4.2.1 请求报文:

报文首部:请求首部分为请求行和请求头;请求行中包含 请求方法、协议、版本、URI 空行(CR+LF) 报文主体:客户端传递给服务端的数据

4.2.2 响应报文:

报文首部:状态行和响应头;状态行包含http协议版本,响应状态码 空行(CR+LF) 报文主体:响应体(服务端返回给客户端的数据)