http 和 https 发展历程。相关概念
一、HTTP协议的演进
1.HTTP 0.9版本 -> HTTP 1.0版本 -> HTTP 1.1版本
由最开始是由一个GET命令 -> 增加POST和HEAD命令 -> 增加了PUT、PATCH、HEAD、 OPTIONS、DELETE等命令;
HTML页面(不支持别的) ->其他二进制文件(例如图片、视频)
最开始仅支持单一连接 (传输完毕及关闭,一次请求就是一次TCP连接) -> Connection: keep-alive(可以保持连接)-> 默认保持连接 (还引入了管道机制,就是说在一个TCP连接里可以同时发送多个HTTP请求)
HTTP 2版本 暂不介绍,自行了解。下一代http协议。
HTTPS是HTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS协议进行了加密处理。
二、HTTP协议基础概念
HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
中文名: 超文本传输协议
作 用:规定WWW服务器与浏览器之间信息传递规范
基 础:架构在TCP协议上
工作层:应用层
三、HTTP协议的特点
1.HTTP协议是无状态的
就是说每次HTTP请求都是独立的,任何两个请求之间没有什么必然的联系。但是在实际应用当中并不是完全这样的,引入了Cookie和Session机制来关联请求。
比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登陆该网站,但是服务器并不知道客户关闭了一次浏览器。 由于Web服务器要面对很多浏览器的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息。这有可能出现一个浏览器在短短几秒之内两次访问同一对象时,服务器进程不会因为已经给它发过应答报文而不接受第二期服务请求。
2.多次HTTP请求
在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,例如,CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源。现在的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成干上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
3.基于TCP协议
HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。底层是基于TCP实现的。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。
四、HTTPS
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
所有的请求信息都采用了TLS加密,如果没有秘钥是无法解析传输的是什么信息
1:对称加密 加密和解密都是通过同一个秘钥进行的 (传输过程中会明文告诉客户端用了对称加密,密钥也告诉了。就跟没告诉一样)
2:非对称加密原理图 私钥只有一个人有,而公钥可以发给所有的人。(把公钥发送出去,只有私钥才能解密)
3:hash加密 (认证服务器发送来的公钥信息是否和客户端添加受信任的CA证书上的一致,保证没有被篡改)
如何让A、B客户端安全地得到公钥?
(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了
五、状态码
1xx:信息
2xx:成功
3xx:重定向
304 Not Modified未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
4xx:客户端错误
403.1执行访问被禁止。
404 Not Found服务器无法找到被请求的页面。
5xx:服务器错误
500 Internal Server Error请求未完成。服务器遇到不可预知的情况。
502 Bad Gateway请求未完成。服务器从上游服务器收到一个无效的响应。(网关错误)
504 Gateway Timeout网关超时。