1、http1.1请求处理流程
http属于TCP/IP模型中的应用层协议,而两个应用程序(此处指浏览器与服务器)之间要进行相互通信,首先得建立TCP连接,然后浏览器才能向服务器发送请求信息,服务器在接受到请求信息后,返回相应的应答信息,浏览器接收到来自服务器的应答信息后,对这些数据进行解释执行。
(1)在http1.0的版本中,浏览器的每次请求(即对每个页面的访问)都要求建立一次单独的TCP连接,在处理完每一个的请求后,就自动释放连接。如下图:
也就是说,在http1.0中,当建立连接后,客户端发送一个请求,服务器端返回一个信息后就关闭连接,当浏览器下次请求的时候又要建立连接,显然这种不断建立连接的方式,会造成很多问题。
(2)http1.1则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。如下图所示:
也就说,在http1.1中,引入了持续连接的概念,通过这种连接,浏览器可以建立一个连接之后,发送请求并得到返回信息,然后继续发送请求再次等到返回信息,即客户端可以连续发送多个请求,而不用等待每一个响应的到来。
(3)Http工作过程:
a、客户机(web浏览器)与服务器建立TCP连接(TCP的三个握手)
b、Web浏览器向web服务器发送请求Http命令
c、Web服务器接受请求并返回http响应
d、服务器关闭TCP连接(TCP的四次挥手)
e、客户端浏览器解析HTML内容
注意:如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive时,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
2、http1.1请求方法
在http协议中,http请求可以使用多种请求方法,这些方法指明了要以何种方式来访问Request-URL所标识的资源。http1.1支持的请求方法如下:
(1)Get
Get方法用于获取由Request-URL所标识的资源的信息。Get方法时默认的http请求方法。
(2)Post
请求服务器,让其接受请求中的实体,以作为被请求资源的一个新的从属物。
该方法的响应是不可缓存的。
(3)Put
Put方法请求服务器去把请求里的实体存储在请求URL(Request-URL)标识下。
该方法的响应是不可缓存的,除非响应里有合适的cache-Control或者Expires头域。
(4)Delete
Delete方法请求源服务器删除请求URL指定的资源。
该方法的响应是不能被缓存的。
(5)Head
获取请求实体的头域信息而不需要传输实体主体。
该方法的响应是可缓存的。
(6)Options
获取请求/响应过程中,目标资源(URL执行的资源)可以使用的通信选项信息,检查服务器的性能
该方法的响应是不能被缓存的。
(7)Trace
用于激发一个远程的,应用层的请求消息回路。
该方法的响应是不能被缓存的。
(8)Connect
动态切换到隧道的代理。
注意:这是http1.1协议规范保留的一个方法。
3、http1.1浏览器缓存
浏览器缓存包括页面Html,image,js,css等资源的缓存
(1)缓存工作原理
a) 第一次请求:浏览器通过http的header报头,附带Expires,cache-Control,last-modified/Etag向服务器请求,此时服务器记录第一次请求的last-modified/Etag
b) 再次请求:当浏览器再次请求的时候,请求头附带Expires,cache-Control,ifmodified/Etag向服务器请求
c) 服务器根据第一次记录的last-modified/Etag和再次请求的if-modified/Etag做对比,判断是否需要更新,服务器通过这两个头判断本地资源未发生变化,客户端不需要重新下载,返回304响应。
(2)缓存的优点
a) 服务器响应更快:因为请求从缓存服务器(离客户端最近)而不是源服务器被响应,这个过程耗时更少,让服务器看上去响应更快。
b) 减少网络带宽消耗:当副本被重用时会减少客户端的带宽消耗;客户可以节省带宽费用,控制带宽需求的增长并易于管理。
总之:
(1)http1.0协议使用非持久连接,即在非持久连接下,一个TCP连接只能传输一个web对象。
(2)http/1.1默认使用持久连接(然而,http/1.1协议的客户机和服务器可以配置成使用非持久连接)。在持久连接下,不必为每个web对象的传送建立一个新的连接,一个连接中可以传输多个对象。