1.HTTP简介
是超文本传输协议,是基于TCP协议来传输数据,属于面向对象的协议。
2.主要特点
-
速度快,常用请求方式有GET,POST,每种方法规定了客户与服务器联系的类型不同。
-
灵活:允许传输任意类型的数据。
-
无连接:每次连接只处理一次请求。
-
无状态:对事务处理没有记忆能力,会导致处理后续数据需要前面的数据,,则需要重传,可能导致数据量增大。
3.GET和POST的区别
- GET提交数据会把数据附在URL后面(把数据放在HTTP协议头中),POST请求会把数据放到PHTTP包体中
- GET提交有数据大小的限制,POST理论不受限制(为受WEB服务器规定限制)
- POST更安全<安全不到哪儿去>
- GET一般执行请求数据的操作,POST执行操作数据的操作。
4.HTTP工作原理
- 客服端连接到服务端:一个HTTP客户端与服务器的HTTP端口(默认80)建立一个TCP套接字连接(?不懂,待研究)
- 发送HTTP请求:通过TCP套接字客服端向服务端发送一个文本请求报文,报文包括请求行,请求头部,空行,请求数据组成
- 服务器接受请求并返回HTTP响应:服务器解析请求,定位请求资源,将资源复本写到TCP套接字,又客户端读取,一个响应由:状态行,响应头部,空行,响应数据组成
- 释放TCP连接:若connection为close,则服务器主动关闭TCP连接,客服端被动关闭连接,TCP连接释放;ruoconnection为keepalive,则连接会保持一会,在保持时间内可以继续接受请求
- 客户端解析HTML内容:首先解析状态行,查看是否请求成功,后解析每一个响应头。
HTTP缺陷
通信使用明文<不加密>,内容可能被窃听
防范方式:
- HTTPS,HTTP通过和SSL/TLS的组合使用,加密HTTP的通信内容。
- 将HTTP参与通信的内容本身进行加密<内容可能被篡改>
不验证通信方身份,身份可能被伪造
HTTP协议通信时,不存在确认通信方身份的步骤,所有人都可以发起请求,服务器都会响应请求。 解决方法:SSL证书手段,用于确定通信方
无法证明报文的完整性,有可能被篡改
防止篡改方法:MD5/SHA-1等校验,无妨确保正确。
HTTPS
HTTPS = HTTP + 加密 + 认证 + 完整性保护,除HTTP 其他操作在SSL/TLS协议进行,换言之,HTTPS是HTTP通信接口用SSL/TLS协议代替。
SSL
SSL 采用一种公开密钥加密的加密处理方式,加密算法是公开的,密钥是保密的。
对称密钥加密:采用一个密钥加密解密的方式,共享密钥<密钥不能保证安全>。 非对称密钥加密:一把公开密钥,一把私有密钥,公开密钥加密,私有密钥解密。
HTTPS:采用共享密钥加密和公开密钥加密两者并用的混合加密机制。在交换密钥时用公开密钥,之后用共享密钥加密方式<公开密钥速度慢>。
SSL证书
- 公开密钥的正确性无法验证,所以需要正经的机构颁发的公开密钥证书<EVSSL证书>。
- 使用客户端证书,来验证服务器通信的对方始终是预料之内的客户端。
- 自签名证书,由自认证机构颁发的证书<无法消除伪装可能性>。
HTTPS通信步骤
- 客户端发送ClientHello报文开始SSL通信,报文中包含客户端支持的SSL的指定版本、加密组件、列表<使用的加密算法、密钥长度等>。
- 服务端进行SSL通信,返回Server Hello报文应道。报文中包含SSL版本和加密组件<从客户端加密组件内筛选>。
- 服务端发送Certificate报文。报文包含公开密钥证书。
- 服务器发送Server Hello Done报文通知客户端最初SLL握手协商结束。
- 客户端发送Client Key Exchange报文回应。报文中包含加密通信中使用的随机密码串,已被公开密钥加密。
- 客户端继续发送Change Cipher Spec报文。报文提示服务器以后采用Pre-master secret密钥加密。<更换到共享加密>。
- 客户端发送Finished报文。
- 服务器发送Change Cioher Spec报文。
- 服务器发送Finished报文。
- 服务端和客户端Finished报文交换之后,SSL连接建立完成。此后进行HTTP请求。
- 应用层协议通信。发送HTTP响应。
- 最后客户端断开链接,发送close_notify报文。之后发送TCP FIN报文关闭TCP的通信。