目录
HTTP介绍
HTTP协议主要组成部分
GET 和 POST有什么区别
常见的 HTTP 状态码有哪些
http状态码100
HTTP1.1 和 HTTP1.0 的区别有哪些
HTTPS 和 HTTP 的区别是什么
HTTP2 和 HTTP1.1 的区别是什么
HTTP3 和 HTTP2 的区别是什么
HTTPS的请求过程
对称加密和非对称加密的区别
HTTP介绍
超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP)是一种基于客户端/服务器模型的应用层协议,用于在分布式、协作式的超媒体信息系统中交换数据。HTTP是万维网(WWW)的核心通信协议,允许用户代理(如Web浏览器)与Web服务器进行通信,获取网页、图片、文件以及其他类型的资源。
HTTP协议特点:
-
请求/响应模型:客户端(浏览器)向服务器发出请求,服务器接收请求后生成并返回响应。每个请求和响应都包含起始行、头部字段和可选的主体内容。
-
无状态:HTTP协议本身不保存任何关于之前请求或会话的状态信息。如果需要维护状态,通常通过Cookie、session或其他机制实现。
-
文本格式:HTTP协议的请求和响应报文都采用ASCII文本格式,尽管现在普遍通过gzip等压缩算法来减少传输量。
-
方法多样:HTTP定义了多种请求方法,如GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)、HEAD(获取头部信息)、OPTIONS(询问服务器支持哪些方法)等。
-
状态码反馈:服务器通过状态码告知客户端请求的处理结果,如200(成功)、404(未找到资源)、500(服务器内部错误)等。
-
可扩展性:HTTP协议允许通过首部字段添加附加信息,这些信息可以影响请求或响应的行为,也可以用于内容协商、缓存控制、身份验证等。
-
安全增强:HTTPS是HTTP的安全版本,通过SSL/TLS协议对HTTP通信进行加密,提供数据传输的隐私保护和完整性校验。
随着时间的推移,HTTP协议经历了多次版本迭代,从最早的HTTP/1.0到如今广泛使用的HTTP/1.1,再到性能更强的HTTP/2和HTTP/3。HTTP/2引入了多路复用、二进制分帧等新特性,大大提高了网页加载速度;而HTTP/3则采用了QUIC协议作为传输层,进一步优化了连接性能和安全性。
HTTP协议主要组成部分
HTTP(Hypertext Transfer Protocol)协议由以下几个主要部分组成:
-
请求(Request)
- 请求行(Request Line):包括方法(Method,如GET、POST、PUT、DELETE等)、请求URI(Uniform Resource Identifier)和HTTP协议版本。
- 请求头部(Request Headers):一系列键值对,包含诸如Host、Accept、Content-Type、Authorization、Cookie等信息,用于描述请求的更多细节。
- 空行:请求头部结束后,有一个空行作为分隔。
- 请求主体(Request Body):可选部分,用于承载请求数据,例如在POST或PUT请求中提交的数据。如果是GET请求,通常没有请求主体。
-
响应(Response)
- 状态行(Status Line):包括协议版本、状态码(Status Code,如200 OK、404 Not Found等)和状态描述。
- 响应头部(Response Headers):类似于请求头部,但也包含服务器特有的信息,如Server、Date、Location、Set-Cookie等。
- 空行:响应头部结束后同样有空行作为分隔。
- 响应主体(Response Body):承载返回给客户端的数据,可能是HTML文档、JSON对象、图像、音频等资源。
GET 和 POST有什么区别
HTTP协议中的GET和POST是两种最常见的HTTP方法(或称谓HTTP动词),它们都是客户端向服务器发送请求的方式,用于从服务器获取数据或向服务器提交数据。
-
GET
- 作用:GET方法是用来从服务器获取资源的,是最常见的HTTP方法,用于获取指定URI(统一资源标识符)所指向的资源。
- 特点:
- 安全:GET请求通常被认为是安全的,因为它只是获取数据,不会对服务器数据产生改动。
- 幂等性:多次执行同样的GET请求将会得到相同的结果(除非资源本身发生改变)。
- 可见性:所有请求参数都会附在URL之后,可通过浏览器地址栏查看。
- 缓存:GET请求的响应可以被缓存。
- 数据量:由于参数直接写在URL中,因此GET请求的数据量有限,不适合大数据量传输。
-
POST
- 作用:POST方法用于向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中提交给服务器。
- 特点:
- 不安全:POST请求可能会引起服务器数据的变化,例如创建新的资源或更新已有资源。
- 非幂等性:多次执行同样的POST请求可能会导致服务器状态的不同结果,如资源被多次创建。
- 隐藏性:POST请求的参数在请求体中传输,而不是URL,提高了数据私密性和安全性。
- 数据量:POST请求的数据量没有硬性限制,可以用来传输大量数据。
- 缓存:POST请求默认情况下不会被缓存。
- 其他方法:
-
PUT
- 用途:用于向指定资源位置上传其最新内容或创建新资源(如果资源不存在)。请求体包含完整的资源表示。
- 特性:PUT方法是幂等的,发送同一个请求多次会产生同样的效果(只要请求体内容相同)。
-
DELETE
- 用途:请求服务器删除指定的资源。
- 特性:DELETE方法也是幂等的,多次发出相同的请求会删除指定资源,不会有其他影响。
-
HEAD
- 用途:类似于GET,但只请求服务器返回响应头信息,不返回响应体内容。用于获取资源的元信息。
-
OPTIONS
- 用途:用于获取服务器支持的HTTP方法列表,或者获取特定资源的通信选项。
-
PATCH
- 用途:用于对资源进行局部更新,发送资源的部分修改内容。
-
CONNECT
- 用途:请求代理服务器建立到目标服务器的隧道。
-
TRACE
- 用途:让服务器端将收到的请求原样返回给客户端,用于诊断或测试。
-
这些方法是HTTP协议的重要组成部分,它们定义了客户端和服务器之间如何交互以操作资源。在RESTful架构中,这些方法更是有着严格的语义和用途。
常见的 HTTP 状态码有哪些
HTTP状态码是HTTP协议中定义的三位数字代码,用于表示服务器对客户端HTTP请求的响应结果。以下是一些常见的HTTP状态码及其含义:
-
成功状态码(2xx)
- 200 OK:请求已成功,请求的数据或资源已成功加载并返回。
- 201 Created:请求已成功,并且服务器创建了一个新的资源。
- 202 Accepted:服务器已接受请求,但尚未完成处理(异步操作)。
- 204 No Content:服务器成功处理了请求,但没有返回任何内容(不包含响应体)。
-
重定向状态码(3xx)
- 301 Moved Permanently:永久重定向,请求的资源已被永久移动到新的URI。
- 302 Found:临时重定向,请求的资源临时存在于另一个URI。
- 304 Not Modified:客户端缓存有效,资源自上次请求以来未被修改过。
-
客户端错误状态码(4xx)
- 400 Bad Request:客户端请求有语法错误,服务器无法理解。
- 401 Unauthorized:请求未经授权,需要有效的身份验证凭证。
- 403 Forbidden:服务器理解请求,但是拒绝执行,通常是因为权限不足。
- 404 Not Found:请求的资源在服务器上未找到。
- 405 Method Not Allowed:请求方法不被允许(如尝试对只允许GET的资源执行POST操作)。
-
服务器错误状态码(5xx)
- 500 Internal Server Error:服务器遇到了意外情况,无法完成请求。
- 501 Not Implemented:服务器不支持请求的功能,无法完成请求。
- 502 Bad Gateway:服务器作为网关或代理时,收到了无效响应。
- 503 Service Unavailable:服务器暂时无法处理请求,可能是因为过载或正在进行维护。
- 504 Gateway Timeout:服务器作为网关或代理时,未能在预设时间内从上游服务器获得响应。
以上列举了一些常见的HTTP状态码,但实际上HTTP协议定义了从100到599的各种状态码,分别对应不同类型的响应情况。
http状态码100
HTTP状态码100表示“Continue(继续)”。这是一个临时响应状态码,属于1xx系列的状态码,主要用于客户端与服务器之间的互动过程。当客户端在发送请求数据之前先发送了一个 Expect: 100-continue 请求头时,服务器若同意客户端继续发送请求主体数据,则会返回HTTP状态码100。
具体流程如下:
- 客户端发送HTTP请求时,如果预计请求主体较大,或者想确认服务器是否有条件接受请求主体数据,会在请求头中包含
Expect: 100-continue
。 - 服务器收到这样的请求后,如果愿意接收请求主体数据,则会先回复一个状态码为100的响应,通知客户端可以继续发送请求的剩余部分(即请求主体)。
- 客户端在接收到100状态码后,确认服务器准备好接收数据,便会接着发送请求的主体内容。
请注意,不是所有的客户端或服务器都需要使用100 Continue流程,它主要用于节省带宽,尤其是在请求可能因为某种原因被服务器拒绝时,避免不必要的大体积数据传输。
HTTP1.1 和 HTTP1.0 的区别有哪些
HTTP/1.1 与 HTTP/1.0 是 HTTP 协议发展过程中的两个重要版本,它们之间存在显著的区别,主要包括以下几点:
持久连接(Persistent Connections):
- HTTP/1.0 默认采用非持久连接,即每次请求-响应完成后,TCP连接就会被关闭。这导致了每次请求都需要重新建立连接,增加了延迟和资源消耗。
- HTTP/1.1 默认支持持久连接,也称为keep-alive连接,允许一个TCP连接上可以连续处理多个请求和响应,极大地提高了性能。
管道化(Pipelining):
- HTTP/1.1 引入了请求管道化,即在持久连接上,客户端可以在收到前一个响应之前就发送下一个请求,但要注意的是,响应仍然按照请求的顺序返回,且如果某个请求在处理过程中出现问题,后面的请求可能会阻塞。
- HTTP/1.0 不支持请求管道化。
缓存控制:
- HTTP/1.0 提供了基本的缓存机制,通过Expires和Pragma头部字段进行控制,但相对较弱。
- HTTP/1.1 加强了缓存控制机制,引入了Cache-Control头部字段,以及ETag、Last-Modified、If-Modified-Since、If-None-Match等条件请求头部,提供了更细粒度的缓存策略。
HOST头部:
- HTTP/1.0 没有强制要求使用Host头部字段来区分同一服务器上的多个网站或服务。
- HTTP/1.1 强制要求所有请求必须包含Host头部字段,这使得一台服务器可以托管多个域名,有效地推动了虚拟主机技术的发展。
错误提示:
- HTTP/1.1 添加了许多新的状态码,提供了更详尽的错误信息和状态指示,比如100(Continue)用于期望确认后再发送数据,以及其他众多的状态码。
内容编码和传输编码:
- HTTP/1.1 支持内容编码(如gzip压缩)和传输编码(如chunked编码),可以减少网络传输的数据量,提高传输效率。
分块传输编码(Chunked transfer encoding):
- HTTP/1.1 引入了分块传输编码,允许服务器在不知道内容长度的情况下逐步发送响应,这对于动态生成的内容和长连接传输非常有用。
带宽优化:
- HTTP/1.1 允许请求部分资源(Range requests),客户端可以请求资源的一部分,有利于实现断点续传、媒体流等应用。
总的来说,HTTP/1.1 相对于 HTTP/1.0 在性能、效率和功能上有了很大的改进和扩展,更适应现代网络应用的需求。然而,HTTP/1.x 系列的协议依然存在一些局限性,如队头阻塞等问题,这些问题在HTTP/2和HTTP/3版本中得到了进一步解决。
HTTPS 和 HTTP 的区别是什么
HTTPS 和 HTTP 的区别主要体现在以下几个方面:
-
安全性:
- HTTP(HyperText Transfer Protocol)是超文本传输协议,数据在传输过程中是以明文形式发送的,不提供任何形式的数据加密,因此容易被第三方监听、窃取和篡改。
- HTTPS(Hypertext Transfer Protocol Secure)是在 HTTP 基础上加入了 SSL/TLS 加密层,能够对传输数据进行加密,从而保证了通信双方数据的机密性、完整性和身份校验。这大大增强了用户信息和交易数据的安全性。
-
端口:
- HTTP 通常使用标准的 TCP 端口 80 进行通信。
- HTTPS 使用的是加密通信端口 443。
-
证书:
- HTTP 不需要任何证书,所有的数据都是透明传输。
- HTTPS 必须要有SSL/TLS证书,并且这些证书需要经过权威的数字证书认证机构(CA)签发,以证明服务器的身份。现在有许多免费的证书颁发机构(如Let's Encrypt)提供免费的SSL证书。
-
连接建立过程:
- HTTP 连接建立相对简单,直接通过TCP的三次握手建立连接即可。
- HTTPS 在TCP握手基础上,还需要额外进行SSL/TLS握手过程,包括证书交换、密钥协商、身份验证等多个步骤,整个过程更为复杂,需要更多的时间和计算资源。
-
资源消耗:
- HTTP 由于没有加密过程,所以在同等条件下,其处理速度较快,占用的系统资源较少。
- HTTPS 因为涉及到加密解密操作,所以处理速度较慢,而且会增加服务器CPU和内存的使用,同时也会对客户端产生一定的影响。
-
信任和隐私:
- HTTP 页面可能导致浏览器显示“不安全”警告,尤其是在涉及敏感信息传输时。
- HTTPS 能够为用户提供信任感,因为它能够保护用户登录凭据、信用卡号等敏感信息,防止中间人攻击和数据篡改。
综上所述,HTTPS 旨在为 Web 应用提供安全环境,尤其适用于涉及个人信息输入、金融交易和其他敏感数据交互的场景。随着网络安全意识的提升,越来越多的网站开始使用 HTTPS 作为标准通信协议。
HTTP2 和 HTTP1.1 的区别是什么
HTTP/2 与 HTTP/1.1 的区别主要包括以下几个关键方面:
-
多路复用(Multiplexing):
- HTTP/1.1 中,同一域名下的所有请求通常会串行化执行,即使在打开多个 TCP 连接(通常称为持久连接或pipelining)的情况下,还是有可能因头部阻塞(Head-of-line blocking)而导致性能瓶颈。
- HTTP/2 引入了多路复用技术,允许多个请求在一个TCP连接上并行处理,消除了请求间的阻塞,显著提高了带宽利用率和页面加载速度。
-
二进制分帧(Binary Framing):
- HTTP/1.1 使用文本格式的报文进行通信。
- HTTP/2 把请求和响应分解为多个小的二进制帧,这些帧可以交错、优先级排序并在连接上独立地进行传输,进而提高了效率。
-
头部压缩(Header Compression):
- HTTP/1.1 中,头部信息通常会重复很多次,尤其是对于大型网站,这会占用大量的带宽。
- HTTP/2 使用HPACK压缩算法对头部进行压缩,减少了重复头部的传输量,提高了传输效率。
-
服务器推送(Server Push):
- HTTP/1.1 只能被动响应客户端请求。
- HTTP/2 允许服务器在客户端请求一个资源的同时主动推送其他资源,这可以减少延迟,提前加载关联资源,优化用户体验。
-
优先级与流控(Prioritization and Flow Control):
- HTTP/2 允许客户端指定请求的优先级,服务器可以根据这些信息合理安排资源的发送顺序。
- 同时,HTTP/2 引入了流控制机制,允许两端分别控制数据的发送速率,以防止较快一端的突发数据淹没较慢一端,保证了连接的稳定性。
总的来说,HTTP/2 在很大程度上解决了 HTTP/1.1 存在的性能瓶颈问题,大幅提升了网络应用的性能和效率。
HTTP3 和 HTTP2 的区别是什么
HTTP/3 和 HTTP/2 主要区别在于底层传输协议的改变以及对性能和可靠性的改进。以下是两者之间的主要区别:
-
传输层协议:
- HTTP/2:基于TCP协议,继承了TCP的可靠性,但受限于TCP的队头阻塞问题。
- HTTP/3:基于QUIC协议,QUIC是基于UDP的,旨在解决TCP中存在的延迟和队头阻塞问题。QUIC集成了TCP的可靠性机制(如流量控制、错误恢复等)并采用了自身的多路复用和流控机制。
-
连接初始化与重连:
- HTTP/2:使用TCP连接,建立连接需要经过握手(如TCP握手和TLS握手),在丢包或网络不稳定时,恢复连接可能需要较长时间。
- HTTP/3:QUIC协议提供了更快的连接初始化,支持0-RTT(零往返时间)握手,这意味着在某些情况下,客户端在第一次请求时就可以发送数据,无需等待握手完成。同时QUIC的重连机制更快,能更快地恢复丢失的连接。
-
多路复用与流控制:
- HTTP/2:已经实现了多路复用,允许在一个TCP连接上并行处理多个请求和响应,但仍受TCP的队头阻塞影响。
- HTTP/3:QUIC同样支持多路复用,但其流控制和多路复用机制更加灵活和高效,能更好地处理乱序到达的数据包,减轻了队头阻塞现象。
-
安全性:
- HTTP/2:默认使用TLS加密(即HTTPS),但仍然是基于TCP的加密。
- HTTP/3:QUIC内置了加密层,使用TLS 1.3进行加密,且将加密层与传输层紧密结合,提高了安全性。
-
错误恢复与拥塞控制:
- HTTP/2:依赖于TCP的拥塞控制和错误恢复机制。
- HTTP/3:QUIC具有自己的拥塞控制算法和快速重传/恢复机制,能更快地应对丢包和网络状况变化。
总体来说,HTTP/3 相比 HTTP/2 在连接建立速度、数据传输效率、错误恢复能力和抗丢包能力上有显著提升,致力于提供更快、更稳定的网络体验。
HTTPS的请求过程
HTTPS(Hypertext Transfer Protocol Secure)的请求过程相较于HTTP增加了加密和身份验证的步骤,以下是HTTPS请求的基本过程:
-
客户端请求:
-
用户在浏览器中输入HTTPS URL并按下回车键,浏览器发起连接到服务器的443端口(HTTPS的默认端口)。
-
-
SSL/TLS握手:
- 第一步:ClientHello —— 客户端发送一个SSL/TLS握手请求,其中包括客户端支持的SSL/TLS版本、加密套件列表以及一个随机数。
- 第二步:ServerHello —— 服务器响应ClientHello,选择一个双方都支持的SSL/TLS版本、加密套件,并发送服务器的随机数以及服务器证书。服务器证书中包含了服务器的公钥和身份信息,由可信的证书颁发机构(CA)签名。
- 第三步:证书验证 —— 客户端验证服务器证书的有效性,包括检查证书是否由受信任的CA签署、证书是否过期、服务器名称是否与请求的域名相匹配等。
- 第四步:密钥交换:
- 通常,客户端生成一个随机的会话密钥,并使用服务器证书中的公钥加密后发送给服务器(例如使用RSA或ECDHE等密钥交换算法)。
- 如果服务器要求客户端证书,客户端也会在此阶段发送自己的证书以进行身份验证。
- 第五步:完成握手:
- 服务器使用私钥解密会话密钥,然后双方通过交换ChangeCipherSpec消息告知即将启用加密通信,并通过Finished消息来验证握手过程的完整性。
- 客户端也发送ChangeCipherSpec和Finished消息以完成握手。
-
加密通信:
-
完成SSL/TLS握手后,客户端和服务器使用协商好的加密套件和会话密钥进行对称加密通信。此后,所有的HTTP请求和响应都在这个加密通道中传输。
-
-
HTTP请求与响应:
- 客户端现在通过安全的SSL/TLS通道发送HTTP请求给服务器。
- 服务器收到请求后,处理请求并返回HTTP响应,这个响应内容也是加密的。
- 客户端接收到响应后,解密响应并根据HTTP响应内容处理请求结果,如渲染网页内容等。
-
连接关闭:
- 当客户端和服务器完成数据交换后,可以关闭连接,也可以根据HTTP/2或HTTP/3的特点保持连接以便复用。
请注意,SSL/TLS握手的具体流程可能因版本和配置有所不同,上述描述提供了一个大致的通用过程。在实际中,还会有更细致的安全控制措施,如OCSP stapling、Certificate Transparency等。
对称加密和非对称加密的区别
对称加密与非对称加密是密码学中两种主要的加密方式,它们的主要区别在于密钥管理和加密/解密机制的不同:
-
对称加密(Symmetric Encryption)
- 特点:
- 使用相同的密钥(称为对称密钥)进行加密和解密。
- 加密和解密的过程高效快速,适用于大量数据的加密。
- 密钥管理相对复杂,因为所有需要通信的双方都需要预先共享同一密钥,并且该密钥必须安全地传输和存储,以防被未经授权的第三方获取。
- 例子:DES、3DES、AES等。
- 特点:
-
非对称加密(Asymmetric Encryption)
- 特点:
- 使用两个相关的密钥,一个称为公钥,可以公开给任何人;另一个称为私钥,仅由密钥所有者知道并保密。
- 公钥用于加密,对应私钥用于解密;或者私钥用于签名,公钥用于验证签名。
- 加密和解密过程相比对称加密较慢,因此一般用于加密小量但敏感的数据,如密钥交换或数字签名。
- 提供了更高的安全性,因为即使公钥被截获,没有对应的私钥也无法解密数据,反之亦然。
- 例子:RSA、ECC(椭圆曲线加密)、DSA等。
- 特点:
总结起来,对称加密的优点是效率高,缺点是在密钥管理上存在风险;而非对称加密虽然效率较低,但提供了更好的密钥管理方案,尤其适用于分布式环境中安全地进行密钥交换。在实际应用中,往往结合两者的优势,比如通过非对称加密交换一个临时的对称密钥,再用这个对称密钥来加密大量的数据传输,这种方式既保证了效率又提升了安全性。