zoukankan      html  css  js  c++  java
  • 理论篇 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本意四轮马车、货架,此处指:打字机上的金属控制杆),打字机每次一行满后,拨回到最左,开始下一行;即:

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

      首部可以多行表示,第二行后以" "(空格)或者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标签指定;

  • 相关阅读:
    JavaScript框架设计 一、种子模块
    一、微服务架构概述(spring cloud与docker学习)
    C++之socket编程
    原定于6日的维护延期
    网站将于8月5日或6日进行维护
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
  • 原文地址:https://www.cnblogs.com/diydyq/p/4536407.html
Copyright © 2011-2022 走看看