Loading... # 应用层(二) ## Web和HTTP 万维网(World Wide Web)将因特网提升为仅有的一个数据网 ### HTTP Web应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),由两个程序实现:客户程序和服务器程序(运行在不同的端系统中) Client:request、receive、display Server:send objects in response to request(**Web服务器总是打开的**) ![image-20220319212653891.png](http://xherlock.top/usr/uploads/2022/03/251273487.png) Web页面由对象组成:HTML文件、JPEG、java程序、视频段等组成,可通过URL寻址 ![image-20220319212534973.png](http://xherlock.top/usr/uploads/2022/03/841491634.png) **HTTP使用TCP作为支撑运输协议:** * 客户端初始化与服务器的TCP连接(创建socket) * 服务器接受来自客户端的连接 * HTTP报文在二者间交换 * TCP连接丢失 注意:HTTP属于无状态协议(stateless protocol),服务器不保存任何该客户的状态信息 ### 非持久连接和持久连接 非持久连接:每个请求/响应对是经过一个单独的TCP连接发送 持久连接:所有请求及响应经相同的TCP连接发送 **HTTP两者均能使用** #### 非持久连接的HTTP **访问www.someSchool.edu/someDepartment/home.index**(一个HTML基本文件和十张图片) 1. HTTP客户进程在端口号为80发起一个到服务器www.someSchool.edu的TCP连接 2. HTTP客户经它的套接字向服务器发送一个HTTP请求报文(包含了路径名/someDepartment/home.index) 3. HTTP服务器进程经它的套接字接收该请求报文,从其存储器中检索出对象www.someSchool.edu/someDepartment/home.index,并封装入一个HTTP响应报文通过套接字发送给客户 4. HTTP服务器进程通知TCP断开该TCP连接 5. HTTP客户接收响应报文,TCP连接关闭 6. 为10张图片重复1-5步骤 **每个TCP连接只传输一个请求报文和一个响应报文,每个连接并不为其他的对象而持续下来** 获得图片对象可以使用串行或并行的TCP连接,并行可以减少响应时间 RTT,Round-trip Time往返时间:一个短的分组从客户到服务器然后再返回客户所花费的时间(包含处理时延、排队时延、传播时延) ![image-20220320095110916.png](http://xherlock.top/usr/uploads/2022/03/309362573.png) HTTP response time = 2 × RTT + file transimission time #### 持久连接的HTTP 非持久连接缺点: 1. 必须为每个请求的对象建立和维护一个全新的连接(分配TCP缓冲区),给服务器带来严重负担 2. 每个对象经受超过两倍的RTT时延,响应时间不及时 持久连接: 服务器发送响应后保持TCP打开,后续的请求和响应报文可以通过相同的连接进行传送 对对象的请求可以一个接一个地发出而不必等待流水线(pipelining,不等待已发送消息的应答,连续发送后面的消息)的回答 是HTTP的默认模式:持久连接+流水线 ### HTTP报文格式 请求报文 ![image-20220320101225883.png](http://xherlock.top/usr/uploads/2022/03/1005337467.png) * Host:对象所在的主机 * User-agent:指明用户代理,即向服务器发送请求的浏览器类型 * Accept:告诉服务器客户端接受什么类型的响应 * Date:请求发送的日期和时间 * Connection:是否需要持久连接(keep-alive持久连接) ![image-20220320215559854.png](http://xherlock.top/usr/uploads/2022/03/829683969.png) entity body:实体体,使用GET方法时其为空,POST方法时使用它 * HEAD方法类似于GET方法,但是响应后不会返回请求对象,常用来进行调试跟踪 * PUT方法常与Web发行工具联合使用,允许用户上传对象到指定的Web服务器上指定的地址/目录 * DELETE方法允许用户或者应用程序删除Web服务器上的对象 响应报文 ![image-20220320215948321.png](http://xherlock.top/usr/uploads/2022/03/1706114050.png) Server:指示响应服务器 Last-Modified:对象创建或者最后修改的日期和时间 Content-Length:被发送对象中的字节数 Content-Type:对象类型 ![image-20220320220057211.png](http://xherlock.top/usr/uploads/2022/03/3783167453.png) 参考:[HTTP响应头和请求头信息对照表](http://tools.jb51.net/table/http_header) **常见状态码和相关短语** * 200 OK:请求成功,信息返回在响应报文中 * 301 Moved Permanently:请求的对象已经被永久转移了,新的URL在响应报文里的Location中 * 400 Bad Request:服务器无法理解请求 * 404 Not Found:请求的 文档不在服务器上 * 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议 **表单输入**:分为POST(*表单输入信息在body字段*)和GET(*表单输入信息在URL中*) 补充:telnet命令可以实现远程登录服务器 ### 用户和服务器的交互:Cookie 为了识别用户,Web站点使用cookie,允许站点对用户进行追踪(HTTP无法实现) **组件** 1. HTTP响应报文里的cookie首部行 2. HTTP请求报文中的cookie首部行 3. 用户端系统中保留一个cookie文件,由用户浏览器存储 4. 位于网站后端数据库中(eg:可以想象当今你浏览了某乎上商品的推荐,某宝或某东会推出你所查看过的商品,这些网络大户们十分可能共享了后端数据库信息,以此类推) ![image-20220320224938984.png](http://xherlock.top/usr/uploads/2022/03/3443958652.png) 突然联想到不同设备登录判断,很有可能用到了cookie,登录的信息存储到cookie,后端对cookie内容进行判断(具体貌似不是这样实现,不过cookie确实好用,只要我不去清理它,就可以在哪上浏览器是自动登录和查看历史信息之类的,爬虫就经常借用了cookie来进行登录) ### Web缓存 aka 代理服务器(proxy server),代表初始服务器来满足HTTP请求的网络实体 ![image-20220321082523596.png](http://xherlock.top/usr/uploads/2022/03/293191882.png) 具体过程: 1. 浏览器创建一个到Web cache的TCP连接,并向Web缓存器中的对象发送一个HTTP请求 2. Web缓存器检查看本地是否存储了该对象副本,若有就向客户浏览器用HTTP响应报文返回该对象 3. 若无该对象,就打开一个与该对象的初始服务器的TCP连接,Web缓存器向服务器发送一个对该对象的HTTP请求。接到请求后,初始服务器向Web缓存器发送具有该对象的HTTP响应 4. Web缓存器收到对象后,在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本 **Web缓存器既是服务器又是客户** why? * 减少对客户请求的响应时间 * 减少一个机构的接入链路到因特网的通信量(降低费用,改善应用性能) 内容分发网络(Content Distribution Network,CDN):CDN公司在因特网上安装许多地理上分散的缓存器,使大量流量实现了本地化 ### 条件GET方法 基于web cache的对象副本可能是旧的,导致问题出现;因此有了条件GET方法,允许Web cache检查对象是否最新 **条件GET请求报文**:1.请求报文使用GET方法;2.请求报文包含一个If-Modified-Since:\<date\>首部行 ![image-20220321085428273.png](http://xherlock.top/usr/uploads/2022/03/483274926.png) 缓存器在存储对象时也存储了其最后修改日期,下次访问如果对象没被修改(看日期),原始服务器就返回不包含对象的响应报文 最后修改:2022 年 06 月 13 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