HTTP协议详解

一、形象理解HTTP协议

  1. 什么是HTTP协议:HTTP协议即按一定规则,向服务器要数据,或发送数据。而服务器则按一定规则回应数据。

  2. HTTP协议的工作流程

    • 原始状态客户端与服务器没有关系
    • 建立连接,发送请求
    • 沿着连接,返回响应信息
    • 断开连接,两者再次没有关系
  3. HTTP请求信息和响应信息的格式

    • 请求:请求行、请求头信息、请求主体信息
      • 请求行:请求方法、请求路径、所用协议
        • 请求方法:GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
        • 请求路径:URL的一部分
        • 所用协议版本:一般是HTTP/1.1
      • 请求头信息
      • 请求主体信息
    • 响应:响应行、响应头信息、响应主体信息
      • 响应行: 协议版本、状态码、状态文字
      • 响应头信息:content-type , content-length
      • 响应主体
  4. 请求方法虽然是HTTP协议里面规定的,但web server未必允许或支持这些方法

    • HEAD:和GET基本一致,只是返回的内容不同。比如我们只是想要确认一个内容是否还正常存在,不需要返回内容本身,这时可以使用HEAD
    • TRACE:使用代理上网,比如用代理访问new.163.com,想要看看代理有没有修改HTTP 请求,可以使用TRACE来测试一下,163.com的服务器就会把最后收到的请求发送回来。
    • OPTIONS:返回服务器可用的请求方法
  5. 状态文字与状态码

    状态码 作用 描述
    1XX 信息提示 通告信息,可能还需要进一步交互
    2XX 成功 成功完成客户端请求的操作,并进行响应
    3XX 重定向 表示资源已移走,需要向新URL发送请求
    4XX 客户端错误 由于客户端请求错误,无法成功响应
    5XX 服务端错误 由于服务端错误,无法成功响应
    • 200:服务器成功返回网页

    • 301/2:永久/临时重定向

    • 307:重定向中还保持原来的请求数据 (POST方法)

    • 304 Not Modified 未修改

    • 失败的状态码

      • 404——请求的网页不存在
      • 503——服务器暂时不可用
      • 500——服务器内部错误

二、HTTP协议防盗链

  1. 当在网页中引用站外的图片时,可能会遇到无法访问的情况。
  2. 在网站的统计结果统计用户从何而来
  3. 在HTTP协议中,头信息有一个重要的选项:referer
    • referer:代表网页的来源即上一页的地址
    • 如果直接在浏览器上输入网址进入则没有referer选项
  4. 如何配置apache服务器,用于图片防盗链
    • 在web服务器层面,根据http协议referer头信息来判断如果来自站外,则统一重写到一个很小的防盗链提醒图片上去。
      • 打开apache重写模块mode_rewrite
      • 在需要防盗链的网站或目录写.htaccess文件,并指定防盗链规则([NC]表示不区分大小写)
        1
        2
        3
        4
        RewritrEngine On
        RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC]
        RewriteCond %{HTTP_REFERER} !loaclhost [NC]
        RewriteRule .* nofound.png // 此处添加防盗链图片地址
      • 指定:分析referer信息,如果不是来自本站则重写
      • 重写规则:是jpeg,jpg,gif,png图片时,referer头与localhost不匹配时重写
      • 怎么重写:统一rewrite到另一个防盗链图片

三、HTTP协议与缓存控制

  1. http协议缓存控制:
    • 现象:网页图片加载时,第一次请求时 200 ok,第二次请求时 304 Not Modified 未修改状态
    • 原因:在网络上,有一些缓存服务器,另外浏览器自身也有缓存功能。当我们第一次访问某图片时,正常的加载图片,返回值为200。基于一个前提——图片不会经常改动,服务器在返回200的同时,还返回该图片的“签名”——ETag ,(签名可以理解为图片的“指纹”),当浏览器再次访问该图片时,去服务器校验“指纹”,如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器负担。
  2. 如果网站比较大,有N台缓存级服务器,那么这N台缓存服务器,如何处理主服务器上文件
    • 要不要缓存
    • 缓存多久
    • 缓存服务器与主服务器之间,有http协议,采用cache-control来控制
  3. 缓存服务器、
    • 在主服务器上,打开apache的expires扩展,利用该扩展来控制图片,css,html等文件控制是否缓存及缓存生命周期。
    • 在.htaccess中,具体语法如下
      1
      2
      ExpriesDefault "<base> [plus] {<num> <type>}*"
      ExpriesByType type/encoding "<base> [plus] {<num> <type>}*"
    • ExpiresDefault 是设置默认的缓存参数,ExpiresByType 是按照文件类型来设计独特的缓存参数
    • Base :基于哪个时间点来计算缓存有效期
    • Access/now:基于请求/响应的那一瞬间,比如从此瞬间到1个月之后
    • Modification:基于被请求文件的最后修改日期来计算,比如 被修改日期的一周内任然有效
    • Num:缓存时间的大小
    • Type:缓存时间的单位
  4. 设置服务器不要有缓存信息
    • 比如有些个人信息不允许环迅服务器缓存,必到主服务器去请求。
    • Control-cache:no-store,must-revalidate ; //意味着不允许缓存,必须去主服务器验证。

四、HTTP协议与内容压缩

  1. Content-Length代表返回主体的长度,Content-Encoding:gzip 作用,Content-length是压缩后的长度
    • 为了提高网页在网络上的传输速度,服务器对主体信息进行压缩,如常见的gzip压缩,deflate压缩,compress压缩,以及google chrom的sdch压缩。
    • 压缩的过程
      • 服务器返回压缩内容
      • 客户端接收到压缩,再解压缩,最后渲染的界面
  2. 如何在apache服务器中启用压缩功能
    • 开启deflate模块,或gzip模块
    • 在conf文件中写如下代码
      1
      2
      3
      4
      5
      6
      <ifmodule mode_deflate.c>
      DeflateCompressionLevel 6 #压缩级别为6,可选1-9,推荐为6
      AddOutputFilterByTyoe DEFLATE text/plain # 压缩文本文件
      AddOutputFilterByTyoe DEFLATE text/html # 压缩html文件
      AddOutputFilterByTyoe DEFLATE text/xml # 压缩xml文件
      </ifmodule>
  3. 为什么要指定文件类型来压缩
    • 压缩需要耗CPU资源
    • 图片/视频等文件,压缩效果不好
    • 一般压缩文本格式
  4. 服务器如何知道浏览器是否支持gzip的
    • 客户端允许发一个Accept-Encoding头信息与服务器协商

五、分块传输与反向ajax

  1. http协议与持久i按揭+分块传输——>反向ajax
    • 反向ajax又叫comt,server push,服务器堆技术
    • 应用范围:网页聊天服务器、google mail网页聊天
    • 原理:一般而言,HTTP协议特点,连接<——>断开
    • 具体断开时间:服务器响应content-length,收到指定length长度内容时断开连接