2 应用层 -Web和HTTP

2 Web和HTTP

2.1 HTTP概述

  • HTTP:超文本传输协议 HyperText Transfer Protocol,定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。HTTP使用TCP作为它的制成运输协议
  • 无状态协议(stateless protocol):服务器向客户发送被请求的文件,而不存储任何关于该用户的状态信息。

2.2 非持续连接和持续连接

HTTP在默认方式下使用持续连接

  1. 非持续连接:每个请求/响应对是经一个单独的TCP连接发送,TCP连接在发送完一个对象后关闭。
  2. 非持续连接的缺点:
    • 必须为每一个请求的对象建立和维持一个全新的连接,服务器的负担大。
    • 2*往返时间+传输对象时间>往返时间+传输对象时间
  3. 持续连接:在相同的客户和服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。

2.3 HTTP报文格式

2.3.1 HTTP请求报文

  1. 请求行
    方法字段:GET POST HEAD PUT DELETE

    1. GET:发送一个请求来取得服务器上的某一资源。
    2. POST:向服务器提交数据。
    3. HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
    4. PUT: PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
    5. DELETE:删除某一个资源。

    URL字段:带有请求对象的标识
    HTTP版本

  2. 首部行

    • Host:指明了对象所在的主机
    • Connection:close表示该浏览器告诉服务器不要使用持续连接,要求服务器在发送完被请求的对象后就关闭这条连接。Keep-Alive,使用持续连接
    • User-agent:指明用户代理,向服务器请求的浏览器的类型。
    • Accept-language:用户想得到该对象的语言版本,否则发送默认版本
  3. 实体体

2.3.2 HTTP响应报文

  1. 初始状态行status line
    • 协议版本字段
    • 状态码
    • 响应状态信息
HTTP/1.1 200 OK
状态码文本含义
200OK请求成功,信息在返回的响应报文中
301Moved Permanently请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行的一种,客户软件将自动获取新的URL
304Not Modified服务器回给web缓存器,表示请求对象未被修改,可以使用
400Bad Request一个通用差错代码,指示该请求不能被服务器理解
404Not Found被请求的文档不在服务器上
505HTTP Version Not Supported服务器不支持请求报文使用的HTTP协议版本
  1. 首部行
    • Connection
    • Data:服务器产生并发送该响应报文的日期和时间
    • Server:指示服务器类型
    • Last-Modified:指示了对象被创建或者最后修改的日期和时间
    • Content-Length:被发送对象的字节数
    • Content-Type:实体体中对象的类型,HTML,
  2. 实体体

2.4 用户与服务器的交互,cookie

使用场景:一个Web站点通常希望能够识别用户,可能是因为服务器希望限制用户的访问,或者希望把内容与用户身份联系起来,HTTP中使用了cookie,允许站点对用户进行跟踪。

  1. web站点产生唯一识别码,并以此为索引在它的后端数据库中产生一个表项
  2. 服务器用一个包含Set-cookie的首部行对浏览器进行响应。
Set-cookie: 1678
  1. 浏览器收到HTTP响应报文,在自己管理的cookie文件中添加一行,包含服务器的主机名和Set-cookie中的识别码。
  2. 以后再访问该Web站点时,请求报文都会带有包含识别码的首部行
Cookie: 1678

cookie用于标识一个用户

2.5 web缓存

Web缓存(web cache):即代理服务器proxy server,能够代表初始web服务器来满足HTTP请求的网络实体。代理服务器拥有磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。下面是某浏览器请求对象 http://www.xxx.edu.cn/aaa.jpg 的过程
在这里插入图片描述
部署web缓存器的好处

  • 能够大大降低对客户请求的响应时间;

  • 能够大大减少一个机构的接入链路到因特网的通信量 see case(机构内部路由器到因特网路由器);

    web缓存器存在一个命中率的问题,即一个缓存器所能够满足的请求的概率(比率),实际常为0.2~0.7,其余的请求将仍由初始服务器满足。

case A
1:机构---100Mbps局域网---> 内部路由器---15Mbps接入链路--->因特网路由器
2:初始服务器(处于世界各地)---> 因特网
if 15个*1Mb请求/s 从机构发出
局域网流量强度 = 15*1Mb/s / 100Mbps = 0.15
接入链路流量强度 = 15*1Mb/s / 15Mbps = 1.0,链路上的时延会变得非常大并且无限增长。

case B OKKKKKK
1:(机构+机构缓存器)---100Mbps局域网---> 内部路由器---15Mbps接入链路--->因特网路由器
2:初始服务器(处于世界各地)---> 因特网
假设web缓存器的命中率为0.4,web缓存器的响应时间10ms;15Mbps链路上,流量强度0.6,当小于0.8时,时延增量都将在几十毫秒
计算平均时延 = 0.4*10ms + 0.6*(2s+10ms) = 1.2s

case C 
增大接入链路的速率为100Mbps,接入链路的流量强度也为0.15
则总的时延可以大致认为 = 接入链路转发HTTP请求报文开始,一直到收到因特网的响应报文,大约2s

可见增加web缓存器的方案更优

内容分发网络 content distribution network CDN

2.6 条件GET方法

保存在web服务器中的对象自该副本缓存在客户上以后可能已经被修改了
HTTP中的条件GET机制就是允许缓存器证实它的对象是最新的。

case A:一个浏览器向代理缓存器请求了。。。

代理缓存器 -> web服务器
GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotique.com

web服务器 -> 代理服务器
HTTP/1.1 200 OK
Date: Sat, 3 Oct 2015 xx:xx:xx
Server: XXX
Last-Modified: Web, 9, Sep 2015 12:12:12
Content-Type: image/gif
...data...

case B:one week late,另一个浏览器向代理缓存器又请求了同一对象

代理缓存器 -> web服务器
GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotique.com
If-modified-since: Web, 9, Sep 2015 12:12:12


web服务器 -> 代理服务器
HTTP/1.1 304 Not Modified
Date: Sat, 10 Oct 2015 xx:xx:xx
Server: XXX
(empty entity body)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值