前言:
本系列文章主要以知识总结
为主,不是面试题,主要目的是方便自己复习以及为大家提供便利,所以大部分知识点来源于网上,侵权联系删除。如有不对的地方欢迎大家评论区批评指正,一起进步!
一、HTTP协议
HTTP1.0
定义了三种请求方法:GET
,POST
和HEAD
方法HTTP1.1
新增了五种请求方法:OPTIONS
,PUT
,DELETE
,TRACE
和CONNECT
http/1.1
规定了以下请求方法(注意,都是大写
):
GET
: 请求获取Request-URI
所标识的资源POST
: 一般用于修改Request-URI
的资源HEAD
: 请求获取由Request-URI
所标识的资源的响应消息报头PUT
: 请求服务器存储一个资源DELETE
: 请求服务器删除对应所标识的资源TRACE
: 请求服务器回送收到的请求信息,主要用于测试或诊断CONNECT
: 建立连接隧道,用于代理服务器OPTIONS
:CORS
跨域请求的预检请求;
1. GET和POST的请求的区别
GET和POST的区别主要有以下几点:
-
应用场景:
-
GET请求: 用于请求获取
Request-URI
所标识的资源,是一个幂等的请求。通常用于不对服务器资源产生影响的场景,如请求网页资源。 -
POST请求: 用于修改
Request-URI
的资源,不是一个幂等的请求。一般用于对服务器资源产生影响的操作,如用户注册。
-
-
缓存:
-
GET请求: 浏览器通常会对GET请求进行缓存。
-
POST请求: 浏览器很少对POST请求进行缓存。
-
-
安全性:
-
GET请求: 参数通常附加在URL中,不太安全,因为URL可能会被保存在浏览器历史记录中。
-
POST请求: 参数在请求体中,相对较安全。
-
-
请求长度:
-
GET请求: 受浏览器对URL长度的限制,传输的数据较少。
-
POST请求: 无浏览器限制,适合传输大量数据。
-
-
参数类型:
-
GET请求: 参数传递以查询字符串形式在URL中,对数据类型有限制。
-
POST请求: 参数传递在请求体中,支持多种数据类型。
-
-
编码角度:
-
GET请求: 只能进行URL编码,对参数类型有限制。
-
POST请求: 支持多种编码类型,不限制参数类型。
-
2. POST和PUT请求的区别
POST和PUT请求的区别主要在于资源的处理方式:
-
PUT请求: 用于向服务器存储一个资源,请求中的数据是对目标资源的完整替代。
-
POST请求: 用于向服务器提交数据,通常导致在服务器上创建新的资源。请求中的数据是附加到目标资源上的。
3. OPTIONS请求方法及使用场景
OPTIONS请求方法: 用于请求获取由Request-URI
标识的资源在请求/响应的通信过程中可以使用的功能选项。
使用场景:
-
获取服务器支持的所有HTTP请求方法;
-
检查访问权限,特别在CORS跨域资源共享中,用于预检请求。
4. 常见的HTTP请求头和响应头
HTTP Request Header 常见的请求头:
Accept
:浏览器能够处理的内容类型Accept-Charset
:浏览器能够显示的字符集Accept-Encoding
:浏览器能够处理的压缩编码Accept-Language
:浏览器当前设置的语言Connection
:浏览器与服务器之间连接的类型Cookie
:当前页面设置的任何CookieHost
:发出请求的页面所在的域Referer
:发出请求的页面的URLUser-Agent
:浏览器的用户代理字符串
HTTP Responses Header 常见的响应头:
Date
:表示消息发送的时间,时间的描述格式由rfc822
定义server
:服务器名称Connection
:浏览器与服务器之间连接的类型Cache-Control
:控制HTTP
缓存content-type
:表示后面的文档属于什么MIME
类型
常见的 Content-Type 属性值有以下四种:
application/x-www-form-urlencoded
:浏览器的原生form
表单,如果不设置enctype
属性,那么最终就会以application/x-www-form-urlencoded
方式提交数据。该种方式提交的数据放在body
里面,数据按照key1=val1&key2=val2
的方式进行编码,key
和val
都进行了URL
转码。multipart/form-data
:该种方式也是一个常见的POST
提交方式,通常表单上传文件时使用该种方式。application/json
:服务器消息主体是序列化后的JSON
字符串。text/xml
:该种方式主要用来提交XML
格式的数据。
5. HTTP 1.0 和 HTTP 1.1 之间有哪些区别?
HTTP 1.0和 HTTP 1.1 的区别:
-
连接方面: HTTP1.0默认非持久连接,HTTP1.1默认持久连接。
-
资源请求方面: HTTP1.1引入了range头域,支持资源的部分请求。
-
缓存方面: HTTP1.1引入更多缓存控制策略,如Etag、If-Unmodified-Since等。
-
Host字段: HTTP1.1新增Host字段,允许多域名共享同一IP地址。
-
请求方法: HTTP1.1新增了PUT、HEAD、OPTIONS等请求方法。
6. HTTP 1.1 和 HTTP 2.0 的区别
HTTP 1.1 和 HTTP 2.0 的主要区别:
-
二进制协议: HTTP2.0是二进制协议,头信息和数据体都是二进制帧。
-
多路复用: HTTP2.0实现了多路复用,允许多个请求同时在一个连接中进行。
-
数据流: HTTP2.0引入了数据流的概念,每个请求或回应都是一个独立的数据流。
-
头信息压缩: HTTP2.0使用头信息压缩机制,减少带宽占用。
-
服务器推送: HTTP2.0允许服务器推送资源给客户端,提高性能。
7.HTTP 3.0 有哪些改进
HTTP 3.0的改进主要基于QUIC协议:
-
快速握手: QUIC协议实现了快速握手,减少了握手时间。
-
可靠传输: QUIC在UDP基础上实现了可靠传输,解决了TCP中的队头阻塞问题。
-
TLS加密: QUIC集成了TLS1.3,提高了安全性。
-
拥塞控制: QUIC实现了拥塞控制机制,包括慢启动和拥塞避免。
-
多路复用: QUIC实现了多路复用,每个请求在QUIC中被定义为一个独立的流。
-
服务器推送: HTTP 3.0继续支持服务器推送,提前向客户端推送资源。
总结: HTTP 3.0在性能、安全性和多路复用方面有了显著的改进,基于QUIC协议的特性使得它更适合应对现代网络环境的需求。
二、HTTPS协议
HTTPS(Hypertext Transfer Protocol Secure)是一种通过计算机网络进行安全通信的传输协议。它通过在HTTP协议上引入SSL/TLS协议来加密数据包,确保通信的隐私性和完整性。下面对HTTPS的一些特点进行进一步说明:
-
明文传输和加密: HTTP协议采用明文传输,容易受到信息窃听、篡改、劫持的风险。而HTTPS通过SSL/TLS加密通信,提供了身份认证、信息加密和完整性校验,有效避免了这些问题。
-
SSL/TLS工作原理: SSL/TLS协议是在TCP和HTTP之间的一层安全协议。它主要依赖于散列函数、对称加密和非对称加密等基本算法。这些算法在建立连接、密钥协商和数据传输过程中起到关键作用,确保通信的安全性。
-
HTTPS与HTTP区别: 主要区别在于安全性。HTTPS是加密传输、身份认证的网络协议,相对于HTTP更为安全。HTTPS还对搜索引擎友好,有利于网站的SEO。标准端口也不同,HTTPS使用443端口,而HTTP使用80端口。此外,使用HTTPS需要SSL证书,而HTTP则不需要。
-
HTTPS握手过程: 握手是建立安全连接的过程。客户端向服务端发送支持的加密算法列表和随机数,服务端返回证书和自己的随机数,客户端验证证书合法性后生成一个随机数并通过服务端的公钥加密传输到服务端,最终双方根据这些随机数生成对称密钥,用于后续的数据加密传输。
三、HTTP常见状态码补充
1、常见的状态码类别
HTTP状态码分为五个类别,每个类别用一个数字的第一个数字表示:
- 1xx:
信息性
状态码,表示服务器正在处理请求
,请求进行中 - 2xx:
成功
状态码,表示请求被成功接收
、理解和处理
- 3xx:
重定向
状态码,跳转
状态,表示需要进一步的操作以完成请求 - 4xx:
客户端错误
状态码,表示请求包含错误
或无法完成
- 5xx:
服务器错误
状态码,表示服务器
在处理请求时发生了错误
2、常见的状态码
- 200 OK:表示请求
成功
,服务器
已成功处理了请求
- 301 Moved Permanently:永久
重定向
,请求的资源
已被永久移动
到新位置 - 400 Bad Request:
客户端
发送的请求有错误,服务器
无法处理 - 404 Not Found:所请求的资源
不存在
- 500 Internal Server Error:
服务器
遇到了意料不到的情况,导致无法完成请求 比如你的代码中可能写错了等等
3. HTTP状态码 301 和 302
-
301 Moved Permanently: 表示永久重定向。客户端收到301状态码后,会缓存重定向的地址,之后不再向原地址发送请求,直接使用缓存的地址。适用于永久性的地址转移,比如域名变更。
-
302 Found (or Moved Temporarily): 表示临时重定向。与301不同,客户端收到302状态码后不缓存重定向地址,仍然会向原地址发送请求。适用于临时性的地址转移,比如临时跳转到活动页。
4. 从输入URL到呈现页面过程
-
URL输入: 用户在地址栏输入URL,浏览器检查并组装成完整URL。
-
缓存检查: 浏览器检查本地强缓存,如果可用直接从缓存中返回资源。
-
DNS解析: 进行DNS解析,获取域名对应的IP地址。
-
建立TCP连接: 通过三次握手建立TCP连接。
-
发送HTTP请求: 发送HTTP请求,携带上cookie和缓存标识字段。
-
负载均衡: 服务端可能进行负载均衡处理,分配给对应集群中的服务器。
-
服务器返回响应: 服务器根据请求头的缓存标识判断是否使用缓存,返回304或资源和200状态码。
-
浏览器接收HTTP响应: 根据connection: keep-alive的值选择断开TCP连接或保持。
-
构建DOM树、CSSOM树和渲染树: 分别构建DOM节点树、CSSOM树,然后合并构建渲染树。
-
布局、绘制和渲染: 将渲染树布局在屏幕上的正确位置,然后绘制所有节点,最终渲染到屏幕上。
四、TCP和UDP补充
1.TCP、UDP 的特点
TCP
和UDP
都是传输层协议,他们都属于TCP/IP协议族
:TCP
是一个面向连接的传输层
协议。是可靠的、基于字节流的;TCP
还具有超时重传
、拥塞控制
的机制;- 而
UDP
是一个无连接的传输层
协议。
2.TCP、UDP 的区别
3. UDP协议为什么不可靠?
-
不保证消息交付: UDP不提供消息确认、重传,无超时机制,因此不保证消息一定能够被成功交付。
-
不保证交付顺序: UDP不设置包序号,不进行重排,因此不保证消息按照发送顺序被接收。
-
不跟踪连接状态: UDP是无连接的,不需要建立连接或维护状态,因此无法跟踪连接状态。
-
不进行拥塞控制: UDP不内置客户端或网络反馈机制,不会调整发送速率来适应网络状况,因此无拥塞控制。
4. TCP的重传机制
- 基于时间和确认信息: TCP提供可靠数据传输服务,通过两种独立的机制来完成重传。一是基于时间,即设置定时器,若在规定时间内未收到ACK,则重传。二是基于确认信息,即接收方收到数据后发送确认,发送方在收到确认前定时器未超时,如果超时则重传。
5. TCP的拥塞控制机制
-
慢启动: 在开始时,窗口大小较小,随着时间的推移,逐渐增大拥塞窗口,直到达到慢启动阈值。
-
拥塞避免: 一旦判断网络出现拥塞,将慢启动阈值设置为出现拥塞时的一半,并将拥塞窗口设为1,再重新开始慢启动算法。
-
快速重传和快速恢复: 接收方连续收到三个重复的ACK时,发送方立即进行快速重传。快速恢复是在快速重传后,不再执行慢启动,而是执行拥塞避免。
6. TCP的三次握手和四次挥手
-
三次握手: 用于建立连接,客户端发送SYN报文,服务端回复SYN和ACK报文,客户端再回复ACK报文,连接建立。
-
四次挥手: 用于断开连接,客户端发送FIN报文,服务端回复ACK报文,服务端发送FIN报文,客户端回复ACK报文。至此,连接断开。
-
三次握手过程中是否可以携带数据: 第一次和第二次握手不可以携带数据,而第三次握手时,因为客户端已经处于已建立连接状态,可以携带数据。
题外话:
最近朋友开发了个副业网站(https://gaoqian.xwbdktzm.top/#/),分享给准备做副业的铁子们,里面有各样的网创项目,如果进不去的可以试下。如果觉得用不着的直接忽略。