HTTP和HTTPS

89 阅读26分钟

一、HTTP协议简介

1、HTTP是什么?

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网WWW(World Wide Web)的数据通信的基础。

image.png

2、HTTP版本发展

(1)HTTP 1.0

发布时间:1996 年。

特点

基础功能建立:它是 HTTP 协议的早期较为成熟的版本,首次定义了客户端与服务器之间通信的基本交互模式,规定了请求方法(比如常见的 GET、POST 等)用于客户端向服务器获取或提交数据。例如,浏览器使用 GET 方法向服务器请求网页的 HTML 文档内容,服务器接收到请求后进行相应处理并返回对应的数据。

支持多种类型数据传输:可以传输文本、图像、音频、视频等多种格式的数据,使得网页内容变得更加丰富多样,不再局限于单纯的文本展示,像网页中可以嵌入图片等多媒体元素来提升视觉体验。

无状态性:服务器不会记录关于客户端的状态信息,每个请求都是独立的,这意味着如果客户端多次向服务器发起请求,服务器并不能根据之前的交互情况来对后续请求做特殊处理,每次都像是初次打交道一样去响应请求。不过这种无状态性在一些需要保持连续交互场景中(比如用户登录后的持续操作)会带来不便,后续版本对此有了改进。

每次请求建立新连接:客户端每发起一次 HTTP 请求,都要和服务器建立一次 TCP 连接,请求处理完毕后就断开连接。当一个网页包含多个元素(比如多个图片、脚本文件等)需要获取时,就需要频繁地建立和断开连接,这在一定程度上影响了性能和效率,会增加网络开销和延迟时间。

(2)HTTP 1.1

发布时间:1999 年,是对 HTTP/1.0 的重要改进版本。

特点

持久连接:也叫长连接,默认采用持久连接的方式,即客户端和服务器建立一次 TCP 连接后,可以在这个连接上进行多次 HTTP 请求和响应的交互,不用像 HTTP/1.0 那样每次请求都新建连接,极大地减少了建立和关闭连接的开销,提升了网页加载等操作的效率。例如,在加载一个包含多个图片、样式表、脚本文件的复杂网页时,通过持久连接能更快速地获取全部资源。

管道化技术:允许客户端在同一个 TCP 连接上连续发送多个请求,而不用等待服务器对前一个请求的响应后再发下一个,服务器会按照接收请求的顺序依次返回响应结果。这样能进一步提高传输效率,减少请求等待时间,不过在实际应用中,管道化的实现效果会受到一些网络环境、服务器处理能力等因素的影响。

增加新的请求方法:新增了一些请求方法,像 PUT(用于向服务器上传文件等资源)、DELETE(用于请求服务器删除指定资源)等,丰富了客户端操作服务器资源的方式,拓展了 HTTP 协议的应用场景,比如在一些内容管理系统中可以利用 PUT 来更新文档内容、用 DELETE 来移除过期文件等。

缓存机制优化:提供了更完善的缓存控制机制,客户端和服务器可以通过相关的头信息(如 Cache-Control 等)来协商数据是否可以缓存、缓存多久等问题,减少了不必要的数据重复传输,降低了服务器的负载以及客户端获取数据的时间成本,比如对于一些不经常变动的网页图片等资源,合理设置缓存可以让客户端直接从本地缓存获取,而不用每次都向服务器请求。

image.png

(3)HTTP 2.0

发布时间:2015 年,旨在进一步提升网络传输性能,以适应现代互联网复杂应用的需求。

特点

二进制分帧层:HTTP/2 采用二进制格式对数据进行编码传输,与 HTTP/1.x 的文本格式不同。并且引入了分帧层,将 HTTP 消息分解为多个帧,这些帧可以交错发送,不同流(一个流代表一个独立的请求 - 响应交互过程)的帧可以混合在同一个 TCP 连接中传输,然后在接收端再进行重组,这样能更充分地利用网络带宽,避免了 HTTP/1.1 中因请求顺序等待等造成的带宽闲置问题,提高了传输效率。

