GET 与 POST的区别
-
GET 方法传递的数据最多只能是 2KB 的数据。而 POST 方法传递的数据没有大小限制。
-
GET 是通过 URL 来传递参数,而 POST 是通过 HTTP 请求的消息体传递参数。
-
GET 请求会被浏览器缓存起来,可以通过浏览器的历史记录来获取,而 POST 请求不会被缓存。
-
GET 方式的请求数据会明文显示在 URL 中,而 POST 方式的请求数据在传输过程中是加密的。
-
GET 方式的请求只会产生一个 TCP 套接字连接,而 POST 方式的请求会产生两个 TCP 套接字连接,分别用于发送请求和接收响应。
-
GET 请求的操作对于服务器来说是“安全”的,意味着这个请求是无害的,只是获取一些信息。而 POST 对服务器来说不一定是安全的,因为它可能会改变服务器上的数据。
HTTP缓存技术
分协商缓存与强制缓存
1.强制缓存
以nest为例子
@Header('Cache-Control', 'max-age=3600') // 设置强制缓存,时间为 1 小时
async getData() {
const data = await getDataFromDB(); // 获取数据
return { data };
}
Cache-Control 设置相对时间 (Cache-Control 的优先级高于 Expires)
Expires 设置绝对时间
状态码带有 200 有from disk cache标志
2..分协缓存
状态码为304
以nest为例子
@Get('data')
@Header('Cache-Control', 'no-cache') // 禁用强制缓存
async getData(@Req() req) {
const data = await getDataFromDB(); // 获取数据
const hash = crypto.createHash('md5').update(JSON.stringify(data)).digest('hex');
req.res.set({
'Cache-Control': 'must-revalidate',
'ETag': hash,
});
if (req.headers['if-none-match'] === hash) {
return { data: null }; // 返回 304 响应,表示资源未修改
}
return { data }; // 返回正常响应结果
}
HTTP有哪些版本
HTTP/1.1,HTTP/2.0,HTTP/3.0
优点:简单、灵活易于扩展、跨平台
缺点:无状态、明文传输、不安全
HTTP性能
1.长连接
在1.0的短连接时代,每发一个请求都要新建一次TCP连接
1.1版本采用的长连接(持久连接)
特点:只要任意一端没有明确提出断开连接,则保持 TCP 连接状态
2.管道
即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
管道解决了请求的队头阻塞(客户端),但是没有解决响应的队头阻塞(服务器)。
HTTP 与 HTTPS 有哪些区别?
-
安全性:HTTP 是明文传输,数据传输过程中不进行加密,易被黑客窃取和篡改。而 HTTPS 在 HTTP 的基础上使用了 SSL / TLS 加密技术,对数据进行加密,进行安全传输,有效保护数据不被黑客窃取和篡改。
-
证书认证:HTTPS 在加密的基础上还实现了服务器的身份认证。通过数字证书可以证明网站的真实身份,防止中间人攻击。而 HTTP 协议并不对通信方进行身份认证。
-
端口号:HTTP 使用的默认端口号是 80,而 HTTPS 使用的默认端口号是 443。
-
性能:HTTPS 在数据传输过程中需要进行加密和身份认证等操作,导致相对于 HTTP 协议,其性能会有所下降。
-
缓存:由于 HTTPS 有证书认证和加密过程,在一些情况下不可缓存,而 HTTP 可以进行缓存。
HTTP三风险对应HTTPS三方案
窃听 ->信息加密
篡改 ->校验****机制
冒充 ->身份证书