HTTP 协议详解

来源:互联网 发布:买家淘宝差评怎么删除 编辑:程序博客网 时间:2024/05/27 06:15

 (1)、HTTP 协议定义
  WEB 浏览器和WEB服务器之间的交互过程中必须遵循的规则。
  
(2)、会话方式
  (1)建立连接
  (2)发出请求消息
  (3)回送响应信息
  (4)关闭连接
  浏览器和WEB服务器连接过程是短暂的,每次连接只处理一个请求和响应,对每一个页面的访问浏览器和服务器都要建立一次单独的连接
  浏览器和服务器所有通讯都是完全独立分开的请求和响应,即时拔掉网线,上次的请求发回到浏览器的HTML 还是可以访问。
  浏览器和服务器之间可以支持代理服务器。
  如果代理服务器接收到浏览器发送的请求如果在代理服务器的缓存中没有浏览器所请求的资源,则从WEB服务器发送一次请求,然后把这次请求的资源保存在缓存里面
  如果下次再次访问这个资源时,直接从缓存里面取。在浏览器和WEB服务器之间可以建立多个代理服务器。
 
(3)、HTTP 请求消息
 请求信息和响应消息都是有完整的消息格式
 消息结构:一个请求行若干消息头,及实体内容。消息头和实体内容可选,消息头和实体内容之间用空格隔开。
 一个请求行的结构:请求方式 资源路径 HTTP版本号
 GET /books/java.html HTP/1.1   //请求行,下面几行是消息头,消息头值部分指定多个可接受的选项,多个项之间以逗号隔开。
 Accept:*/*
 Accept-Language: en-us
 Connection: Keep-Alive
 Referer: http://localhost/links.asp
 User-Agent:Mozilla/4.0
 Accept-Encoding: gzip,defate
 
 
 (4)、HTTP 响应消息
 结构:一个状态行若干消息头,及实体内容。消息头和实体内容可选,消息头和
 实体内容之间用空格隔开。实体内容就是网页查看源代码看到的内容。
 结构:HTTP版本号 状态码 原因描述  200表示正常
 HTTP/1.1 200 OK    //响应状态行
 Server: Microsoft-IIS/5.0
 Date: Thu,13 Jul 2000 05:46:53 GMT
 Content-Length:2291
 Content-Type:text/html
 Cache-control:private
 
 <HTML>
 </body>
 
 (5)、HTTP消息头作用
 使用消息头,可以实现HTTP 客户机和服务器之间的条件请求和应答,消息头相当于服务器和浏览器之间的一些暗号指令.
 消息头分类
   a、通用信息头,能使用到请求消息和响应消息中,它包括一些与被传输的实体内容没有关系的常用消息字段
      Cache-Control no-cache 告诉客户机和代理服务器如何处理缓存。
      Connection close 用于指定处理完本次请求和响应之后是否还保持连接,如果是Keep-Alive ,则保持连接
      Pramma no-cache 客户端不要缓存响应消息
      Trailer Date 指示实体消息的后面还可以出现哪些内容,一般消息头字段出现在实体内容前面,也可以通过Trailer 消息头字段放在实体内容后面
      Transfer-Encoding:chunked  传输编码方式。消息响应的实体内容分段以后再传输。
      content-Length:260
      如果服务端的程序向客户端发送响应消息的时候,不是一个一个字符发送,而是先把要发送的内容写入缓存。然后集中发送给客户端,
      然后又写缓冲区。如果数据量小,第一次就可以把所有数据写入缓冲区的时候,这样客户端就可以知道发送实体内容的大小了。所有就
      使用content-length:260来指明实体内容的大小。如果缓存区不能完全填满所有实体数据的时候,就要用Transfer-Encoding 分段发送。
      发送一部分到客户端以后,再填充缓冲区,再发送。每次发送给客户端的是可以计算大小的。
     
   b、请求头
      客户端在请求消息中向服务器传递附加信息,主要是包括客户端可以接受的数据类型、压缩方法、语言、以及发送请求的超连接所属
      网页的URL地址等信息。
      Accept:text/html,image/*
      Accept-Charset: ISO-8859-1,unicode-1-1 客户端程序使用的字符集
      Accept-Encoding:gzip,compress 对实体内容压缩编码,浏览器告诉服务器接收那些编码方式。
      Accept-Language:en-gb,Zh-cn 不同国家的语言文档
      Expect:100-continue 客户机请求服务器采取特许请求,比如100-continue 服务器是否可以在这个请求消息后面再添加附加文档
      Host:www.baidu.com 80      客户端访问服务器主机名和端口号
      Range:bytes=100-599 指定服务器返回网页文档中的部分内容,以及部分内容的范围。对较大内容的短间续传。比如在传输大文 

      件的时候 服务器中断,但服务器再次向客户端传送的时候可以指定从中断出(比如前面传送了100个字节)续传(从100个字节向后传)
      if-Range:Tue 11 Ju  if-Range 和Range 一起使用,在这个时间点,如果服务器端的文档没有修改,才可以使用Range字段的要

      求返还部分内容,否则返回网页所有内容
      Referer http://www.baidu.com/index.jsp 指明浏览器发送请求是通过网页超链接发送过来的。让服务器追踪本次请求的起源。
      
  c、实体头
      描述实体信息类型,长度,压缩方法,最后一次修改时间,数据有效期
      Allow:GET,POST 告诉浏览器以哪种方式访问资源
      Content-Encoding:gzip  告诉浏览器实体内容压缩编码方式。
      Content-Language:zh-cn 告诉浏览器服务器返回网页文章的国家语言类型
      Content-Location: 指定响应消息中的实体内容的真实位置
      Content-Range: bytes 2543-4523/7898
      Content-Type:text/html;charset=GB2312 用于指出实体内容MIME类型,后面还可以加上实体内容字符集编码
      什么是MIME类型-在把输出结果传送到浏览器上的时候,浏览器必须启动应用程序来处理这个输出文档。这可以通过多种类型MIME

     (多功能网际邮件扩充协议)来完成。在HTTP中,MIME类型被定义在Content-Type header中。
       假设你要传送一个Microsoft Excel文件到客户端。那么这时的MIME类型就是“application/vnd.ms-excel”。
       每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
      由于MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的MIME类型,服务器中必须定义文档后缀和MIME类

      型之间的对应关系。而客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,
      并不了解文档的名字,因此服务器必须使用附加信息来告诉客户程序数据的MIME类型。服务器在发送真正的数据之前,
      就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义,例如对于HTML文档,
      服务器将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。
    Content-type: text/html
     Expires Tue 11 Jan 2001 18:18:18 GMT  用于指定当前文档在什么时候过期,此时不能使用缓存,而是在需要的时候重新发送请求。
     必须使用GMT的时间格式。如果时间格式错误,或者直接是0.表示网页过期,如果要使用必须重新发送请求。
   
   d、扩展头
    在HTTP 消息中,定义的扩展头,他们通常被当作是一种实体头处理
    比如Cookie,Set-Cookie,Refresh Content-Disposition
    Refresh:1 告诉浏览器什么时候重新刚才的访问请求,
    Refresh:1;URL=http://www.it315.org 在指定的时间以后要跳转到其它的资源中去,时间和URL之间用分号分开。

 (6)、GET 和 POST 方式传递参数
  GET /servlet/paramServlet?param1=abc&param2=2 HTTP/1.1
  get 方式传递参数数量是有限的,一般限制在1KB以下。
 
  POST 方式传递参数,参数必须作为实体内容,所以理论上POST可以传递无穷大的数据量
  POST /servlet/ParamsServlet HTTP/1.1
  Host:
  Content-Type:applcation/x-www-form-urlencoded
  Content-Length:28  //设置实体内容的大小。
 
  param1=abc&param2=xyz //这一行是POST提交实体内容部分
 
  (7)、HTTP 响应消息中的响应状态码

  三位的十进制数,分为五种类型,使用最高位1到5进行分类
  100~199 表示成功接受请求,要求客户端继续提交下一次请求才能完成整个处理过程
  200-299 成功接收请求并已完成整个处理过程
  300-399 为了完成请求,客户端需进一步细化请求,比如:请求的资源已经移动一个新地址
  400-499 客户端请求错误
  500-599 服务器端出错。
  典型的几个响应状态码:
  200 正常
  401 未授权
  404 服务器上不存在客户机请求的资源
  500 服务器内部程序发生错误