多路复用:基于二进制分帧和流的概念实现了多路复用,在同一个 TCP 连接上可以同时并发多个请求和响应,多个请求之间互不干扰,不像 HTTP/1.1 中虽然有管道化但还是会受顺序等限制。例如,在浏览一个复杂的电商网页,同时加载商品图片、详情数据、用户评论等不同资源时,能通过多路复用快速并行获取,极大提升网页加载速度。

头部压缩:使用 HPACK 算法对 HTTP 头部信息进行压缩,因为在 HTTP 通信中头部信息往往存在很多重复的字段(比如多个请求都有相同的用户代理等字段),压缩后可以减少数据传输量,节省网络带宽,尤其是在移动端等网络资源相对紧张的场景下效果更明显,加快了请求响应的整体速度。

服务端推送:服务器可以主动向客户端推送一些资源,比如客户端请求网页的 HTML 文档时,服务器预判客户端接下来可能还需要对应的样式表、脚本文件等,就可以不经客户端再次请求而主动将这些资源推送给客户端,进一步减少了客户端等待获取资源的时间,提升了用户体验。

image.png

(4)HTTP 3.0

发布时间:2022 年左右开始逐渐被更广泛关注和应用。

特点

基于 QUIC 协议:HTTP/3 摒弃了之前 HTTP 版本基于 TCP 协议的做法,而是使用了 QUIC(Quick UDP Internet Connections)协议,QUIC 是基于 UDP 的一种传输层协议,它整合了 TCP 的可靠传输、拥塞控制等优点以及 UDP 的低延迟、快速连接建立等优势,能在复杂多变的网络环境下更快地建立连接,减少连接建立的延迟时间,像在网络信号不太好或者频繁切换网络(如从 WiFi 切换到移动数据)的场景下,依然能保障较流畅的通信。

继续优化性能与功能:继承了 HTTP/2 的很多优秀特性,如多路复用、头部压缩等,进一步强化了在移动互联网、实时交互应用等场景下的性能表现。例如在实时的在线游戏、视频会议等对实时性和低延迟要求很高的应用中,HTTP/3 能更好地保障数据的快速准确传输,减少卡顿、延迟等情况出现,提升用户的交互体验。

增强安全性:在协议设计上更加注重安全,默认采用加密通信(使用 TLS 1.3 等加密协议),从连接建立开始就保障数据的安全性,防止数据在传输过程中被窃取、篡改等,适应了当前互联网对数据安全要求越来越高的趋势。

二、HTTP常见的请求方法

1、GET

用于从服务器获取指定的资源。通常是获取网页内容、查询数据等操作会使用到 GET 方法。

例如,当你在浏览器地址栏输入一个网址并回车访问网页时,浏览器默认就是使用 GET 方法向服务器请求该网页对应的 HTML 文档以及相关的资源(如图片、样式表、脚本文件等)。GET 请求会将请求参数附加在 URL 后面,以 “?” 开始,参数之间用 “&” 分隔,比如 “example.com/search?q=ke…example.com” 这个服务器发起 GET 请求,查询关键词为 “keyword” 的内容,并且指定显示第 2 页的结果,服务器接收到请求后会根据这些参数查找并返回相应的资源信息。

2、POST

常用于向服务器提交数据,让服务器根据提交的数据进行相应的处理,比如在网页上填写表单(注册信息、登录信息、发表评论等)后提交数据到服务器,一般就是通过 POST 方法来实现的。POST 请求的数据是放在请求体(Request Body)中进行传输的,相比 GET 请求将参数放在 URL 上,POST 能传输更多、更复杂的数据,并且数据不会像 GET 请求那样直接暴露在 URL 上,安全性相对更高一些。

3、PUT

主要用于向服务器上传更新资源,也就是将客户端的资源放置到服务器指定的位置去替换原有的资源。例如在一些支持用户上传文件的网盘应用中,当你修改了本地的一个文档后想更新到网盘服务器上对应位置,就可以使用 PUT 方法将修改后的文档上传到服务器,覆盖原来的旧版本文档;或者在一些内容管理系统中,更新一篇已经存在的文章内容时也可以采用 PUT 请求,让服务器用新的内容替换旧的文章内容。

4、DELETE

