Http 1.0 与 Http 1.1的区别:
1.0协议,客户端与web服务器建立连接后,只能获得一个web资源!
1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源!
Http请求的工作流程:
SYN和ACK
SYN(synchronous):TCP/IP建立连接时使用的握手信号
ACK(Acknowledgement):确认字符,确认发来的数据已经接受无误
TCP/IP三次握手的概念:
1、客户端发送syn包(syn = j)到服务器,进入SYN_SEND状态,然后等待服务器确认
2、服务器收到syn包,确认客户的syn(ack = j + 1),同时在自己也发送一个SYN包(syn=k), 即SYN + ACK包,服务器进入SYN_RECV状态
3、客户端收到SYN + ACK包,想服务器发送确认包ACK(ack = k +1),发送完毕后,客户端与服务端 进入ESTABLISHED状态,完成三次握手,然后两者开始传送数据
TCP建立连接要进行3次握手,而断开连接要进行4次
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B 端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
TCP三次握手过程
1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,
主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.
2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:
我已经收到你的请求了,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我
3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了
这样3次握手就完成了,主机A和主机B 就可以传输数据了
"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。
一、HTTP关系密切的协议:IP、TCP和DNS
1、负责传输的IP协议
IP网际协议位于网络层。IP的作用的就是把各种数据包传送给对方。确保传送到随访的两个条件:IP地址和MAC地址
使用ARP协议凭借MAC地址进行通行。
2、确保可靠性的TCP协议
TCP位于传输层,提供可靠的字节流服务。
所谓字节流的服务,是为了方便传输,将大块数据分割成报文段为单位的数据包进行管理。
确保数据能到达目标
TCP协议采用了三次握手策略。握手过程中使用了TCP的标志---SYN(synchronize)和ACK(acknowledment)
发送端首先发送一个带SYN标志得瑟数据包给对方,接收端收到后,会传一个带有SYN/ACK标志的数据包以示传达确认信息,最后,发送端再传回一个带ACK标志的数据包,代表握手结束。
3、负责域名解析的DNS服务
DNS服务是和Http协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。
二、HTTP协议
1、HTTP协议用于客户端和服务器端之间的通信。
2、通过请求和响应的交换达成通信。
3、HTTP是不保存状态的协议。
HTTP可使用的方法
1、GET:获取资源
GET方法用来请求访问已被URI识别的的资源。
2、POST:传输实体主体
POST方法用来传输实体的主体。
3、PUT:传输文件
4、HEAD:获取报文首部
HEAD方法和GET方法一样,只是不返回报文主题部分。
5、DELETE:删除文件
6、OPTION:询问支持的方法。
7、TRACE:追踪路径
8、CONNECT:要求哟过隧道协议连接代理
CONNECT方法要求与代理服务器通信是建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接字)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。
持久连接:
HTTP keep-alive:只要任意一端有明确提出断开连接,则保持TCP连接状态。
持久连接的好处在于减少TCP连接的重复建立和断开造成的额外开销,减少了服务器的负载。
在Http/1.1,所有的连接默认都是持久化连接。
管线化
持久连接使得多数请求以管线化方式发送成为可能。从前发送请求后序等待并得到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。
使用Cookie的状态管理
HTTP是无状态协议,它不对以前发生过的请求和响应的状态进行管理。
Cookie技术通过在请求和响应报文中写入coo kie信息来控制客户端的状态。
HTTP报文
用于HTTP协议交互的信息被称为HTTP报文。请求端的HTTP报文叫做请求报文,相应端的叫做响应段的报文。
HTTP报文大致可以分为报文首部和报文主题两个主体。
请求报文和响应报文的首部内容有以下数据组成
1、请求行
包含用于请求的方法,请求URI和HTTP的版本
2、状态行
包含表明响应结果的状态码,原因短语和HTTP版本
3、首部字段
包含表示请求和响应的各种条件和属性的各类首部。
编码提升传输效率
1、压缩传输的内容编码(常用)
gzip
compress
deflate
identity
2、分割发送的分块传输编码
把主体分块的功能称为分块传输编码(chunked tranfer coding)
3、发送多种数据的多部分对象集合
多部分对象集合包含:
1、multipart/form-data
在web表单文件上传时使用
2、multipart/byteranges
状态码206响应报文包含了多个范围的内容时使用。
content-Type:mutipart/form-data;
获取部分内容的范围请求
指定范围发送风格的请求叫做范围请求(range request)
Range:bytes=5001-10000
另外多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。
内容协商返回最合适的内容
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Accept-Language
用单台虚拟主机实现多个域名
由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内容完整指定主机名或域名的URI
通信数据转发程序:代理,网关,隧道
1、代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端。
缓存代理
代理转发响应,缓存代理回预先将资源的副本保存在代理服务器上。
当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前的缓存的资源作为响应返回。
缓存的有效期
即使存在缓存,也会因为客户端的要求,缓存的有效期等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器上获取资源。
客户端缓存
缓存不仅可以缓存在服务器中,还可以缓存在客户端浏览器。
2、隧道
隧道可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通行。隧道的目的是确保客户端与服务器进行安全的通信。
HTTP首部
HTTP请求报文
HTTP协议的请求和响应报文必定包含HTTP首部。
HTTP请求报文:方法,URI,HTTP版本,HTTP首部字段等部分构成
HTTP响应报文:
在响应中,HTTP报文由HTTP版本,状态码,HTTP首部字段3部分构成
HTTP首部字段结构
HTTP首部字段是由首部字段和字段值构成:
首部字段:字段值
Content-Type:text/html
keep-Alive:timeout=15,max=100
四种HTTP首部字段类型:
1、通用首部字段
请求报文和响应报文都会使用的首部
2、请求首部字段
3、响应首部字段
4、实体首部字段
通用首部字段
首部字段名 | 说明
---------------- | -------------------
Cache-Control | 控制缓存的行为
connection | 逐跳首部,连接的管理
Date |创建报文的日期时间
Pragma |报文指令
Transfer-Encoding|报文末端一览
Upgrade|升级为其他协议
Via|代理服务器的相关信息
Warning|错误通知
请求首部字段
首部字段名 | 说明
-------- | --------
Accept|用户代理可处理的媒体类型
Accept-Charset|优先的字符集
Accept-Encoding|优先的内容编码
Accept-Language|优先的语言
Authorization|Web认证信息
Expect|期待服务器的特定行为
From|用户的电子邮箱地址
Host|请求资源所在的服务器
if-Match|比较实体标记
if-Modified-Since|比较资源的更新时间
if-none-Match|比较实体标记
if-Range|资源未更新时间发送实体Byte的范围请求
if-Unmodified-Since|比较资源的更新时间
Range|实体的范围请求
Referer|对请求中URI的原始获取方
User-Agent|HTTP客户端程序的信息
响应首部字段
首部字段名 | 说明
---------|-----------
Accept-Ranges|是否接受字节范围的请求
Age|推算资源创建经过时间
ETag|资源的匹配信息
Location|令客户端重定向至指定URI
实体首部字段
首部字段名 | 说明
---------|-----------
Allow|资源可支持的HTTP方法
Content-Encoding|实体主体适用的编码方式
Content-Language|实体主体的自然语言
Content-Length|实体主体的大小
Content-Location|替代资源的URI
Content-Range|实体主体范围
Content-Type|实体主体的媒体类型
Expires|实体主体过期的日期时间
Last-Modified|资源的最后修改时间
Cache-Control指令简要讲
缓存请求指令
指令 |说明
------|------
no-cache|强制向源服务器再次验证
no-store|不缓存请求或响应的任何内容
max-age=「秒」|响应的最大age值
缓存响应指令
指令|说明
-------|------
public|可向任意的提供响应的缓存
private|仅向特定的用户返回响应
no-cache|缓存前必须先确定其有效性
no-store|不缓存请求和响应的任何内容
使用no-cache指令的目的是为了防止从缓存中返回过期的资源
Connection字段
1、控制不在转发给代理的首部字段
2、管理持久连接
控制不在转发给代理的首部字段(代理服务器)
GET /HTTP/1.1
Upgrage:HTTP/1.1
Connection:Upgrade
Connection:close
不持续连接
Pragma指令
是HTTP/1.1之前版本的历史遗留字段:等同于Cache-Control
Transfer-Encoding指令
HTTP/1.1的传输编码方式仅对分块传输编码有效。
Transfer-Encoding:chunked
Via指令
使用首部字段Via是为了追踪客户端与服务器端之间的请求和响应报文的传输路径
请求首部字段
Host指令
首部字段Host会告诉服务器,请求的资源所处的互联网主机名和端口号(必须)
if-Match指令
形如if-xxx这种样式的请求首部字段,都可称为条件强求
if-Match:”hansheng“
只有当if-match的字段值更ETag值匹配一致时,服务器才会接受请求
if-Modified-Since:Thu 10 Apr 2016 00:00:00 GET
只要是2016年4月10号之后更新过的资源,所以可以接受
Range指令
只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的制定范围
Referer指令
首部字段Referer会告知服务器请求的原始资源的URI
User-Agent指令
首部字段User-Agent将创建请求的浏览器和用户代理告诉服务器
响应首部字段
Accept-Ranges指令
首部字段Accept-Range是用来告知客户端服务器是否能处理范围请求,以指定获取服务器某个部分的资源
ETag
首部字段ETag能告知客户端实体表识,资源更新时,有统一的算法规则。
Location
使用首部字段Location可以将响应接收方引导至某个与请求URI位置不同的资源。
确保Web安全的 HTTPS
HTTP的缺点
通信使用明文(不加密),内容可能会被窃听;
不验证通信方的身份,因此可能遭遇伪装;
无法证明报文的完整性,所以可能已遭篡改。
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTPS并非是应用层的一种新协议。只是普通HTTP通信接口部分用SSL和TLS协议替代而已。
SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。所以说SSL是当今世界上应用最为广泛的网络安全技术。
由于HTTPS需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源;
和HTTP相比,SSL通信部分消耗网络资源。而SSL通信部分,又因为要对通信进行处理,所以时间上有延迟了;
和HTTP相比,网络负载和速度上会变慢2~100倍。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
HTTP状态码
1、100~199 : 成功接受请求,客户端需提交下一次请求才能完成整个处理过程
2、200: OK,客户端请求成功
3、300~399:请求资源已移到新的地址(302,307,304)
4、401:请求未授权,改状态代码需与WWW-Authenticate报头域一起使用
5、403:Forbidden,服务器收到请求,但是拒绝提供服务
6、404:Not Found,请求资源不存在,这个就不用说啦
7、500:Internal Server Error,服务器发生不可预期的错误
8、503:Server Unavailable,服务器当前不能处理客户端请求,一段时间后可能恢复正常
HTTP的功能追加协议
HTTP的瓶颈
一条连接上只能发送一个请求;
请求只能从客户端开始,客户端不可以接收除响应以外的指令;
请求/响应首部未经压缩就发送,首部信息越多延迟越大;
发送冗长的首部,每次互相发送相同的首部造成的浪费较多;
可任意选择数据压缩格式,非强制压缩发送。
SPDY
SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作。同时,考虑到安全问题,SDPY规定通信中使用SSL。
多路复用流;
赋予请求优先级;
压缩HTTP首部;
推送功能;
服务器提示功能。
下章讲解:TCP/IP协议精讲,敬请期待。。。。。。