HTTP响应报文(response massage)
每一个请求报文发出后,都能收到服务器端的一个响应报文;
响应报文的格式一般如下:
状态行(Status-Line)(起始行)
“状态行”是HTTP响应报文的第一行,也只有三个内容(字段):
- 协议名称及版本号,即HTTP的版本号
报文所使用的HTTP版本,格式为:
HTTP/<major>.<minor>
其中主要版本号(major)和次要版本号(minor)都是整数;
- 状态码
HTTP状态码表示请求的状态;
- 解释状态码的简单短语
三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”,表示一行的结束;
HTTP 报文的第一行用于区分当前报文是请求报文还是响应报文,在请求报文中的开始行叫做请求行(Request-Line),而在响应报文中的开始行叫做状态行(Status-Line);
HTTP请求报文和响应报文格式的区别就是开始行不同;
响应头部(首部,header、头部)
和请求头部相同,响应头部用来说明一些信息(例如描述客户端或者服务器的属性、被传输的资源以及应该实现连接);
响应头部也可以有好几行,每一行都表示一个头部(header)信息,但也可以不使用;
- 每一头部(header)信息都由字段名和它的值组成,标准规定字段名是大小写不敏感的,但是不同程序在解析字段名时可能是大小写敏感的;
- 字段名和它的值用冒号(:)分隔,即格式为:“属性名:属性值”;而且在冒号后(域值前)可以添加任何数量的空格(一般会有一个空格);
- 每一行在结束的地方都要有“回车”和“换行”,表示一个头部信息的结束;
<name>:<value><CRLF>
HTTP 相应报文的头部字段主要分为:
整个响应头部结束时,还有一空行(“CR”和“LF”)将响应头部和后面的报文主体分开;
响应数据(响应体、报文主体)
报文主体是报文要发送的数据,是第一个空行以后的所有部分;详细参见:实体、实体主体和报文主体
在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段,即可选的;
注意:
- 由于HTTP是面向文本的(text-oriented),因此报文中的起始行和首部都只能是一些ASCII文本;而报文主体是一个可选的数据块,与起始行和首部不同的是主体可以是由任意数据组成的数据块(例如:文本或二进制数据),也可以为空;
- 若HTTP首部字段重复了的话,不同的浏览器处理机制不一样
- 有些浏览器会优先处理第一次出现的字段
- 有些浏览器会优先处理最后一次出现的字段
实例
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain |