HTTP协议的出现主要是为了解决文本传输的难题(大家互相共享文件没有一个规范),最初的设计理念是:借助多文档之间的关联形成超文本,成为相互参阅的WWW(万维网)
计算机和网络设备要通信,如何探测设备,怎么开始通信,什么语言,什么时候结束通信,一系列都要有规范,统称为TCP/IP协议族(包含HTTP,TCP,IP,UDP,DNS)
与互联网相关的协议加起来统称为TCP/IP,也有其他两种定义,这里不赘述。
TCP/IP协议按层次分为应用层,传输层,网络层,数据链路层
分层的好处:1.每层有修改只修改某一层 2.分开设计,设计简单
应用层:决定了向用户提供应用服务时通信的活动(FTP,DNS),HTTP也处于这一层
传输层:传输层对上层应用层,提供处于网络连接中的两台计算机进行数据传输(TCP,UDP)
网络层:处理网络上流动的数据包,规定了数据包通过哪条路径传给对方(IP协议:把各种数据包传送给对方,需要知道IP地址和MAC地址)
链路层:处理连接的硬件部分,通俗理解为服务于ip包的交通工具
访问一个页面的过程:客户端在应用层发出请求,之后传输层把这个请求分割成多个报文,各报文打上序号,到网络层加上mac地址,发给链路层,链路层传给对面,对面一层一层拆包删首部东西。
ARP协议:根据对方的IP地址反查出对应的MAC地址
发送信息像寄快递,没法知道完整的动向,一直中转。
TCP协议:将信息拆分为报文段(拆分就是可靠的字节流服务),并确定对方一定收到。确保方法:三次握手
发送端发带有syn标志的包,接收端收到之后发带syn/ack标志的包,发送端发带有ack标志的包,任意阶段收不到都以相同顺序再发包。
DNS:域名到IP之间的解析服务
请求报文:请求方法,uri,协议版本,首部字段,内容实体
响应报文,协议版本,状态码,原因短语,日期,首部字段,主体
HTTP是 不保存状态的实体,有时需要保存状态,比如登录京东之后买东西,这就有了cookie
持续连接:以前传输的数据较少,每次传输完一个东西就要TCP连接一次,比如发送一个文件和图片,都会分别建立TCP连接,增加开销,因此持续连接就很有必要。
持续连接(keep-alive)特点:只要任一端没有明确提出断开连接,则保持TCP连接状态。
持续连接使管线化成为可能,不用等待也可以发下一个请求,做到同时并行发送多个请求。
一个web服务器上搭建多个web站点,访问这个服务器上的两个网站时,DNS解析之后IP一样,因此发送时要带具体的uri信息
代理:接受客户端请求,转发给服务端。
每次代理之后都会在加入代理服务器的Via首部字段再转发
网关:接受客户端请求信息,像源服务器一样处理。网关能使通信道路上的服务器提供非HTTP协议服务
持有资源实体的服务器称为源服务器
隧道:在相隔远的客户端和服务器之间进行中转,并保持双方通信连接的程序。主要是确保客户端和服务器安全通信
使用代理服务器的原因:利用缓存减少网络宽带的流量,内部对特定网站的访问控制。
代理主要按两种方法分类:是否利用缓存,是否会修改报文
HTTPS:HTTP+SSL,SSL:第三方机构颁布的证书,确定对方身份
HTTPS=HTTP+加密+认证+完整性保护
共享密钥只有一个公钥,是对称加密。公开密钥采用非对称加密,发送者用公开的公钥加密,接收者用私有密钥解密。
HTTPS采用两个机制混合的方法,结合效率和安全性,在交换密钥环节使用公开密钥加密方法,之后的建立通信交换报文阶段则使用共享密钥加密方式。
但是,公开密钥加密还是有一定问题的,比如建立公开密钥通信时,原有的公开密钥被攻击者替换掉了,无法证明收到的公开密钥就是原先发送者发的。
因此引入了数字证书
客户端也有证书,但没法让所有用户统一搞,所以有的特殊业务才会引用,例如网银的终端,有客户端证书。有个问题是这只能证明客户端的存在,而无法证明是本人的使用。
HTTPS慢主要是SSL,SSL两个方面慢,一种是通信慢,因为加入了SSL通信,另一方面是因为加密处理,cpu负载大
很多不用https的原因,加密消耗资源,证书要钱。