CORS 预检请求
对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨源请求。服务器确认允许之后,才发起实际的 HTTP 请求。
简单请求
非复杂请求的为简单请求; 原则是:请求不是以更新(添加、修改和删除)资源为目的,服务端对请求的处理不会导致自身维护资源的改变
- 使用下列方法之一:
- GET
- HEAD
- POST
- 除了被用户代理自动设置的标头字段(例如 Connection、User-Agent 或其他在 Fetch 规范中定义为禁用标头名称的标头),允许人为设置的字段为 Fetch 规范定义的对 CORS 安全的标头字段集合。该集合为:
- Accept
- Accept-Language
- Content-Language
- Content-Type(需要注意额外的限制)
- Range(只允许简单的范围标头值 如 bytes=256- 或 bytes=127-255)
- Content-Type 标头所指定的媒体类型的值仅限于下列三者之一:
- text/plain
- multipart/form-data
- application/x-www-form-urlencoded
- 如果请求是使用 XMLHttpRequest 对象发出的,在返回的 XMLHttpRequest.upload 对象属性上没有注册任何事件监听器;也就是说,给定一个 XMLHttpRequest 实例 xhr,没有调用 xhr.upload.addEventListener(),以监听该上传请求。
- 请求中没有使用 ReadableStream 对象。
HTTPS 是什么
HTTPS 是在 HTTP 和 TCP 之间建立了一个安全层,HTTP 与 TCP 通信的时候,必须先进过一个安全层,对数据包进行加密,然后将加密后的数据包传送给 TCP,相应的 TCP 必须将数据包解密,才能传给上面的 HTTP。
三次握手和四次挥手 ⚡


为什么需要三次握手和四次挥手?
保证连接的可靠性和完整性 在网络通信中,保证连接的可靠性和数据的完整性很重要。通过三次握手,双方可以建立起可靠的连接。而通过四次挥手,双方可以安全地关闭连接,保证数据的完整传输。
处理网络异常和延迟情况
在实际网络环境中,存在各种可能导致通信异常的情况,比如网络延迟、丢包等。三次握手和四次挥手的目的就是为了保持连接的稳定性和可靠性。
- 处理网络延迟:通过三次握手,可以减少因网络延迟而导致的连接建立问题,双方都确认。
- 处理丢包情况:在网络通信中,数据包可能会因为各种原因丢失。通过四次挥手过程,可以保证数据完整,这其中序列号起了很大作用。
- 处理半开连接问题:如果没有四次挥手过程,可能会导致半开连接的情况,即一方已经关闭连接,但另一方仍然在发送数据。
- 处理连接复用问题:在一些场景下,需要复用已经建立的连接来提高效率。四次挥手可以避免这一类的问题发生。
OSI七层模型和TCP/IP四层模型
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层物理层
TCP/IP 四层概念:
- 应用层:应用层、表示层、会话层:HTTP
- 传输层:传输层:TCP/UDP
- 网络层:网络层:IP
- 数据链路层:数据链路层、物理层
http 响应头
- ETag(实体标签):ETag是一个由服务器分配给文件的唯一标识符。它通常是根据文件内容计算的散列值或指纹。当客户端发送请求时,可以将上一次获取的ETag值包含在请求头中的If-None-Match字段中。如果服务器检测到该文件的ETag与客户端提供的ETag相匹配,则返回一个特殊的状态码(如304 Not Modified),表示文件没有发生变化,客户端可以使用缓存副本。:
- Last-Modified(上次修改时间):Last-Modified是文件在服务器上的最后修改时间。服务器在响应头中包含Last-Modified字段,客户端可以将上一次获取的Last-Modified值包含在请求头中的If-Modified-Since字段中。如果服务器检测到文件的修改时间与客户端提供的时间相同或更早,则返回特殊状态码(如304 Not Modified)。
OSI
OSI(Open Systems Interconnection)参考模型是一种网络通信协议体系结构,用于描述计算机网络中不同层次的功能和协议。它是国际标准化组织(ISO)在20世纪80年代初制定的,并于1984年正式发布。OSI模型将网络通信过程分解为七个不同的层次,每个层次负责特定的功能,并通过接口与上层和下层进行交互。下面是对每个层次的详细解释:
- 物理层(Physical Layer):物理层是最底层的层次,它定义了网络硬件设备如何传输原始比特流,包括电压、电流和物理介质等。它处理物理连接、电气特性和传输速率等问题。
- 数据链路层(Data Link Layer):数据链路层负责在相邻节点之间传输数据帧,并提供了一种错误检测和纠正机制,以确保可靠的数据传输。它还处理物理地址(MAC地址)的寻址和访问控制。
- 网络层(Network Layer):网络层处理分组(Packet)的传输,它定义了路由选择和逻辑地址(IP地址)的格式和解释。它负责将分组从源主机传输到目标主机,并通过路由器进行转发和路径选择。
- 传输层(Transport Layer):传输层提供端到端的数据传输服务,它负责将数据分割成较小的单元(数据段或报文),并确保它们按照正确的顺序和完整性到达目标主机。它还处理流量控制、拥塞控制和错误恢复等问题。
- 会话层(Session Layer):会话层建立、管理和终止会话(Session)或连接,使不同主机之间的应用程序能够进行通信。它提供了会话管理、同步和对话控制等功能。
- 表示层(Presentation Layer):表示层负责数据的格式化、加密和压缩等操作,以确保不同系统的数据能够正确解释和处理。它处理数据的语法和语义,提供了数据格式转换、数据加密和数据压缩等功能。
- 应用层(Application Layer):应用层是最高层的层次,它提供了网络应用程序与用户之间的接口。它定义了各种应用程序的协议,如电子邮件(SMTP)、文件传输(FTP)和万维网(HTTP)等。
