HTTP的全称是 Hyper Text Transfer Protocol,中文名叫作超文本传输协议
HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接
HTTPS的全称是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,简称为HTTPS,安全基础是SSL
SSL主要作用分两种:
- 建立一个信息安全通道来保证数据传输的安全
- 确认网站的真实性,凡是使用了HTTPS的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过CA机构(证书颁发机构(CA, Certificate Authority))颁发的安全签章来查询。
HTTP状态码,你知道哪些
-
1xx表示通知信息,如请求收到了或正在进行处理
-
2xx表示成功。如接受或知道了
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
-
3xx表示重定向,如要完成请求还必须采取进一步的行动
301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
-
4xx表示客户的差错,如请求中有错误的语法或不能完成
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问 forbidden
404:服务器无法找到对应资源
-
5xx表示服务器的差错,如服务器失效无法完成请求
500:服务器内部错误
503:服务器正忙
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca(证书颁发机构(CA, Certificate Authority))申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
按F12查看http请求
-
第一列Name:请求的名称,一般会将URL的最后一部分内容当作名称
-
第二列 Status:响应的状态码,这里显示为200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
-
第三列Type:请求的文档类型。 document,代表我们这次请求的是一个HTML文档,内容就是一些HTML代码
-
第四列 Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
-
第五列Size:从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示 from cache
-
第六列Time:发起请求到获取响应所用的总时间。
-
第七列 Waterfal:网络请求的可视化瀑布流
点击这个条目,会出现
-
首先是 General部分
- Request URL为请求的URL,
- Request Method为请求的方法,
- Status Code为响应状态码,
- Remote Address为远程服务器的地址和端口,
- Referrer Policy为 Referrer判别策略。
-
可以看到,有 Response Headers和 Request Headers,这分别代表响应头和请求头。
请求头里带有许多请求信息,例如浏览器标识、 COOKIEs、Host等信息,这是请求的一部分,服务器会根据请求头内的信息判断请求是否合法,进而作出对应的响应。
图中看到的 Response Headers就是响应的一部分,例如其中包含了服务器的类型、文档类型、日期等信息,浏览器接受到响应后,会解析响应内容,进而呈现网页内容。
HTTPS通信过程
-
A向B发送请求,连接到B的443端口。发送信息主要是随机值1和加密算法集合
-
B收到信息给予响应握手信息。包括随机值2和加密算法集合中的子集
-
随即B继续发送响应报文数字证书。服务器端必须要有一套数字证书,可以自己制作也可向组织公司申请。
区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书**,这个证书其实就是公钥**,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
-
客户端解析证书,由客户端的TLS验证证书是否有效,然后生成一个随机值(预主密钥)
-
然后客户端通过随机值1、随机值2和预主秘钥组装会话秘钥。通过证书的公钥加密会话秘钥
-
传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
-
服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同
-
客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。
-
同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。