前端面试-Http那些事儿(图解Http)

2,993 阅读7分钟

不管是在工作还是面试中,Http这一块的知识,对于每个前端开发都是必备的。这篇笔记,是个人在学习 图解Http 这本书的时候,记录一些平时工作面试中,用得比较多的知识点,拿出来和大家分享一下。所有图片取材都源于 图解 Http,文章仅供个人学习使用。

一. 网络基础

1.1 TCP/IP 协议族

计算机与网络设备要相互通信,双方就必须基于相同的方法。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。 像这样把与互联网相关联的协议集合起来总称为TCP/IP。也有说法认为,TCP/IP是指TCP和IP这两种协议。还有一种说法认为,TCP/IP是在IP协议的通信过程中,使用到的协议族的统称。

1.2 TCP/IP 的分层管理

  • 应用层:直接跟用户接触,向用户提供应用服务
    • Http协议,DNS域解析
  • 传输层:TCP,UDP 提供两台计算机之间的传输
    • TCP或者UDP
  • 网络层:在众多的选项内选择一条传输路线
    • IP
  • 链路层:用来处理连接网络的硬件部分

1.3 TCP/IP 通信传输流

  • 利用TCP/IP 协议族进行网络通信时,会通过分层顺序与对方通信。

  • 发送端在层与层之间传输数据时,每经过一层,必定会打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,没经过一层会把对应的首部消去

1.4 TCP 的三次握手

三次握手是由发送端发起的,在发送数据之前,发送端会给接收端发送一个确认消息,当接收端接到发送端的消息并且做出回应之后,发送端才会开始数据的传输

1.5 DNS 域解析

DNS(Domain Name System) 服务是和 HTTP 协议一样位于应用层的协议,它提供域名到 IP 之间的解析服务

1.6 HTTP协议通信流程

1.7 URL/URI

URI(Uniform Resource Iden-tifier):统一资源定位符,标识某一互联网上面的资源

URL(Uniform Resource Locator): 统一资源地址,标识资源的位置

  • URI格式

二. HTTP协议

2.1 HTTP的作用

HTTP协议和 TCP/IP 协议族内的其它众多协议相同,用于客户端和服务器之间的通信

请求访问的一端称为客户端,提供资源响应的一端称为服务端

2.2 无状态协议

http 是一种不保存状态,即无状态的协议

在调用过程中,对请求和响应都不做持久化处理

优点:

  • 更快的处理大量事物
  • 确保协议的可伸缩性

缺点:

  • 某些请求或者登陆状态需要保持状态

2.3 Http的请求方法

GET : 主要用来获取资源,参数包含在URL中可见,所以安全性比较差,浏览器对GET方法的参数长度有限制

POST :主要用来获取和传输资源,参数包含在请求体中,且参数长度比GET大的多,对外不可见,相对较为安全,

PUT :向服务器提交数据,更新服务器资源

DELETE :删除服务器数据

HEAD :获取报文首部

2.4 持久化连接

问题: 在 Http 最初的版本中,没进行一次 Http 通信都会断开一次连接,因此当请求过多的时候,都会造成无谓的通信开销

解决: Http/1.1 提出了持久连接的概念

持久连接: 持久连接的特点是,只要任意一方没有明确提出断开连接,就保持TCP连接状态

优点: 持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了

2.5 Cookie

前面说过,Http是无状态的

  • 没有Cookie状态下的请求

  • 第2次以后(有了Cookie)请求

  • 报文说明

三. HTTP报文

Http 包含请求报文和响应报文,通过依赖这两种报文来达到信息的资源的请求和响应

3.1 请求报文和响应报文的结构

请求报文:

  • 请求行:请求方法,协议名,版本号,请求URI
  • 请求头部
  • 空行
  • 请求体

响应报文

  • 状态行:协议名,版本号,返回的状态码
  • 响应头部
  • 空行
  • 响应体

3.2 报文实例

四. HTTP首部

​ 请求头参数:

​ Content-type

​ Host

​ Connection

​ Content-length

​ cookie

​ Date

​ last-modify

​ cache-control

HTTP 首部是构成HTTP报文的要素之一

在HTTP通信过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外信息的作用

4.1 首部分类

  1. 通用首部字段:请求报文和相应报文都会使用的

  1. 请求首部字段

  1. 响应首部字段

  1. 实体首部字段:补充了资源内容的更新时间等实体相关的信息

五. HTTP状态码

状态码表示客户端请求的返回结果

状态码中的第一位指定响应类别,后两类无分类

  • 状态码类别

5.1 常见状态码

  • 200:OK,请求成功,请求被正常处理
  • 204:请求成功,但是没有资源返回
  • 301:永久性重定向
  • 302:临时性重定向
  • 403:服务器拒绝访问
  • 404:无法找到请求资源
  • 500:服务器错误

六. HTTP缓存处理

缓存是指代理服务器内保存的资源副本,利用缓存可以减少对服务器的访问,因此也就节省了通信流量和通信时间

缓存是服务器是代理服务器的一种,当代理转发从服务器返回的资源时,代理服务器会返回一份资源的副本

6.1 缓存服务器

6.2 客户端缓存

缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中。把客户端缓存称为临时网络文件

另外,和缓存服务器相同的一点是,当判定缓存过期后,会向源服务器确认资源的有效性。若判断浏览器缓存失效,浏览器会再次请求新资源。

6.3 缓存有效期

6.4 缓存相关设置

  • 强缓存:
    • Cache-Control
    • Expires
    • Pragma:在 HTTP 1.1中已经被废弃
  • 协商缓存:
    • ETag/If-Not-Match
    • Last-Modified/If-Modified-Since

6.5 浏览器首次和再次发送请求的执行流程图

浏览器首次发送请求

浏览器再次发送请求

参考文章:简书:一文读懂http缓存

七. 其它问题

7.1 GET和POST的区别

  1. GET请求的参数包含在URL中,对外可见,所以安全性较差,POST请求的参数包含在请求体中,对外不可见,相对安全
  2. 浏览器会主动缓存GET请求的相关资源,但是对于POST,浏览器不会主动缓存,除非手动设置
  3. GET请求的参数有长度限制,但是POST没有
  4. GET请求在浏览器回退时是无害的,但是POST会重新发送请求
  5. GET请求的参数,会被保存在浏览器的历史记录里面,但是POST不会

7.2 TCP和UDP的区别

TCP: 三次握手,稳定性强,数据可靠,速度慢,占用系统资源高,适合少量的数据传输

UDP:

总结:

​ - TCP面向连接,UDP是无连接的,即发送数据之前不需要建立连接

​ - TCP提供可靠的服务,即TCP连接传送的数据,无差错,不丢失。UDP尽最大努力交付,但是不保证数 据的可靠性

​ - TCP只能是一对一,UDP可以一对一,一对多,多对一