本篇文章侧重于前端计算机网络的应用,如果需要了解更详细的计算机网络五层结构,可见计算机网络基础

GET和POST请求的区别

GETPOST请求是前端请求中最常见的方法,其区别在于:

  1. 缓存方面:GET请求可被浏览器缓存,POST请求通常不被缓存
  2. 参数携带方面:GET请求通过查询参数传递参数,需要在url中携带,如?xxx=xxxPOST请求将参数包含在请求体中
  3. 数据透明性:查询传参的方式造成了GET请求的参数是透明的而POST请求的参数是不透明的

这些差别使得两者的使用场景有所差别,GET适用于一些不需要特地保护数据隐私的场合而POST适用于相对敏感的数据操作场景,如表单提交等。并且,GET请求通常不涉及对服务端资源的修改而POST请求往往包含可能修改服务端资源的信息

POST和PUT请求的区别

POSTPUT请求本质上都涉及对数据的修改,但POST请求是非等幂请求(可能会改变数据种类或新增数据之类的请求),而PUT是等幂请求(不会改变数据种类,只对现有数据进行修改),因此,多个POST请求可能会创建多份资源而PUT请求只会创建一个资源

顺带一提,GET也是非等幂请求

常见的HTTP请求头和响应头

先来回顾一下HTTP请求与响应的结构吧,以请求为例,一个请求结构中包含:

  • 请求行:包括请求URL,请求方法,状态码,远程服务器地址,http版本等
  • 请求头:包括请求的相关信息
  • 请求体:请求中携带的具体数据

其中请求行和请求体没什么可说的,一个记录宏观信息,一个携带具体内容,下面主要来讲一讲常见请求头和响应头

  • Accept:浏览器能够处理的内容类型
  • Accept-Charset:浏览器能够显示的字符集
  • Accept-Encoding:浏览器能够处理的压缩编码
  • Accept-Language:浏览器当前设置的语言
  • Connection:浏览器与服务器之间连接的类型
  • Cookie:当前页面设置的任何Cookie
  • Host:发出请求的页面所在的域
  • Referer:发出请求的页面的URL
  • User-Agent:描述客户端的信息
  • Date:表示消息发送的时间,时间的描述格式由rfc822定义
  • server:服务器名称
  • Connection:浏览器与服务器之间连接的类型
  • Cache-Control:控制HTTP缓存行为
  • Content-Length:响应数据长度
  • content-type:指定返回的数据类型
  • Set-Cookie:用于在客户端设置Cookie

状态码304的含义

HTTP协议的状态码中,3XX开头一般表示重定向相关操作,但304 Not Modified表示的是条件请求,其核心在于,服务器会优先根据缓存对该请求内容进行判断,如果两次请求内容相同,则直接调用缓存的资源,从而优化性能,提高浏览器访问速度

304状态码的利弊:

  • 304的优势在于直接调取本地缓存资源,从而提升访问速度
  • 其劣势在于由于浏览器搜索引擎会根据网站更新频率提高其权重,所以大量304会导致网站访问的优先级降低

304状态码和200状态码的区别

  • 304返回的是本地缓存的资源,只有响应头,没有响应体部分
  • 200则会返回包含完整内容的响应资源

HTTP/1.0和HTTP/1.1之间的区别

HTTP/1.0:采用非持久连接,每次请求时都会创建一个独立的TCP连接,请求结束后立即关闭连接,无法复用连接,导致延迟较大
HTTP/1.1新增特性:

  • 持久连接:默认采用持久连接connection:keep-alive
  • 管线化:支持在同一个连接内发送多个请求,无需等待前一个请求完成
  • 增强缓存机制:新增了更复杂的缓存机制
  • 增加请求方法:新增了诸如PUTDELETE等请求方法
  • 新增了host字段:指定服务器的域名,解决虚拟主机技术相关问题

HTTP/1.1到HTTP/2.0做了哪些优化

  • 二进制协议:与HTTP/1.X版本不同,HTTP/2.0完全采用二进制数据进行传输,提高了数据解析效率
  • 多路复用:HTTP/2.0仍然采用管线化机制,即在同一个连接里发送多个请求,但HTTP/2.0可以同时发送和接收多个请求,从而解决了队头堵塞的问题
  • 数据流化与优先级策略:HTTP/2.0采用数据流的概念,由于HTTP/2.0的数据包不是按顺序发送的,所以对数据包进行标记,从而确定其所属的请求,同时还可以通过标记指定数据流的优先级
  • 头部压缩:压缩一些需要反复发送的头部资源,从而节省网络传输体积
  • 服务器推送:服务器可以主动向客户端推送一些资源,而无需等待请求