用于请求服务器删除指定的资源。比如在一个项目管理系统中,当你有权限删除某个已经完成或者不再需要的项目时,可以通过向服务器发送 DELETE 请求,告知服务器删除对应的项目相关的数据(包括文档、记录等资源)。

5、HEAD

和 GET 方法类似,也是用于获取服务器资源的相关信息,但 HEAD 请求只返回头部信息,不会返回请求资源的实体内容。比如想要了解一个网页文档的大小、最后修改时间、服务器支持的响应格式等头部相关信息时,可以使用 HEAD 请求,它能帮助客户端在不获取整个资源实体的情况下快速判断是否需要进一步发起 GET 请求获取完整资源,常用于检查资源的可用性、验证缓存是否有效等场景。

6、OPTION

用于获取服务器针对特定资源所支持的请求方法以及服务器的一些配置信息等。比如客户端想要知道某个 URL 对应的资源允许使用哪些请求方法(是可以进行 GET、POST 还是 PUT 等操作),就可以向服务器发送 OPTIONS 请求,服务器会返回相应的响应,告知客户端支持的请求方法列表以及其他相关配置情况(如是否允许跨域等信息),这有助于客户端提前了解服务器的相关规则,合理地发起后续的请求。

7、TRACE

主要用于沿着目标服务器经过的代理服务器链回显收到的请求。当客户端发送一个 TRACE 请求时,服务器会将收到的请求信息(包括请求行、请求头)原封不动地返回给客户端。这个过程可以帮助客户端查看请求在经过一系列代理服务器时是否被修改,从而进行请求调试。

三、什么是URL

URL(Uniform Resource Locator),即统一资源定位符,是用于完整地描述互联网上网页和其他资源的地址。它就像是互联网上的 “坐标”,通过这个地址,浏览器等客户端可以精准地定位到需要访问的资源所在位置。

一般格式

协议://域名(IP):端口/目录/文件名?参数

例子:

example.com:80/web/index.h… example.com:80/web/index.h…

四、HTTP协议状态码

1、1XX(信息性状态码)

(1)100 Continue

含义:客户端在发送包含较大实体内容(如 POST 请求中的大量表单数据)的请求时,先发送请求头询问服务器是否愿意接收该请求的实体内容。服务器如果返回 100 Continue 响应码,表示服务器已收到请求头,并且愿意接收实体内容,客户端可以继续发送。

应用场景:在文件上传场景中比较常见。例如,当用户通过浏览器上传一个大型文件时,浏览器先发送请求头告知服务器上传文件的相关信息(如文件名、文件大小等),如果服务器返回 100 Continue,浏览器就会接着发送文件内容。

(2)101 Switching Protocols

含义:表示服务器理解并愿意遵从客户端的请求,通过升级协议来完成本次通信。比如从 HTTP/1.1 升级到 HTTP/2,或者从普通的 HTTP 协议切换到 WebSocket 协议(一种用于在单个 TCP 连接上进行全双工通信的协议)等情况。

应用场景:在一些对实时性和交互性要求较高的网页应用中,如在线游戏、实时聊天软件等,为了获得更好的性能,可能会从传统的 HTTP 协议切换到更适合实时通信的协议,此时就可能出现 101 Switching Protocols 响应码。

2、2XX(成功状态码)

(1)200 OK

含义:这是最常见的成功状态码,表示服务器成功处理了客户端的请求,并返回了请求的内容。无论是 GET 请求获取网页内容、POST 请求提交表单数据后得到成功处理的反馈,还是其他请求方法得到预期的响应,都可能返回 200 OK。

应用场景:当用户在浏览器中访问一个网页,服务器找到对应的网页文件并成功发送给浏览器时,浏览器就会收到 200 OK 响应码。例如,访问 “www.example.com/index.html”… index.html 文件的内容,响应码就是 200 OK。

(2)201 Created

含义:用于表示请求成功并且服务器创建了新的资源。通常是在使用 POST 或者 PUT 请求创建或更新资源后,服务器成功完成新资源的创建或更新操作时返回。

