HTTP报文分为请求报文与响应报文,请求报文即web客户端发送给web服务器获取资源,而响应报文则是web服务器回应web客户端的请求。无论是请求报文还是响应报文,在HTTP术语中都是由上游向下游流动,当web客户端发送请求报文时,客户端为上游,服务器为下游,当服务器回应响应报文时,服务器就成为上游,而客户端便成为下游。
请求报文:
HTTP请求报文由3部分组成(请求行+请求头+请求体)(如图):
实例:
其中GET为请求方法,其余的请求方法有:
POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
常见的为GET,POST,HEAD
GET:最常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。
POST:POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。
HEAD:HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。
PUT:将请求的主体部分存储在服务器上。
TRACE:对可能经过代理服务器传送到服务器上的报文进行跟踪。
OPTIONS:决定可以在服务器上执行哪些方法。
DELETE:从服务器上删除一份文档。
实例首行以下均为请求头部:
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
Cookie:传递服务器此客户端的Cookie值。
Cache-Control:对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的。
Connection:连接方式。
其余可见:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
此实例无请求体(多数出现在POST方法需要向服务器传递数据时)。
响应报文:
HTTP的响应报文也由三部分组成(响应行+响应头+响应体):
实例:
具体状态代码可以是以下五种类型:
- 1xx:指示信息--表示请求已接收,继续处理。
- 2xx:成功--表示请求已被成功接收、理解、接受。
- 3xx:重定向--要完成请求必须进行更进一步的操作。
- 4xx:客户端错误--请求有语法错误或请求无法实现。
- 5xx:服务器端错误--服务器未能实现合法的请求。
- 100 Continue: 说明收到了请求的初始部分,请客户端继续。发送了这个状态码之后,服务器在收到请求之后必须进行响应。它的目的是对这样的情况进行优化:HTTP客户端应用程序有一个实体的主体部分要发送给服务器,但希望在发送之前查看一下服务器是否会接受这个实体。
- 200 OK:客户端请求成功。
- 303 See Other:告知客户端应该用另一个URL来获取资源。新的URL位于响应报文的Location首部。其主要目的是允许POST请求的响应将客户端定向到某个资源上去。
- 304 Not Modified:告诉客户端,你请求的这个资源至你上次取得后,并没有更改,你直接用你本地的缓存吧
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
响应头与请求头部类似。具体可以参见:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
接下来便是响应体,也就是响应报文的内容部分。