海边拾贝(六)- 计算机网络篇
本篇文章侧重于前端计算机网络的应用,如果需要了解更详细的计算机网络五层结构,可见计算机网络基础
GET和POST请求的区别
GET
和POST
请求是前端请求中最常见的方法,其区别在于:
- 缓存方面:
GET
请求可被浏览器缓存,POST
请求通常不被缓存 - 参数携带方面:
GET
请求通过查询参数传递参数,需要在url
中携带,如?xxx=xxx
,POST
请求将参数包含在请求体中 - 数据透明性:查询传参的方式造成了
GET
请求的参数是透明的而POST
请求的参数是不透明的
这些差别使得两者的使用场景有所差别,GET
适用于一些不需要特地保护数据隐私的场合而POST
适用于相对敏感的数据操作场景,如表单提交等。并且,GET
请求通常不涉及对服务端资源的修改而POST
请求往往包含可能修改服务端资源的信息
POST和PUT请求的区别
POST
和PUT
请求本质上都涉及对数据的修改,但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
- 管线化:支持在同一个连接内发送多个请求,无需等待前一个请求完成
- 增强缓存机制:新增了更复杂的缓存机制
- 增加请求方法:新增了诸如
PUT
、DELETE
等请求方法 - 新增了
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
的数据包不是按顺序发送的,所以对数据包进行标记,从而确定其所属的请求,同时还可以通过标记指定数据流的优先级 - 头部压缩:压缩一些需要反复发送的头部资源,从而节省网络传输体积
- 服务器推送:服务器可以主动向客户端推送一些资源,而无需等待请求
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 chipmunk!