应用场景:在用户注册新账号时,服务器成功创建新用户记录后,会返回 201 Created 响应码;或者在内容管理系统中,使用 PUT 请求上传新的文档,服务器成功存储该文档后也会返回此码。

(3)202 Accepted

含义:表示服务器已经接受了客户端的请求,但处理尚未完成。这可能是因为请求的处理需要较长时间,或者需要排队等待处理等情况。

应用场景:在一些大型的任务处理系统中,如批量数据处理、视频转码等,当客户端提交任务请求后,服务器可能会返回 202 Accepted,告知客户端任务已经被接收,但还需要一段时间才能完成处理。

(4)204 No Content

含义:服务器成功处理了请求,但没有返回任何内容。这种情况可能是因为请求只是执行了一个操作,如删除资源(DELETE 请求)成功后,不需要返回具体的数据,或者只是对资源进行了更新,不需要返回更新后的内容等。

应用场景:当用户通过客户端删除服务器上的一个文件,服务器成功删除后,返回 204 No Content,表示删除操作成功,但没有其他内容需要返回。

3、3XX(重定向状态码)

(1)301 Moved Permanently

含义:表示请求的资源已经永久移动到了新的位置。客户端收到这个响应码后,下次访问应该使用新的 URL。同时,浏览器会自动将旧的 URL 重定向到新的 URL,并且在大多数情况下会更新书签等相关记录。

应用场景:当一个网站进行域名更换或者网页内容的永久迁移时,如从 “olddomain.com/page.html” 迁移到 “newdomain.com/page.html”,… URL 的访问请求返回 301 Moved Permanently 响应码,引导浏览器访问新的 URL。

(2)302 Found

含义:表示请求的资源临时移动到了新的位置。与 301 不同的是,客户端下次访问时还是应该先尝试访问原来的 URL,因为资源可能会移回原来的位置。浏览器会临时性地重定向到新的 URL。

应用场景:在网站维护或者服务器负载均衡等场景下,资源可能会被临时迁移到其他服务器或位置,此时就会使用 302 Found 响应码来引导浏览器访问临时的资源位置。

(3)304 Not Modified

含义:客户端发送请求时通常会携带缓存相关的头信息(如 If - Modified - Since 等),如果服务器根据这些信息判断客户端已经有最新的资源副本(即资源自上次请求后没有被修改),就会返回 304 Not Modified 响应码。这意味着客户端可以直接使用本地缓存的资源,而不需要服务器再次发送。

应用场景:对于一些不经常更新的网页资源,如网站的 logo、样式表等,浏览器会在本地缓存这些资源。当再次访问包含这些资源的网页时,浏览器会向服务器发送请求询问资源是否有更新,服务器如果判断没有更新,就返回 304 Not Modified 响应码。

4、4XX(客户端错误状态码)

(1)400 Bad Request

含义:表示客户端发送的请求有语法错误或者请求参数不符合要求等问题。这可能是因为请求格式错误、缺少必要的参数或者参数值不合法等原因导致。

应用场景:如果在一个 POST 请求中,表单数据的格式不符合服务器的要求,或者在 GET 请求中,URL 中的查询参数格式错误,服务器就会返回 400 Bad Request 响应码。例如,在一个需要整数类型参数的请求中,客户端发送了一个非整数的参数值。

(2)401 Unauthorized

含义:表示客户端请求的资源需要进行身份验证,但客户端没有提供有效的认证凭证或者提供的凭证无效。

应用场景:当用户访问一个需要登录才能查看的网页或者资源时,如果用户没有登录(即没有提供正确的用户名和密码等凭证),服务器就会返回 401 Unauthorized 响应码。

(3)403 Forbidden

含义:表示客户端有请求的凭证,但服务器禁止客户端访问所请求的资源。这可能是因为客户端没有足够的权限,或者资源受到限制等原因。

应用场景:在一个企业内部的文件管理系统中,员工可能有登录系统的权限,但如果试图访问没有授权的机密文件,服务器就会返回 403 Forbidden 响应码。

(4)404 Not Found

含义:这是最常见的客户端错误状态码之一,表示服务器无法找到客户端请求的资源。可能是因为 URL 中的路径错误、资源被删除或者不存在等原因。

