首页 > 代码库 > HTTP请求和响应1:概述
HTTP请求和响应1:概述
HTTP的报文分为请求报文和响应报文,打开一个web页面后,浏览器将发起一个HTTP请求报文,HTTP服务器收到请求后将回送一个响应报文。
报文的基本结构
HTTP的请求和响应报文都由三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)块、以及可选的包含数据的主体(body)部分。
请求报文和响应报文在语法上有些差别,下面是请求报文的格式:
<method> <request-URL> <version><headers><entity-body>
下面是响应报文的格式:
<version> <status> <reason-phrase><headers><entity-body>
1)方法(method)
客户端希望服务器对资源执行的动作。
2)请求URL(request-URL)
命名了所请求资源,或者URL路径组件的完整URL。
3)版本(ersion)
报文所使用的HTTP版本,格式为:
HTTP/<major>.<minor>
目前使用的是1.1版本。
4)状态码(status)
描述了请求过程中所发生的情况。
5)原因短语(reason-phrase)
状态码的可读版本,只对人类有意义。
6)首部(header)
HTTP/1.1要求有效的请求或响应报文中必须包含特定的首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,然后是一个值,最后是一个换行(CRLF)。首部由一个空行结束。
7)实体(entity-body)
包含由任意数据组成的数据框,报文可以不包含实体部分。
下面看一个具体的例子,请求报文:
GET /test/hi-there.txt HTTP/1.1Accept: text/*Host: www.joes-hardware.com
响应报文:
HTTP/1.1 200 OKContent-type: text/plainContent-length: 19Hi! I'm a message!
方法
常用的HTTP方法包括:
GET:从服务器获取一份文档
HEAD:只从服务器获取文档的首部
POST:向服务器发送需要处理的数据
PUT:将请求的主体部分存储在服务器上
TRACE:对可能经过代理服务器传送到服务器上去的报文进行跟踪
OPTIONS:决定可以在服务器上执行哪些方法
DELETE:从服务器上删除一份文档
注意并不是每个服务器都实现了所有的方法。
状态码
状态码用于告诉客户端,发生了什么事情,状态码的分类如下:
100~199:信息提示
200~299:成功
300~399:重定向
400~499:客户端错误
500~599:服务器错误
下面列举了一些最常见的状态码:
200 OK:成功。请求的所有数据都在响应主体中
401 Unauthorized:需要输入用户名和密码
404 Not Found:服务器无法找到所请求URL对应的资源
首部
首部是一些名/值对的列表,向请求和响应报文中添加一些附加信息。
HTTP规范定义了几种首部字段,应用程序也可以随意发明自己所用的首部。HTTP首部可以分为以下几类:
1)通用首部;
--既可以出现在请求报文中,也可以出现在响应报文中
2)请求首部;
3)响应首部;
4)实体首部;
--描述主体的长度和内容,或者资源自身
5)扩展首部。
--规范中没有定义的新首部
常用的首部如下:
Date:Tue,3Oct 1997 02:16:03 GMT ------服务器产生响应的日期
Content-length:15040 ------实体的主体部分包含了15040字节的数据
Content-type:image/gif ------实体的主体部分是一个GIF图片
Accept:image/gif,image/jpeg,text/html ------客户端可以接收GIF图片和JPEG图片以及HTML
长的首部行可以分为多行,提高可读性,多出来的每行前面要有一个空格或制表符(tab),如:
Server: Test Server
Version 10 ------以一个空格或者制表符开始
HTTP请求和响应1:概述