我的HTTP和HTTPS

注释:本文章架构跟随小林coding,在此基础上加深个人理解

小林coding:https://xiaolincoding.com/network/2_http/http_interview.html

HTTP基本概念

HTTP是什么?

http的中文名是超文本传输协议,超文本就是html,css,照片视频等不仅限于文档的资源,他是一个在计算机世界专门在两点间传输超文本数据的约定和规范,为什么说两点,因为不止是客户端和服务端之间传输,也可以是服务端之间传输。

HTTP常见的状态码?

状态码可以分为五大类

|-------|------------------------------|-----------------|
| 类别 | 含义 | 常见状态码 |
| 1** | 提示信息,表示目前是协议处理的中间状态,还需要后续的操作 | |
| 2** | 成功,报文已经收到并被正确处理 | 200 204 206 |
| 3** | 重定向,资源位置发生变动 | 301 302 304 |
| 4** | 客户端错误,请求报文有误,服务器无法处理 | 400 403 404 |
| 5** | 服务器错误,服务器在处理请求时内部发生错误 | 500 501 502 503 |

HTTP常见字段有哪些?

**Host:**表示请求的域名

Content-Length:服务器响应数据的长度

Connection:如果这个字段的值为Keep-Alive,说明开启长连接,所谓长连接,就是只用进行一次TCP握手,然后就可以在发生中断请求以前进行没有次数限制的HTTP请求响应,HTTP1.1默认都是开启的,但是老版本需要手动设置。

Content-Type:表示服务器响应数据的格式

GET与POST

GET和POST的区别?

GET在RFC规范里是从服务器获取指定的资源,一般是只读操作,而且参数是在url中的,而且浏览器会对url长度作出限制,而POST是根据请求报文中的内容对指定资源做出处理,参数是写在报文body中,且无长度限制。

GET和POST方法都是安全和幂等吗?

先说安全,从两个方面来讲,第一点是对于我们使用者来讲,我们要发送的数据安全吗?显然使用get是最不安全的,因为我们的参数信息就在url路径中,有眼睛就可以看到,难道post就是安全的吗?对一些懂行的人来说,也不安全,因为在http报文中的信息是明文,也就是未经加密的数据。另一个人角度就是对于服务器的资源来讲,使用get请求,因为是只读操作,所以并不会对服务器的资源造成影响,是安全的,对于post请求来讲就不是了,因为他会对服务器的资源造成修改,所以不安全。当然按照这个角度安不安全取决于你对于服务器资源的操作,只读就安全,更新就不安全。

再说幂等,什么是幂等?就是多次操作,可以获得同一个结果,显然易见,get幂等,因为只读,post非幂等,因为更新,当然这些说法是按照RFC规定的,在现实中谁会管你怎么操作呢?所以安不安全,幂不幂等,取决于你对服务器资源的操作。

HTTP特性

HTTP1.1的优点有哪些?

首先HTTP1.1的优缺点可以一起说,可以说是一把双刃剑

第一点:无状态,所谓无状态,就是客户端信息不会存储在服务器,这极大的节省了服务器的资源,但是也面临一些问题,比如对一些需要连续验证客户端权限的操作:注册-登录-购买-付款等等,这就需要在每一步的操作中都要去对客户端的权限进行校验,但是这个问题已经有解决办法了,就是Cookie,这个就不介绍了,之前的文章已经介绍过了,一个携带SessionID的存储机制。

第二点:明文传输,明文传输的最大优点方便查阅,但同时这也是他的最大缺点,会在下一章讲解解决方法。

还有一个优点就是HTTP1.1结构简单,头部header+报文body,而且参数是key-value形式。

HTTP1.1的缺点有哪些?

缺点就是明文传输,相当于裸奔,不穿衣服,解决方案就是使用加密协议,SSL/TSL加密协议,这是HTTPS协议和HTTP协议最本质的区别,SSL/TSL协议是怎么加密的呢?对称与非对称混合机加密,现在说有点晦涩,但是后文会讲解。

HTTP/1.1的性能如何?

长连接:在HTTP1.0采用的是串行请求,即短连接,在一次请求-响应之后,需要重新建立TCP三次握手,这就麻烦了,所以1.1采用了长连接的形式,也就是只要进行一次TCP三次握手,就可以进行多次的请求-响应,除非进行终端请求。

管道传输:因为采用了长连接,这使得管道传输成为了可能,使用管道传输,就可以不用等待上一次请求的响应,就可以直接进行第二次请求,可以减少整体的响应时间,但是这也带来了另一个问题,就是队头阻塞,假如服务器处理我的第一个请求时间很长,那么后续的请求就被阻塞了,这就是对头阻塞。

HTTP缓存技术

HTTP缓存的实现方式?

强制缓存,协商缓存

强制缓存(强缓存)