应用场景:当用户在浏览器中输入一个错误的网址,或者网页中的链接指向一个不存在的资源时,服务器就会返回 404 Not Found 响应码。例如,在 “www.example.com/nonexistent… 这个 URL 中,如果服务器上不存在 “nonexistentpage.html” 这个文件,就会返回 404 Not Found。

5、5XX(服务器错误状态码)

(1)500 Internal Server Error

含义:表示服务器在处理客户端请求时遇到了内部错误,通常是服务器端的代码出现问题,如程序崩溃、数据库查询错误等。

应用场景:在一个动态网页应用中,如果服务器端的脚本(如 PHP、Python 等)出现运行时错误,导致无法正确处理客户端的请求,就会返回 500 Internal Server Error 响应码。

(2)502 Bad Gateway

含义:作为网关或者代理的服务器,从上游服务器(真正提供服务的服务器)收到一个无效的响应。这可能是因为上游服务器出现故障或者网络问题等原因。

应用场景:在使用代理服务器访问网页时,如果代理服务器无法正确处理从目标服务器收到的响应,就会返回 502 Bad Gateway 响应码。

(3)503 Service Unavailable

含义:表示服务器暂时无法处理客户端的请求,通常是因为服务器过载、维护或者正在进行系统升级等原因。

应用场景:在电商网站进行大促活动时,由于访问量过大,服务器可能会暂时无法处理新的请求,此时就会返回 503 Service Unavailable 响应码;或者服务器定期维护期间,也会返回此码告知客户端服务暂时不可用。

(4)504 Gateway Time - out

含义:作为网关或者代理的服务器,在规定的时间内没有从上游服务器收到响应。这通常是因为上游服务器处理请求过慢或者网络拥塞等原因。

应用场景:在通过代理服务器访问一些响应速度较慢的网站时,如果代理服务器等待上游服务器响应超时,就会返回 504 Gateway Time - out 响应码。

五、HTTPS 是啥?

2a57230b-1b04-4eb4-a02e-39e8442660d1.png

HTTPS 就是给你的网站加了一层保护罩,让别人没法偷看、篡改或者伪造你和网站之间传输的信息。它确保了你和网站之间的通信是私密的、安全的,并且是可信的。

1、为啥要用 HTTPS?

防偷看(数据加密): 就像上面说的,防止别人偷看你的密码、银行卡号、聊天记录、浏览历史等等。这些信息一旦泄露,可能会导致严重的财产损失和隐私泄露。HTTPS 通过加密技术,将这些敏感信息转换成乱码,即使被截获也无法读取。

防篡改(数据完整性): 防止坏人偷偷修改网页内容,比如把广告换成骗人的链接、篡改商品价格、甚至植入恶意代码。HTTPS 使用数字签名技术,确保数据在传输过程中没有被篡改。如果数据被篡改,浏览器会发出警告。

防冒充(身份验证): 确认你访问的网站真的是你想访问的网站,而不是坏人伪造的。坏人可能会创建一个和正规网站一模一样的假网站,诱骗你输入用户名和密码。HTTPS 使用 SSL/TLS 证书来验证网站的身份,确保你访问的是真正的网站。

搜索引擎喜欢 (SEO 优化): 就像老师喜欢好学生一样,搜索引擎(比如 Google)也喜欢用 HTTPS 的网站,会给它们更好的排名。因为搜索引擎也希望用户能够安全地浏览网页,获得可靠的信息。

用户更信任(提升品牌形象): 浏览器会给 HTTPS 网站显示一个小锁头,告诉用户这个网站是安全的,用户更放心。这可以提高用户对网站的信任度,增加用户粘性,提升品牌形象。

六、HTTPS 咋工作的?

你敲网址(客户端发起连接): 你在浏览器里输入一个网址,比如 www.example.com。浏览器会向服务器发起一个 HTTPS 请求。

网站给“身份证”(服务器发送证书): 网站的服务器会向你的浏览器发送一个“身份证”,证明它是真的 www.example.com。这个“身份证”就是 SSL/TLS 证书。证书里包含了网站的公钥、域名信息、以及证书颁发机构(CA)的签名。

