理论篇 HTTP笔记

 

  MIME:多用途因特网邮件扩展(Multiple Internet Mail Extension),用于指定HTTP传输中数据的类型;

  由主类型/子类型组成,如:text/html;

 

  HTTP应用中几种类型:

  1. HTTP代理服务器

  流量转发、资源过滤;

  2. HTTP缓存服务器

  快速下载,如:CDN(Content Delivery Network)

  3. 网关服务器

  完成协议转换,如:HTTP/FTP;

  4. 隧道

  HTTPS(Secure Socket Layer),数据传输前加密;

 

  报文Message包括请求报文、响应报文,均有:起始行、首部、主体 三个部分组成;

  请求报文:

  Method URL VERSION

  响应报文:

  VERSION STATUS Phrase

 

  CR:Carriage Return (Carriage本意四轮马车、货架,此处指:打字机上的金属控制杆),打字机每次一行满后,拨回到最左,开始下一行;即:\r

  LF:Line Feed,表示一行写满;即:\n

 

  首部可以多行表示,第二行后以" "(空格)或者Tab开始即可;

 

  HTTP方法: 

  1. 常用方法 HEAD、PUT、DELETE、POST、TRACE、OPTIONS

   Trace  跟踪记录报文经过的设备转发的节点,Header Via会记录;

   Options  询问服务器支持哪些功能;

   Connect  建立隧道

  2. 扩展方法:LOCK、MOVE等

 

  HTTP首部Header介绍:

  1. 通用首部:

    Date、Connection、Via

    Pragma:向所有经过节点告知指令,如:Pragma:no-cache告诉中间节点(如:网关服务器)不可以缓存。

  2. 请求首部:

  通用型:  Host(请求报文中附带:主机名,如:www.baidu.com,在虚拟主机托管中分辨哪个WEB站点)、User-Agent、Referer、Accept及其扩展(接收响应的类型)

  条件型:  If-Modified-Since、If-None-Match、Range

  3. 响应首部:

  通用型:  

    Content-Type(请求或响应MIME类型,如:表单提交multipart/form-data)、

    Content-Length、Content扩展(Language、Encoding等)、

    Age(从创建开始的持续时间)

    Location:重定向中用到;

  协商型:  Vary(服务器要求:请求报文中发送时需附带的其他Header)

  缓存型:  ETag、Expires、Last-Modified

 

  TCP性能聚焦区域:

  1. 连接时的握手

  2. 慢启动拥塞控制(Slow Start)

  3. TIME_WAIT累积与端口耗尽

  出现在性能测试中,HTTP客户端同时发送N多请求,导致最终端口不够用。如:6万个端口,每个端口关闭后2分钟内保留内存中,这样2分钟后的每秒最大不能超过500个请求,(60000/120s=500)。与服务器无关,只是客户端会遇到此类情况。

 

  连接Connection:

  HTTP 1.0中默认为:closed,改为keep-alive需请求报文附加该首部;1.1中默认为:persistent

 

  缓存Cache-control:(Strong Validator | Weak Validator)

  可选值:

  no-store    响应不能被缓存

  no-cache     请求服务器重新验证之前,不允许使用缓存

  public     可以被浏览器任何中间节点服务器缓存

  private     仅可以被浏览器缓存,其他节点(代理服务器)不能缓存

  max-age     缓存的新鲜度最长时间

  s-max-age    共享缓存(中间节点服务器:代理等)的新鲜度最长时间

 

  条件请求:

  在浏览器缓存资源不在新鲜,但仍与服务器缓存资源一致的情况下,避免响应报文中附带资源的情况,否则加重网络负担。

  当条件为True时才发送副本。

  If-Modified-Since  与Last-Modified对应;还有其它条件:If-Notmodified-Since 

  If-None-Match     与ETag对应;其它条件:If-Match

 

  强验证器:

  只要内容变化,实体值变化;表示:客户端缓存资源与服务器端资源内容完全一致,无变化;

  如:ETag(实体标签)

  弱验证器:

  少量修改,不影响实体值的改变;用 "W/"前缀标识;表示:资源语义上想通,允许这种内容不一致的存在,尽管不一致,仍可以使用客户端缓存替代;

    如:Last-Modified,仅精确到秒,1秒之内的修改无法标识改变;

 

  浏览器发送:条件Header与上次响应返回的验证器 到服务器端,由服务器来判断是:200还是304。

 

  Cookie的两个版本:

  1. 版本0 (NetScape标准),应用广泛

  Set-Cookie首部组成:分号分割键值对

  name=value;

  domain=baidu.com;Cookie会向匹配的服务器发送过去;

  expires=Date;

  path=/;  匹配指定的路径;

  secure;   启用SSL时才发送该标识;

  2. 版本1,扩展原有

  Set-Cookie2组成

  Comment对Cookie解释;

  Discade:浏览器退出时是否删除该Cookie

  Max-age:Cookie生存期的相对时间

 

  Chaptor15 实体与编码:

  Content-Encoding:实体编码,可选值如下:

  1. Identity  默认,没有压缩

  2. gzip    GNU zip编码,效率最高,使用范围最广

  3. deflate   zlib的格式压缩

  4. compress  Unix的文件压缩

  Accpet-Encoding:请求响应是何种编码,逗号分隔多个选项,分号分割内部设置;

  如:Accept-Encoding:gzip;q=1.0, identity;q=0.5  注:q代表处理(Quality)优先级,从0.0~1.0,越高越优先

 

  TE:用于请求报文中,希望响应报文是其中的一种编码;如:TE: trailers, chunked

  Tranfer-Encoding:用于响应报文中,告知浏览器采用的方法;HTTP 1.1使用Chunked分块编码;

  Content-Type中的charset可以指定使用的编码(如:UTF-8)或者通过文档中的meta标签指定;

 

posted on 2015-05-28 17:06  diydyq  阅读(174)  评论(0编辑  收藏  举报

导航