浏览器判断通过HTTP头部的字段(Cache-Controller,expire)判断本地缓存的资源是否过期,若果没有过期,则可以使用,使用缓存的主动性在浏览器。状态码为200,则表示使用了强缓存。

协商缓存(弱缓存)

如果本地缓存的资源过期,那么就要浏览器就要和服务端进行协商,服务端要判断缓存资源和服务器资源是否一致,如果一致,接着使用,若不一致,返回新的资源。状态码为304,则表示使用了弱缓存。

HTTP与HTTPS

二者的区别

HTTPS在HTTP的基础上使用了SSL/TLS协议,HTTP端口为80,HTTPS端口为443,HTTPS使用了CA,数字签名的技术。

HTTPS解决了HTTP哪些区别?(对称和非对称算法)

解决了明文传输所带来的安全问题:信息加密,校验机制,安全证书。那是怎么解决的呢?

先说信息加密,TSL采用对称和非对称混合算法进行加密,先介绍一下什么是对称和非对称算法:

对称算法:采用相同的私钥进行加密和解密,这个私钥必须保密,不安全但快。

非对称算法:采用公钥和私钥,公钥公开,私钥私密,安全但慢,加密和解密没有规定使用哪个钥匙,使用不同的钥匙会有不同的效果,第一种情况:使用私钥加密,公钥解密,如果公钥可以解密,就可以确定发送方的正确性,因为私钥不可泄露,也保证了消息来源的正确性。第二种情况:使用公钥加密,私钥解密,保证了内容传输的安全,因为如果使用私钥解密成功,就确保了该内容是由配对的公钥进行加密的。

再说校验机制,校验机制的核心是哈希算法+数字签名,所谓哈希算法,就是对发送的内容计算一个哈希值,而且不能通过哈希值推导出内容,服务端会通过相同的哈希算法计算出收到内容的哈希值,这不就是我们之前说的对称加密吗,这个哈希算法就是密钥,然后比较这个哈希值是否相同,但是如果内容和哈希值都被篡改了呢?这种情况是很可能发生的,所以服务端为了杜绝这个隐患,就要判断发送方的正确性,就要使用到非对称算法,使用私钥对哈希值进行加密,这就是数字签名,然后将内容和数字签名一起发送给服务器。

过程如下:

然后是安全证书,现在又出现一个问题,如果这对公私钥被伪造,是不是又出现新的问题了,所以这对钥匙该如何保证合法性呢,这就引入了安全证书,为什么安全证书有这么大本事呢,因为是一个叫做CA的机构颁发的,类似于发身份证的警察局,没有人会质疑吧。这份安全证书包括了:内容+公钥+数字签名,服务器拿到证书后,会校验其合法性,所以就不用担心公私钥被伪造了。

HTTPS是如何建立连接的?

首先客户端向服务端索要并验证加密的公钥,然后双方协商会话的私钥,然后使用私钥进行通信,前两步就是TLS的握手阶段。

HTTP的演变

HTTP1.1相比于HTTP1.0提高了什么性能?

HTTP1.1采用了长连接,不必经常建立TCP连接,减少了开销,而且HTTP1.1实现了管道传输,发送请求可以连续发送,不必等前一个请求响应,但是有可能会造成服务端阻塞。

HTTP2做了什么优化

HTTP2实现了并发传输,在管道通信中又引入了流的概念,缓解了服务端对头阻塞的问题。HTTP2的报文采用了二进制的数据,摒弃了HTTP1.1报文的纯文本格式,增加了传输效率。

HTTP3做了什么优化

在之前版本的HTTP协议中不管怎么样,我们都会面临阻塞的问题,根本原因是HTTP所依赖的TCP协议,所以HTTP3使用了UDP协议,解决了阻塞的问题。

相关推荐
whoarethenext43 分钟前
初始https附带c/c++源码使用curl库调用
服务器·c++·qt·https·curl
帽儿山的枪手3 小时前
socket套接字你搞清楚了吗
网络协议·面试
白山云北诗4 小时前
什么是 DDoS 攻击?高防 IP 如何有效防护?2025全面解析与方案推荐
网络协议·tcp/ip·ddos·高防ip·ddos攻击怎么防·高防ip是什么
Zz_waiting.5 小时前
网络原理 - 10(HTTP/HTTPS - 1)
网络·http·https
洁✘6 小时前
web基础与http协议
网络·网络协议·http
我要喝可乐!8 小时前
OkHttp源码梳理
网络协议·http·okhttp
wang090710 小时前
网络协议之为什么要分层
网络·网络协议
w236173460111 小时前
HTTP vs HTTPS:传输协议的安全演进与核心差异
安全·http·https
穿条秋裤到处跑11 小时前
前端连接websocket服务报错 Unexpected response code: 301
websocket·网络协议·nginx