你验证“身份证”(客户端验证证书): 你的浏览器会检查这个“身份证”是不是真的,是不是过期了,是不是跟网址对得上。浏览器会检查证书的签名是否由受信任的 CA 颁发,证书是否在有效期内,以及证书上的域名是否与你访问的域名一致。如果任何一项检查失败,浏览器会发出警告。

你们商量加密方式(密钥交换): 如果“身份证”没问题,你的浏览器和网站的服务器会商量一种加密方式,就像约定一个暗号,以后都用这个暗号说话。这个过程叫做密钥交换。常用的密钥交换算法有 RSA、Diffie-Hellman 等。密钥交换的目的是生成一个只有客户端和服务器知道的共享密钥,用于加密后续的通信。

加密聊天(加密通信): 以后你和网站之间传输的所有信息都会用这个暗号加密,别人就算截获了,也看不懂。客户端和服务器使用共享密钥对 HTTP 数据进行加密和解密,确保数据在传输过程中的安全。

image.png

七、关键的东西

SSL/TLS 证书 : 就像网站的“身份证”,证明它是真的。它包含了网站的公钥、域名信息、以及证书颁发机构(CA)的签名。

公钥: 用于加密数据的密钥,可以公开分发。

私钥: 用于解密数据的密钥,必须保密。只有网站的服务器才能拥有私钥。

对称密钥: 用于加密和解密数据的密钥,客户端和服务器共享。对称密钥的加密和解密速度比公钥加密更快,所以 HTTPS 使用对称密钥来加密大量的数据。

加密: 就像给信息加了一层密码,让别人看不懂。常用的加密算法有 AES、DES 等。

解密: 就像用密码 打开信息,让你能看懂 👀。

“身份证”颁发机构(CA): 就像派出所,负责颁发和管理“身份证”,保证“身份证”是真的。CA 是一个受信任的第三方机构,负责验证网站的身份,并颁发 SSL/TLS 证书。

八、HTTPS的优缺点

1. HTTPS 的优点

安全!安全!安全! 重要的事情说三遍!HTTPS 提供了数据加密、数据完整性、身份验证等多种安全保障,可以有效防止各种网络攻击。

让用户更信任你: HTTPS 网站在浏览器地址栏中显示一个小锁头 ,这可以提高用户对网站的信任度,增加用户粘性。

让搜索引擎更喜欢你: 搜索引擎更喜欢 HTTPS 网站,会给予更高的排名。

2. HTTPS 的缺点

稍微慢一点(性能开销): 加密和解密需要时间,所以 HTTPS 网站可能会稍微慢一点。但是,随着硬件和软件技术的不断发展,HTTPS 的性能开销已经越来越小。

要花点钱(证书费用): 买“身份证”要花钱,虽然也有免费的,但是付费的更好。付费证书通常提供更高级的功能和保障,比如更高的加密强度、更快的响应速度、以及更完善的技术支持。

配置有点麻烦(配置复杂性): 需要懂一点技术才能配置好 HTTPS。但是,现在有很多工具和教程可以帮助你轻松配置 HTTPS。

九、实际例子

网购: 在 HTTPS 的网站上买东西,你的信用卡号、密码、收货地址都会被加密,就像放在一个带锁的保险箱里一样。即使有人截获了这些信息,也打不开保险箱,看不到里面的内容。这样你的钱和包裹 就安全多了!

登录邮箱: 在 HTTPS 的网站上登录邮箱,你的用户名和密码都会被加密,就像放在保险箱里一样。即使有人截获了这些信息,也无法登录你的邮箱。

浏览新闻网站: 在 HTTPS 的新闻网站上,网站的内容不会被篡改,你能看到真实的新闻和广告。

公共 Wi-Fi: 即使你在公共 Wi-Fi 下访问 HTTPS 网站,你的信息也会被加密,黑客很难截获你的信息。

十、总结

HTTPS 就像给你的网络生活穿上了一件坚固的盔甲,保护你免受各种网络攻击。虽然不能保证 100% 安全,但能大大降低风险。随着互联网安全意识的提高,HTTPS 已经成为网站的标配。