HTTP
- 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
- HTTP是一个属于应用层的面向对象的协议
Web与HTTP
- Web是一种基于超文本的HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统
- 建立在Internet上的一种网络服务,为浏览器在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将INternet上的信息节点组织称一个互为关联的网状结构
透过TCP/IP看HTTP
- HTTP协议是构建在TCP/IP协议之上的,是TCP/IP协议的一个子集
TCP/IP协议族
- TCP/IP协议其实是一系列与互联网相关联的协议集合起来的总称
- 分层管理是TCP/IP协议的重要特征
分层
- 应用层( HTTP,FTP,DNS等):一般是编写的应用程序,决定了向用户提供的应用服务。应用层可以通过系统调用与传输层进行通信
- 传输层(TCP,UDP):TCP和UDP是两个性质不同的协议,传输层通过系统嗲用向应用层提供处于网络连接中的两台计算机之间的数据传输功能,TCP相对可靠,UDP相对效率高
- 网络层:用来处理网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传输给对象
- 链路层:用来处理连接网络的硬件部分,包括控制系统硬件设备驱动、网卡等物理设备
HTTP数据传输过程
发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。而接受端接收数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除。
传输层-TCP三次握手
使用TCP协议进行通信的双方必须先建立链接,然后才能开始传输数据。为了确保链接双方可靠性,TCP协议采用了三次握手策略。
第一次握手
客户端发送带有SYN标志的连接请求报文,然后进入SYN_SEND状态,等待服务端确认
第二次握手
服务端接收到客户端的SYN报文段后,需要发送ACK信息对这个SYN报文进行确认。同时,还要发送自己的SYN请求信息。服务端会将上述的信息放在一个报文段(SYN+ACK报文段)中,一并发送给客户端,此时服务端将会进入SYN_RECV状态
第三次握手
客户端接收到服务端到SYN+ACK报文段后,会想服务端发送ACK确认报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED状态,完成TCP三次握手
三次握手确保客户端和服务端端发送接收能力都是正常的
DNS域名解析
通常我们访问一个网站,使用的是主机名或者域名来进行访问的,因为相对于ip地址,域名更容易记住。但是TCP/IP协议使用的是IP地址进行访问的,所以必须有个机制或者服务把域名转换成IP地址。DNS服务就是提供域名到IP地址之间的解析服务
回溯HTTP事务处理过程
Cookie
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie
客户端浏览器会把Cookie保存起来,当浏览器再请求该网站时,浏览器把请求的网址连同Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态
Session
Session是另一种记录客户状态的机制。保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上
客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了
保存Session ID的方式
- Cookie
- URL重写
- 隐藏表单
Session的有效期
- Session超时失效
- 程序调用HttpSession.invalidate()
- 服务器进程停止
Coolie与Session
- 存放位置不同
- 安全性(隐私策略)的不同
- 有效期的不同
- 对服务器的压力不同
认证方式
DIFEST认证
DIGEST认证同样适用质询/响应的方式,但不会像BASIC认证那样直接发送明文密码
SSL客户端认证
SSL客户端认证是借由HTTPS的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问是否来自已登陆的客户端
基于表单的认证
基于表单的认证方法并不是HTTP协议中定义的
使用由Web应用程序各自实现基于表单的认证方式
通过Cookie和Session的方式来保持用户的状态
HTTP的长连接与短链接
HTTP的长连接和短连接本质上是TCP长连接和短连接
- HTTP/1.0中,默认使用的是短连接。也就说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,结束就中断
- HTTP/1.1起,默认使用长连接,用以保持连接特性
内容协商机制
指客户端和服务端就响应的资源内容进行交涉,然后听过给客户端最为适合的资源。内容协商会以响应资源的语言,自负集,编码方式等作为判断的基准。
客户端驱动
客户端发送请求,服务器发送可选项列表,客户端作出选择后再发送第二次请求
服务器驱动
服务器检查客户端的请求头部集并决定提供哪个版本的页面
透明协商
某个中间设备(通常是缓存代理)代表客户端进行协商
断点续传和多线程下载
HTTP是通过在Header里两个参数实现的,客户端发请求时对应对是Range,服务器端响应时对应的是Content-Range
Range
用于请求头中,指定第一个字节的位置和最后一个字节的位置
Content—Range
用于响应头中,在发出带Range的请求后,服务器会在Content-Range头部返回当前接受的范围和文件总大小
HTTPS
HTTPS可以认为是HTTP+TLS
TLS是传输层加密协议,它的前身是SSL协议
HTTPS对性能的影响
协议交互所增加的网络RTT
基于HTTP的功能的追加协议
HTTP协议的瓶颈
一条连接上只能发送一个请求
请求只能从客户端开始。客户端不就接受除响应以外的指令
请求/响应头部不经压缩就发送
每次互相发送相同的头部造成的浪费较多
非强制压缩发送
HTTP2.0
性能增强的核心:二进制分帧
HTTP2采用二进制格式传输,取代了HTTP1.x的文本格式,二进制格式解析更高效。 多路复用代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过同一个TCP连接并发完成。在HTTP1.x中,并发多个请求需要多个TCP连接,浏览器为了控制资源会有6-8个TCP连接都限制。 HTTP2中
- 同域名下所有通信都在单个连接上完成,消除了因多个 TCP 连接而带来的延时和内存消耗。
- 单个连接上可以并行交错的请求和响应,之间互不干扰