http vs https
HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
一、
http 协议基于TCP协议进行传输,默认端口是80
https 基于TLS/SSL协议加密进行TCP传输,默认端口是443
二、特点
http协议特点:
1、简单快速
2、灵活
3、无状态,每次请求都是独立的,上一次请求和下一次请求互不相干。比如,你登录了某个网站,下一次请求理论上来说就不需要再登录了。http是无状态的,它不能知道你上一次请求已经登录过了。所以需要借助其他东西来完成这个登录认证。
三、状态记录 -- 登录验证
会话保持----session和cookie
session(服务器端) 和 cookie(客户端)
当客户端发起登录请求时,携带用户名密码,服务端验证通过以后将用户的信息保存在session里面,给一个session_id,服务的session_id 返回,保存在cookie里面,客户端登录成功以后携带cookie请求
四、http版本:
1、0.9版本 只有GET方法 非持久性连接
2、1.0 POST HEAD 方法 非持久性连接
3、1.1 PUT、OPTIONS、DELETE等方法,引用了持久连接
4、2.0 效率快,吞吐快
二进制分帧(Binary Format)- http2.0的基石
多路复用 -- 一个连接内可以处理多个请求,同时进行请求和响应
头部压缩 --
优先级 --
服务器端推流 (html,js,css) - index.html
在1.1之前 ,每次请求都会新建一个tcp连接。
五、http方法:
GET 请求获取 浏览器默认参数只能放在url中 /sc?username=root&passwd=123456,不会携带body数据
POST 新增 可以携带body数据
PUT 修改
DELETE 删除
CONNECT 连接
OPTIONS 查看服务器端的参数,比如支持哪些方
六、http状态码:
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
301 永久重定向
307 临时重定向
4** 客户端错误,请求包含语法错误或无法完成请求
400 客户端语法错误
401 用户验证失败
403 用户禁止访问
404 url找不到
405 方法不被允许
499 client has closed connection
5** 服务器错误,服务器在处理请求的过程中发生了错误
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported
七、HTTPS和HTTP的区别
HTTPS 相比 HTTP 多了一层 SSL/TLS
SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2
HTTP 传输面临的风险有:
(1) 窃听风险:黑客可以获知通信内容。
(2) 篡改风险:黑客可以修改通信内容。
(3) 冒充风险:黑客可以冒充他人身份参与通信。
八、https建立连接的过程
1、客户端向服务端发送一个招呼报文(hello),包含自己支持的SSL版本,加密算法等信息。
2、服务端回复一个招呼报文(hi)包含自己支持的SSL版本,加密算法等信息。
3、服务端发送自己经过CA认证的公开密钥
4、服务端向CA认证机构发送自己的公开密钥(FPkey)
5、CA认证机构使用自己的私有密钥给FPkey加上签名返回给服务端
6、服务端发送结束招呼的报文,SSL第一次握手结束。
7、客户端使用FPkey对自己的随机密码串(Ckey)进行加密并发送给服务端
8、客户端首先使用CA的公开密钥对FPkey的签名进行认证,确认密钥未被替换
9、客户端发送提示报文,后续报文将用Ckey进行加密。
10、客户端发送finished报文,表示该次发送结束
11、后续是否通信取决于客户端的finished报文能否被服务端成功解密
12、服务端发送提示报文,表示他之后的报文也会用Ckey进行加密
13、服务端发送finished报文。至此SSL握手结束,成功建立SSL连接。
14、客户端开始发送http请求报文
15、建立Tcp连接,开始传输数据
16、服务端发送http回复报文
17、客户端发送断开连接报文,并断开Tcp连接