HTTP

三、HTTP事务

虽然TCP是一种基于连接的传输层协议,并且保存双方针对同一个连接的多轮消息交换的会话状态,但是建立其上的HTTP则是一种无状态的网络协议。HTTP采用简单的“请求/响应”消息交换模式,一次HTTP事务(Transaction)始于请求的发送,止于响应的接收。针对客户端和Web服务器的多次消息交换来说,每个HTTP事务均是相互独立的。

HTTP方法

HTTP采用简单的请求/响应模式的消息交换旨在实现针对某个Web资源的某种操作。至于针对资源的操作类型,不外乎CRUD(Create、Retrieve、Update和Delete)而已。一个HTTP请求除了利用URI标志目标资源之外,还需要通过HTTP方法(HTTP Method或者HTTP Verb)指名针对资源的操作类型。我们常用的HTTP方法 包括GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECTION和PATCH等,我们将在《设计篇》以REST的视角来对它们进行详细介绍。

响应状态码

针对客户端向Web服务器发送的任意一个HTTP请求,不论在何种情况下得到一个响应,每个响应均具有一个由3位数字表示的状态码和相应的描述文字。不同数值的状态码体现了不同类型的响应状态,W3C对响应状态码的范围作了如下的规范。

  • 100~199:信息状态码,代表请求已被接受,需要继续处理。
  • 200~299:成功状态码,代表请求已成功被服务器接收、理解、并接受。
  • 300~399:重定向状态码,代表需要客户端采取进一步的操作才能完成请求。
  • 400~499:客户端错误状态码,代表了客户端看起来可能发生了错误,妨碍了服务器的处理。
  • 500~599:服务器错误状态码,代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。

四、HTTP报文

客户端和Web服务器在一次HTTP事务中交换的消息被称为HTTP报头,客户端发送给服务器的请求消息被称为请求报文,服务器返回给客户端的响应消息被称为响应报头。请求报文和响应报头采用纯文本编码,由一行行简单的字符串组成。一个完整的HTTP报文由如下三个部分构成。

  • 起始行:代表HTTP报文的第一行文字,请求报文利用起始行表示采用的HTTP方法、请求URI和采用的HTTP版本,而响应报文的起始行在承载着HTTP版本和响应状态码等信息。
  • 报头集合:HTTP报文的起始行后面可以包含零个或者多个报头字段。每个报头表现为一个键/值对,键和值分别表示报头名称和报头的值,两者通过冒号(“:”)进行分割。HTTP报文采用一个空行作为报头集合结束的标志。
  • 主体内容:代表报头集合结束标志的空行之后就是HTTP报文的主体部分了。客户端提交给服务器的数据一般置于请求报头的主体,而响应报头的主体也承载着服务器返回给客户端的数据。不论是请求报文还是响应报文,其主体部分均是可以缺省的。

接下来我们看看一个具体HTTP报文具有怎样的结构。下面这个文本片段反映的是我们通过Chrome浏览器访问微软的官网(www.microsoft. com)对应的HTTP请求,起始行体现了HTTP请求的三个基本属性,即HTTP方法(GET)、目标资源(http://www.microsoft.com/en-us/default.aspx)和协议版本(HTTP/1.1)。

   1: GET http://www.microsoft.com/en-us/default.aspx HTTP/1.1
   2: Host: www.microsoft.com
   3: Connection: keep-alive
   4: Cache-Control: max-age=0
   5: User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
   6: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
   7: Accept-Encoding: gzip,deflate,sdch
   8: Accept-Language: en-US,en;q=0.8
   9: Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
  10: Cookie: ...

上述这个请求报文不具有主体,所以起始行之外的所有内容均为报头集合,我们们可以根据这些报头获得主机名称、采用的缓存策略、浏览器相关信息、以及客户端支持的媒体类型(Media Type)、编码方式、语言和字符集等。

前面的HTTP请求通过浏览器发送给服务端之后会接收到具有如下结构的响应报文,我们可以此从它的起始行得到采用的HTTP版本(HTTP/1.1)和响应状态码(“200 OK”,表示请求被正常接收处理)。响应的内容被封装到响应报文的主体部分,其媒体类型的通过报头“Content-Type”表示。由于该响应报文的主体内容是一个HTML文档,所以“Content-Type”报头表示的媒体类型为“text/html”。

   1: HTTP/1.1 200 OK
   2: Cache-Control: no-cache
   3: Pragma: no-cache
   4: Content-Type: text/html; charset=utf-8
   5: Content-Encoding: gzip
   6: Expires: -1
   7: Vary: Accept-Encoding
   8: Server: Microsoft-IIS/7.5
   9: X-AspNet-Version: 2.0.50727
  10: VTag: 791897542300000000
  11: P3P: CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"
  12: X-Powered-By: ASP.NET
  13: Date: Wed, 18 Jan 2012 07:06:25 GMT
  14: Content-Length: 34237
  15:  
  16: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  17: <html></html>
阅读更多
个人分类: HTTP
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