文章目录
HTTP(HyperText Transfer Protocol)
定义:HTTP 是无状态的应用层协议,用于在 Web 上传输数据,如 HTML 文件、图片等。
特性:
- 无状态:每个请求都是独立的,不会记住之前的请求信息。
- 端口:默认使用端口 80。
- 加密:未加密,数据在传输过程中可以被监听或篡改。
HTTPS(HyperText Transfer Protocol Secure)
定义:HTTPS 是在 HTTP 上添加了 SSL/TLS 加密层的安全协议,用于保护数J据传输的安全性。
特性:
- 安全性:通过 SSL/TLS 协议对数据进行加密,防止数据在传输过程中被窃听或篡改。
- 身份验证:确保通信双方的身份,防止中间人攻击。
- 端口:默认使用端口 443。
- SEO 优势:搜索引擎(如 Google)对 HTTPS 网站给予更高的排名。
HTTP消息结构
HTTP 请求消息结构
- 请求行
包含 HTTP 方法(如 GET、POST 等)、请求目标(URL)和 HTTP 版本。 - 请求头
包含多个字段,用于提供客户端信息、请求上下文和其他相关数据。 - 空行
请求头与请求体之间需要一个空行,以标识头部的结束。 - 请求体
包含发送到服务器的数据,通常在 POST 或 PUT 请求中使用。
HTTP 响应消息结构
- 状态行
- 包含 HTTP 版本、状态码和状态描述。
- 响应头
- 提供服务器信息、响应上下文和其他相关数据。
- 空行
- 响应头与响应体之间需要一个空行,以标识头部的结束。
- 响应体
- 包含实际返回的数据,如 HTML 文档、JSON 数据等。
常见的HTTP请求
1. GET
- 用途:请求指定的资源,主要用于获取数据。
- 特点:
- 请求的数据附加在 URL 中(查询字符串)。
- 不会对服务器的状态造成影响(幂等性)。
- 可被缓存,并且可以通过书签保存。
2. POST
- 用途:向指定资源提交数据,通常用于创建新资源。
- 特点:
- 数据放置在请求体中,而不是 URL 中。
- 可能导致服务器状态变化(非幂等性)。
- 通常不被缓存。
3. PUT
- 用途:更新指定的资源或创建资源(如果资源不存在)。
- 特点:
- 数据放置在请求体中。
- 是幂等的:多次请求结果相同。
4. DELETE
- 用途:请求删除指定的资源。
- 特点:
- 也是幂等的:多次请求应产生相同的效果。
5. PATCH
- 用途:部分更新指定资源。
- 特点:
- 只需发送要更新的数据,而不是整个资源。
- 通常用于局部修改。
6. HEAD
- 用途:类似于 GET,但只请求响应头,不返回响应体。
- 特点:
- 用于获取元信息,如内容类型和长度,适合检查资源是否存在。
7. OPTIONS
- 用途:请求指定资源的支持方法。
- 特点:
- 允许客户端询问服务器支持哪些 HTTP 方法。
8. TRACE
- 用途:用于诊断,回显服务器收到的请求,用于测试和诊断。
- 特点:
- 一般不常用,可能存在安全风险。
针对大数据展示做处理/vuebigdata/src/store/index.js
import axios from 'axios';
// GET 请求
axios.get('/api/endpoint')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
// POST 请求
axios.post('/api/endpoint', {
data: 'yourData' })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
// PUT 请求
axios.put('/api/endpoint/1', {
data: 'updatedData' })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
// DELETE 请求
axios.delete('/api/endpoint/1')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
// PATCH 请求
axios.patch('/api/endpoint/1', {
data: 'partialUpdate' })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
详细说说get请求与post请求有什么区别?
GET:用于请求数据或获取数据、通过URL查询字符串传递、数据暴露在 URL 中,容易被缓存和记录在浏览器历史中,因此安全性较低、多次请求相同的 GET 方法不会改变服务器状态、可以被浏览器和中间代理缓存,有助于提高性能。
POST: 用于提交数据或向服务器发送信息。数据包含在请求体中,而不是 URL 中、适合传输敏感信息,但仍需结合 HTTPS 加密确保安全、每次请求可能会导致服务器状态变化(例如创建新资源)、通常不被缓存,因为它用于修改服务器状态。
HTTP1.0与HTTP1.1的区别?
持久连接
HTTP1.0:默认情况下,每个请求都会建立一个新的 TCP 连接,完成后立即关闭连接。这种方式效率较低,增加了延迟和资源消耗。
HTTP1.1: 默认使用持久连接(Keep-Alive),允许在同一连接上发送多个请求和响应,减少了连接建立和关闭的开销。
请求/响应头
HTTP1.0:请求和响应头部较少,无法处理许多现代 Web 应用所需的信息。
增加了许多新的请求和响应头部字段,例如 Host
、Expect
、If-Modified-Since
等,使得协议更加灵活和强大
状态码
HTTP/1.0:支持的状态码较少,不能很好地表达各种错误或响应情况。
HTTP/1.1:引入了更多的状态码,例如 100 (Continue)
、206 (Partial Content)
等,提供了更丰富的响应信息。
分块传输
HTTP/1.0:不支持分块传输编码,要求在发送响应之前知道内容的大小。
HTTP/1.1:支持分块传输编码,允许在不知道内容大小的情况下逐块发送数据,这对于动态生成的内容非常有用。
管道化
并行请求:客户端可以在接收到上一个请求的响应之前,向服务器发送多个请求。这减少了因网络延迟造成的等待时间,提高了传输效率。
HTTP2
- 二进制协议:
- HTTP/2 使用二进制格式,而不是文本格式。这使得解析更高效,减少了错误的可能性。
- 多路复用:
- 允许在同一连接上并行发送多个请求和响应,而不需要按照顺序处理。这消除了 HTTP/1.x 中的队头阻塞问题。
- 服务器推送:
- 服务器可以主动向客户端推送资源,即使客户端没有明确请求。这有助于加快页面加载速度。
- 头部压缩:
- 使用 HPACK 算法对请求和响应的头部进行压缩,减少了传输的数据量,提高了效率。
- 优先级:
- 客户端可以为请求设置优先级,帮助服务器合理调度资源,提高重要资源的加载速度。
HTTP3
- 基于 QUIC(Quick UDP Internet Connections):
- HTTP/3 使用 QUIC 协议,而不是传统的 TCP。这减少了连接建立的延迟,并优化了数据传输。
- 零延迟连接建立:
- QUIC 能够实现更快的连接建立,允许客户端和服务器之间迅速开始数据交换,减少了传统 TCP/TLS 握手带来的延迟。
- 多路复用
- HTTP/3 继续支持多路复用,但由于 QUIC 的设计,避免了 HTTP/2 中的队头阻塞问题,允许多个请求并发处理而不互相影响。
- 拥塞控制:
- QUIC 提供了先进的拥塞控制算法,可以根据网络状况动态调整数据发送速率,从而提升性能。
- 内置加密:
- QUIC 将加密作为核心功能,确保所有传输的数据都是加密的,提高了数据安全性。
HTTPS加密过程
TLS/SSL协议: 作为TCP与HTTP之间的安全层,提供数据加密和身份验证。介于TCP与HTTP之间安全协议
基本算法
- 散列函数: 用于验证数据的完整性,如MD5、SHA-1和SHA-256,具有单向性和固定输出长度的特点。
- 对称加密: 使用相同的密钥进行加密和解密,常见算法包括AES和DES。密钥的安全性至关重要。
- 非对称加密: 使用一对公钥和私钥来实现身份认证和密钥协商,常见算法有RSA和ECC。非对称加密速度较慢,通常不用于大规模数据传输。
TLS/SSL的工作方式
- 客户端首先与服务端通过非对称加密交换信息,实现身份验证并协商对称加密密钥。
- 一旦协商完成,使用对称加密算法进行实际的数据传输,以提高效率