# HTTP 与 HTTPS、GET 和 POST 解析
关于答案解析
- HTTP 与 HTTPS、GET 和 POST 基础面试题答案解析过程是根据自身项目实践经验以及查阅官方文档等最终的得出结论。
- 仅供学习参考,评论区感谢补充和纠错 !
# 1、什么是 HTTP ?
答案解析
HTTP 代表超文本传输协议,它是一种用于通过网络传输数据的协议,或是一种表示信息的规范顺序和语法。
- 通过互联网发送的大多数信息(包括网站内容和 API 调用)都使用 HTTP 协议。HTTP 消息主要有两种:请求和响应。
- 在 OSI 模型中,HTTP 是第 7 层协议。
# 2、什么是 HTTP 请求 和 HTTP 响应 ?
答案解析
用户与浏览器交互时,用户浏览器会生成 HTTP 请求。例如,如果用户点击一个超链接,浏览器将针对对应页面上出现的内容发送一系列“HTTP GET”请求。
- 如果有人在百度中搜索“什么是 HTTP?”,那么本文会出现在搜索结果中,当他们点击其链接时,浏览器将创建并发送一系列 HTTP 请求以获取呈现页面所需的信息。
- 这些 HTTP 请求全部传送到源站服务器或代理缓存服务器,并且服务器将生成 HTTP 响应。
- HTTP 响应是对 HTTP 请求的回答。
HTTP 请求/响应的步骤:
- 1、客户端连接到 Web 服务器
- 2、发送 HTTP 请求
- 3、服务器接受请求并返回 HTTP 响应
- 4、释放 TCP 连接
- 5、客户端(浏览器)解析 HTML 内容
# 3、典型的 HTTP 请求是什么样的 ?
答案解析
简单来说,HTTP 请求是遵循 HTTP 协议的一系列文本行。GET 请求可能如下所示:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en
- 用户浏览器生成的这部分文本将通过 Internet 发送。而问题在于,它是明文形式发送的,监视连接的任何人都能读取它。
- 当用户通过网站或 Web 应用程序提交敏感数据时,这尤其是一个问题。敏感数据可能是密码、银行卡号,或在表单中输入的任何其他数据。
- 而且在 HTTP 中,所有这些数据都以明文形式发送,任何人都能读取。(当用户提交表单时,浏览器会将其转换为 HTTP POST 请求,而不是 HTTP GET 请求。)
源站服务器收到 HTTP 请求时,将发送 HTTP 响应,其类似于如下内容:
HTTP/1.1 200 OK
Date: Mon, 02 May 2022 13:19:32 GMT
Server: nginx/1.20.1
Last-Modified: Fri, 29 Apr 2022 16:44:49 GMT
Accept-Ranges: bytes
Content-Length: 12
Vary: Accept-Encoding
Content-Type: text/plain
Hello World!
- 如果网站使用 HTTP 而非 HTTPS,则监视会话的任何人都可以读取所有请求和响应。
- 本质上,恶意行为者可以只读取请求或响应中的文本,就能知道某人正在索取、发送或接收的确切信息。
# 4、什么是 HTTPS ?
答案解析
HTTPS 代表安全的超文本传输协议,它是 HTTP 的高度先进和安全的版本。
- 它提供了数据的双向安全性,这可以帮助您保护潜在的敏感信息不被盗。
- 它通过使用 SSL 加密整个通信来实现安全交易。它是 SSL/TLS 协议和 HTTP 的组合。它提供网络服务器的加密和安全标识。
- HTTPS 中的 S 代表“安全”。HTTPS 使用 TLS(或 SSL)来加密 HTTP 请求和响应。
- SSL 事务是在基于密钥的加密算法的帮助下进行协商的。该密钥的强度通常为 40 或 128 位。
因此在上例中,攻击者看到的不是其文本,而是一堆看似随机的字符。
攻击者不会看到:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en
而会看到类似如下:
t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==
# 5、在 HTTPS 中,TLS/SSL 如何加密 HTTP 请求和响应 ?
答案解析
TLS 使用一种称为公钥加密的技术:密钥有两个,即公钥和私钥,其中公钥通过服务器的 SSL 证书与客户端设备共享。
- 当客户端打开与服务器的连接时,这两个设备使用公钥和私钥商定新的密钥(称为会话密钥),以加密它们之间的后续通信。
- 然后,所有 HTTP 请求和响应都使用这些会话密钥进行加密),使任何截获通信的人都只能看到随机字符串,而不是明文。
# 6、HTTPS 如何帮助验证 Web 服务器身份 ?
答案解析
身份验证是指核实一个人或一台计算机是否是声称的身份。
HTTP 中没有身份验证,它基于信任原则。HTTP 的架构师不一定是做出了隐式信任所有 Web 服务器的决定;他们当时除了安全以外还有其他优先事务。
但在现代 Internet 上,身份验证是不可或缺的。就像身份证件能确认一个人的身份一样,私钥可以确认服务器的身份。
当客户端打开与源站服务器的连接通道时(例如,当用户导航到网站时),拥有与网站 SSL 证书中公钥匹配的私钥可证明此服务器确实是该网站的合法主机。
这可以防止或帮助阻止在没有身份验证时可能发生的多种攻击,例如:- 在途攻击
- DNS 劫持
- BGP 劫持
- 域欺骗
# 7、HTTP 的优点与缺点
优点:
- HTTP 可以用 Internet 上的其他协议实现,也可以在其他网络上实现
- HTTP 页面存储在计算机和 Internet 缓存中,因此可以快速访问
- 平台无关,允许跨平台移植
- 不需要任何运行时支持
- 可通过防火墙使用 !全球应用是可能的
- 不是面向连接的,因此没有网络开销来创建和维护会话状态和信息
缺点:
- 没有隐私,因为任何人都可以看到内容
- 数据完整性是一个大问题,因为有人可以更改内容。这就是为什么 HTTP 协议是一种不安全的方法,因为没有使用加密方法。
- 任何拦截请求的人都可以获得用户名和密码。
# 8、HTTPS 的优势与缺点
优点:
- 在大多数情况下,通过 HTTPS 运行的站点将进行重定向。因此,即使您输入 HTTP://,它也会通过安全连接重定向到 https
- 它允许用户执行安全的电子商务交易,例如 网上银行等。
- SSL 技术保护任何用户并建立信任
- 一个独立的机构验证证书所有者的身份。因此,每个 SSL 证书都包含有关证书所有者的唯一、经过身份验证的信息。
缺点:
- HTTPS 协议无法阻止从浏览器缓存的页面中窃取机密信息
- SSL 数据只能在网络传输期间进行加密。所以无法清除浏览器内存中的文字
- HTTPS 会增加组织的计算开销和网络开销,因此会比 HTTP 慢一点
# 9、HTTP 和 HTTPS 有什么区别?
以下是 HTTP 和 HTTPS 协议之间的一些主要区别,排名不分先后。
范围 | HTTP | HTTPS |
---|---|---|
协议 | 它是超文本传输协议。 | 它是一种安全的超文本传输协议。 |
安全 | 它的安全性较低,因为数据可能容易受到黑客攻击。 | 它旨在防止黑客访问关键信息。它对此类攻击是安全的。 |
端口 | 默认使用 80 端口 | 默认情况下使用端口 443。 |
以 ...开始 | HTTP URL 以 http:// 开头 | HTTPS URL 以 https:// 开头 |
应用场景 | 它非常适合为博客等信息消费而设计的网站。 | 如果网站需要收集各种账号等隐私信息,那么它是一种更安全的协议。 |
Scrambling | HTTP 不会扰乱要传输的数据。这就是为什么黑客更有可能获得传输的信息。 | HTTPS 在传输前对数据进行加扰。在接收端,它解扰以恢复原始数据。因此,传输的信息是安全的,不会被黑客入侵。 |
协议 | 它在 TCP/IP 级别运行。 | HTTPS 没有任何单独的协议。它使用 HTTP 运行,但使用加密的 TLS/SSL 连接。 |
域名验证 | HTTP 网站不需要 SSL。 | HTTPS 需要 SSL 证书,并由 CA 签名。 |
数据加密 | HTTP 网站不使用加密。 | HTTPS 网站使用数据加密。 |
搜索排名 | HTTP 不会提高搜索排名。搜索引擎不会优先考虑 HTTP 网站 | HTTPS 有助于提高搜索排名。由于 HTTPS 网站是安全网站,因此 搜索引擎会为 HTTPS 提供偏好。 |
速度 | 速度快 | 比 HTTP 慢,由于它支持的附加功能,即安全性,与 HTTP 相比,页面加载速度慢一点。 |
漏洞 | 易受黑客攻击 | 它是高度安全的,因为数据在通过网络看到之前已被加密。 |
运行层级 | 应用层协议 | 传输层协议 |
# 10、HTTP 与 HTTPS 主要区别 ?
答案解析
- HTTP 缺乏加密数据的安全机制,而 HTTPS 提供 SSL 或 TLS 数字证书来保护服务器和客户端之间的通信。
- HTTP 在应用层运行,而 HTTPS 在传输层运行。
- HTTP 默认在 80 端口上运行,而 HTTPS 默认在 443 端口上运行。
- HTTP 以纯文本传输数据,而 HTTPS 以密文(加密文本)传输数据。
- HTTP 比 HTTPS 快,因为 HTTPS 消耗计算能力来加密通信通道。
# 11、HTTPS 协议的工作原理
答案解析
客户端在使用 HTTPS 方式与 Web 服务器通信时有以下几个步骤:
- 1、客户端使用 https url 访问服务器,则要求 web 服务器建立 ssl 链接。
- 2、web 服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),传输给客户端。
- 3、客户端和 web 服务器端开始协商 SSL 链接的安全等级,也就是加密等级。
- 4、客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
- 5、web 服务器通过自己的私钥解密出会话密钥。
- 6、web 服务器通过会话密钥加密与客户端之间的通信。
# 12、常见的 HTTP 方法
答案解析
- GET:用于从服务器获取详细信息,基本上是只读操作。
- POST:此方法用于在服务器上创建新资源。
- PUT:此方法用于更新服务器上的旧/现有资源或替换资源。
- DELETE:此方法用于删除服务器上的资源。
- PATCH:用于修改服务器上的资源。
- OPTIONS:这会获取服务器上支持的资源选项列表。
POST、GET、PUT、DELETE 对应于最常称为 CRUD 操作的创建、读取、更新、删除操作。
- GET、HEAD、OPTIONS 是安全且幂等的方法,而 PUT 和 DELETE 方法只是幂等的。
- POST 和 PATCH 方法既不安全也不幂等。
# 13、常见的 HTTP 状态码
答案解析
这些是参考服务器上任务的预定义状态的标准代码。以下是可用的状态代码格式:
- 1xx - 代表信息响应
- 2xx - 代表成功响应
- 3xx - 表示重定向
- 4xx - 代表客户端错误
- 5xx - 代表服务器错误
最常用的状态码是:
- 200 - 成功/OK
- 201 - 已创建 - 用于 POST 或 PUT 方法。
- 304 - NOT MODIFIED - 用于有条件的 GET 请求以减少网络的带宽使用。在这里,发送的响应正文应该是空的。
- 400 - BAD REQUEST - 这可能是由于验证错误或缺少输入数据。
- 401- UNAUTHORIZED - 当没有与请求一起发送的有效身份验证凭据时返回。
- 403 - FORBIDDEN - 当用户无权访问(或被禁止)资源时发送。
- 404 - NOT FOUND - 资源方法不可用。
- 500 - INTERNAL SERVER ERROR - 服务器在运行该方法时抛出了一些异常。
- 502 - BAD GATEWAY - 服务器无法从另一个上游服务器获得响应。
# 14、GET 和 POST 的区别 ?
答案解析
先说结论:
- 它们的本质都是 TCP 链接,并无区别。
- 但是由于 HTTP 的规定以及浏览器/服务器的限制,导致它们在应用过程中会有所不同。
一般回答:
从 HTTP 的报文层面看:
- post 更安全,不会作为 url 的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中
- post 发送的数据更大(get 有 url 长度限制)
- post 能发送更多的数据类型(get 只能发送 ASCII 字符)
- post 比 get 慢
- post 用于修改和写入数据,get 一般用于搜索排序和筛选之类的操作(各种搜索查询都是 get 提交),目的是资源的获取,读取数据
从数据库的层面看:get 更符合幂等性和安全性
其他方面看比如:get 可以被缓存,被存储,而 post 不能
从安全性来看:POST 的安全性要比 GET 的安全性高。
注意:
这里所说的安全性和上面 GET 提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的 Security 的含义
# 为什么 get 比 post 更快
答案解析
- post 请求包含更多的请求头,因为 post 需要在请求的 body 部分包含数据,所以会多了几个数据描述部分的首部字段(如:content-type)这其实是微乎其微的。
- 最重要的一条,post 在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据。
post 请求的过程:
- ① 浏览器请求 tcp 连接(第一次握手)
- ② 服务器答应进行 tcp 连接(第二次握手)
- ③ 浏览器确认,并发送 post 请求头(第三次握手,这个报文比较小,所以 http 会在此时进行第一次数据发送)
- ④ 服务器返回 100 Continue 响应
- ⑤ 浏览器发送数据
- ⑥ 服务器返回 200 OK 响应
get 请求的过程:
- ① 浏览器请求 tcp 连接(第一次握手)
- ② 服务器答应进行 tcp 连接(第二次握手)
- ③ 浏览器确认,并发送 get 请求头和数据(第三次握手,这个报文比较小,所以 http 会在此时进行第一次数据发送)
- ④ 服务器返回 200 OK 响应
也就是说,get 的总耗是 post 的 2/3 左右
# GET 传参最大长度的理解误区
答案解析
- ① http 协议并未规定 get 和 post 的长度限制
- ② get 的最大长度限制是因为浏览器和 web 服务器限制了 URL 的长度
- ③ 不同的浏览器和 web 服务器,限制的最大长度不一样
- ④ 要支持 IE,则最大长度为 2083byte,若支持 Chrome,则最大长度 8182byte
误解:
- ① 首先即使 get 有长度限制,也是限制的整个 URL 的长度,而不仅仅是参数值数据长度,http 协议从未规定 get/post 的请求长度限制是多少
- ② 所谓的请求长度限制是由浏览器和 web 服务器决定和设置的,各种浏览器和 web 服务器的设定均不一样,这依赖于各个浏览器厂家的规定或者可以根据 web 服务器的处理能力来设定。
- IE 和 Safari 浏览器 限制 2k,
- Opera 限制 4k,Firefox 限制 8k(非常老的版本 256byte)
- 如果超出了最大长度,大部分的服务器直接截断,也有一些服务器会报 414 错误。
# 浏览器 URL 最大长度限制
答案解析
- 每个浏览器对 URL 长度的最大限制不同
- 当超过最大限制后页面不会正常打开。这个长度无法通过浏览器设置修改。
浏览器 | 最大长度(字符数) | 描述 |
---|---|---|
Microsoft Internet Explorer(IE 浏览器) | 2083(2K+53) | 超过这个限制,则自动截断(若是 form 提交则提交按钮不起作用) |
Edge | 4035 | 微软最新浏览器 |
Firefox | 65536 | 但实际上有效的 URL 最大长度不少于 100,000 个字符 |
Chrome | 8182 | 超过文本长度限制返回错误 |
Safari | 80000 | / |
Opera | 190000 | Opera9 地址栏中输入 190000 字符时依然能正常编辑 |
# 服务器 URL 最大长度限制
服务器可以通过配置修改最大长度
服务器 | 最大长度(字符数) |
---|---|
Apache(Server) | 8192 |
IIS | 16384 |
Nginx | 4096 |
Tomcat | 65536 |
大厂最新技术学习分享群
![大厂最新技术学习分享群](/bulletin-box.jpg)
微信扫一扫进群,获取资料
X