一. HTTP协议
1. HTTP介绍
HTTP协议是Hyper Text Transfer Protocol (超文本传输协议)
作用: 根据这个协议把超文本(除了文字还有图片, 连接, 甚至音乐视频的文本 也就是网页)从万维网服务器传输到本地,
HTTP是在TCP/IP协议通信协议的基础上来传数据的, 这里的数据指HTMl文件, 图片文件, 查询结果等, 不涉及数据包(packet)传输.
HTTP协议主要规定了客户端和服务器之间的通信格式, 默认使用80端口
2. HTTP解析
内容:
①. HTTP特点
简单快速, 灵活, 无连接, 无状态
简单快速: 用户要什么资源,就向服务器请求什么资源, 用户只要传请求方法和路径就可以了, 因为简单所以快速
灵活: HTTP允许传任何类型的数据对象
无连接: 每次连接只处理一个请求, 处理完客户的请求, 收到客户的应答后, 就断开连接. 这样可以节省传输时间
无状态: HTTP协议是无状态的, HTTP协议自身不会保存请求和响应之间的通信状态, 任何两次请求之间都没有依赖关系,每个请求都是独立的.
得益于上面优点, HTTP可以更快地处理大量事务, 而且确保了协议的可伸缩性
②. HTTP报文
HTTP报文: 请求报文, 响应报文
请求报文组成部分: 请求行(request line), 请求头(header), 空行, 请求体
响应报文组成部分: 状态行, 响应头部, 空行, 响应体
请求报文:
请求报文:
1. 请求行
说明请求类型, 要访问的资源以及所使用的HTTP版本 (请求类型+url+HTTP版本)
POST /chapter1/user.html HTTP/1.1
以上代码中POST代表请求方法, /chapter1/user.html 表示url HTTP/1.1 是协议和协议版本
2. 请求头
由关键字/值组成, 每行一对, 关键字和值用英文冒号:分隔
内容: 客户端请求的信息, 包含许多有关客户端环境和请求正文的有用信息
Host: 表示主机, 虚拟主机
Connection: HTTP/1.1 增加的, 使用keepalive, 即持久连接, 一个连接可以发多个请求
User-Agent: 请求发送者, 兼容性以及定制化需求
3. 空行
最后一个请求头之后是一个空行,表示请求头已经结束, 接下来的是请求正文
4. 请求体
可以承载多个请求参数的数据
③HTTP请求方式
GET与POST的区别
④HTTP状态码
状态码由3位数字组成, 第一个数字定义了响应的类别
1xx: 指示信息--表示请求已接收, 继续处理
2xx: 成功--表示请求已被成功接收, 理解, 接受
3xx: 重定向--要完成请求必须进行跟进一步的操作
4xx: 客户端错误--请求有语法错误或请求无法实现
5xx: 服务端错误--服务器未能实现合法的请求
⑤持久连接
HTTP协议的初始版本中, 每进行一次HTTP通信就要断开一次TCP连接.以前都是传输容量很小的文本, 而现在随着HTTP的普及,文档包含了大量图片.如果使用浏览器访问一个包含多张图片的HTML页面时, 在发送请求访问HTML页面资源的同时, 也会请求该HTML页面里包含的其他资源. 每次的请求都会造成无谓的TCP连接建立和断开, 增加通信量的开销.
解决上诉TCP连接问题,的方法便是HTTP/1.1持久连接(HTTP Persistent Connections)
持久连接的特点是: 只要任意一端没有明确提出断开连接, 则保持TCP连接状态
持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销, 减轻了服务器的负载. 另外, 减少开销的那部分时间,使HTTP请求和响应能更早结束. 这样Web页面显示速度也就相应的提高了.
在HTTP/1.1中所有连接都是默认持久连接
⑥管线化
持久连接使得多数请求以管线化方式发送成为可能. 以前发送请求后需等待并受到响应, 才能发送下一个请求. 管线化技术出现后, 不用等待也可以发送下一个请求.
这样就能够做到同时并行发送多个请求, 而不需要一个接一个等待响应了. 通俗地讲, 请求打包一次传输过去, 响应打包一次传递回来. 管线化的前提是持久连接.
比较:
未使用持久连接:
建立TCP连接->HTTP请求1->HTTP响应1->断开TCP连接->建立TCP连接->HTTP请求2->HTTP响应2->断开TCP连接
使用持久连接未使用管线化:
建立TCP连接->HTTP请求1-HTTP响应1->HTTP请求2->HTTP响应2->断开TCP连接
使用持久连接和管线化:
建立TCP连接->HTTP请求1->HTTP请求2->HTTP响应1->HTTP响应2->断开TCP连接
二. HTTPS协议
1. HTTP的不足
2. 什么是HTTPS协议
添加了加密和认证机制的HTTP就是HTTPS.使用HTTPS通信的网站在浏览器上网址左边有一个锁?符号.
3. HTTPS和HTTP的比较
可见, HTTPS并非是应用层的一种新协议. 只是HTTP通信接口部分使用了SSL(Secure Socket Layer, 安全套接层) 或TLS(Transport Layer Security)协议替代而已.
采用SSL后, HTTP就拥有了HTTPS的加密, 证书和完整性保护这些功能. 需要注意的是: SSL是独立于HTTP协议的.
4. HTTPS通信过程中的加密技术
加密技术是HTTPS组成的重要技术. 常见加密技术有: 共享密钥加密和公开密钥加密
①共享密钥加密(对称密钥加密)
共享密钥加密又叫对称密钥加密, 加密和解密使用同一个密钥.加密算法是公开的, 密钥保密, 加密和解密都要用到密钥.
5个常用对称加密算法: DES, DESede, AES, IDEA, PBE
②公开密钥加密(非对称密钥加密)
公开密钥加密使用一对非对称密钥: 私有密钥(private key) 和 公有密钥(public key).
私有密钥在自己手里, 共有密钥可以随意发布.
例: A有公钥密钥 B有公钥密钥
B要发信息给A, A把A公钥给B, B用A公钥加密, 密文需要A密钥解密, A收到后用A密钥解密
HTTPS采用混合加密机制
混合加密机制能够将两种加密方式各自的优势结合起来,即保证了通信过程中的安全性,又保证了通信过程的效率。通常,在交换密钥环节使用非对称密钥加密方式,之后的建立通信交换报文阶段则使用对称密钥加密方式。
但是这样仍然有个问题就是:这个public key是否就是真正的public key,有不有可能在传输过程中被攻击者替换了.于是为了解决这个问题,出现了第三方机构--数字证书认证机构(CA, Certificate Authority).它站在客户端与服务器都可信赖的立场上,为服务器端颁发证明“这个公开密钥确实时那个服务器的”公开密钥证书,同时对该公开密钥进行数字签名。客户端在在收到服务器公钥时会对公钥上的数字签名进行验证,如果验证通过,客户端便可明确两件事:一,认证服务器的公开密钥的是真实有效的数字证书认证机构。二,服务器的公开密钥是值得信赖的。
HTTPS 中还可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用跟服务器证书如出一辙。
在PC端首次登陆支付宝、网上银行等网页时,其是不是让你安装一些东西?没错,这些“东西”就是支付宝、银联等提供的客户端证书。通过客户端证书,服务器就能知道它正在响应的“确实是那个客户端”,这样就保证了双方通信的安全性。