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

不论是在工做仍是面试中,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 协议族内的其它众多协议相同,用于客户端和服务器之间的通讯cookie

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

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能够一对一,一对多,多对一

相关文章
相关标签/搜索