‘\r’ 回车符 ASCII 13 ‘\n’ 换行符 ASCII 10
HTTP 报文格式
请求格式包括请求行,请求头,请求数据
请求方法 | 空格 | URL | 空格 | 协议版本 | 回车 | 换行 |
---|---|---|---|---|---|---|
头部字段名 | : | 值 | 回车 | 换行 | ||
头部字段名 | : | 值 | 回车 | 换行 | ||
头部字段名 | : | 值 | 回车 | 换行 | ||
回车 | 换行 | |||||
请求数据部分 |
响应格式包括状态行,消息报头,响应正文
状态行 包括 协议版本 状态码 说明 ,其他和请求头差不多。
常用状态码
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
HTTP1.0 定了三种请求方法,GET、PUT、HEAD。
HTTP1.1 新增五种请求方法,OPTIONS、PUT、DELETE、TRACE 、CONNECT。
不同请求方法的区别。请求方法名称区分大小写。
方法 | 说明 |
---|---|
GET | 请求把请求参数拼接在URL后面,以 ? 分割,后面多参数用 & 分割。如果是英文或者数字原样发送,如果是空格或中文,使用Base64编码。请求URL长度有限,所以传输数据有限,一般是 2K |
POST | 请求把提交的数据放在请求体中,可以传送较大数据,例如:提交表单,上传文件 |
HEAD | 类似于GET请求,只是用于获取报头,响应体中没有具体内容 |
PUT | 向指定资源上传新内容 |
PATCH | 与PUT类型,只是用于更新部分资源 |
DELETE | 请求服务器删除指定资源 |
TRACE | 回显服务器收到的请求,用于测试或诊断 |
CONNECT | 把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户 |
HTTP 请求头各参数具体含义,请求头名称不区分大小写。
Header | 说明 | 示例 |
---|---|---|
Accept | 能接受的回应类型 | Accept:text/plain,text/html |
Accept-Charset | 能接受的字符集 | Accept-Charset: utf-8 |
Accept-Encoding | 能接受的编码方式列表 | Accept-Encoding: gzip,deflate |
Authorization | 超文本传输协议认证的认证信息 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | 指定这次请求/响应中所有缓存机制 | Cache-Control:no-cache |
Connection | 浏览器想要优先使用的链接类型 | Connection : keep-alive |
Content-Length | 数据部分总字节数 | Content-Length:459 |
Content-Type | 请求体的多媒体类型 (用于POST和PUT请求中) | Content-Type: application/x-www-form-urlencoded |
Date | 发送该消息的日期和时间 | Date: Tue, 15 Nov 1994 08:12:31 GMT |
Expect | 表明客户端要求服务器做出特定的行为 | Expect: 100-continue |
Form | 发送此请求的用户邮件地址 | Form:user@example.com |
Host | 域名:端口号,标准端口号可以省略 | Host: github.io |
If-Match | 判断匹配在修改,用作PUT | If-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Modified-Since | 允许对应内容未修改的情况下返回 304 | If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT |
If-None-Match | 同上 | If-None-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Range | 如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个新的实体 | If-Range: “737060cd8c284d8af7ad3082f209582d” |
If-Unmodified-Since | 自某个时间以来未修改才返回 | If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT |
Max-Forwards | 限制消息可被代理转发的次数 | Max-Forwards: 10 |
Proxy-Authorization | 用来向代理进行认证的认证消息 | Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Range | 表示请求部分数据 | bytes=0-499表示前 500 字节。500- 表示500字节以后的部分 |
User-Agent | 浏览器身份标识符 | User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0 |
Upgrade | 要求服务器升级到另一个协议 | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
Via | 告诉服务器这个请求是由哪些代理发出的 | Via: 1.0 fred, 1.1 example.com (Apache/1.1) |
Warning | 一般性的警告,告知在内容实体中可能存在错误 | Warning: 199 Miscellaneous warnin |
Cookie | 之前由服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议Cookie | Cookie: $Version=1; Skin=new; |
Content-MD5 | 请求体的内容的二进制 MD5 散列值,以 Base64 编码的结果 | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
Accept-Datetime | 能够接受的按照时间来表示的版本 | Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT |
HTTP 回应头各参数具体含义
Header | 说明 | 示例 |
---|---|---|
Accept-Ranges | 服务器支持哪种类型范围 | Accept-Ranges:bytes |
Age | 这个对象在代理缓存中存在的时间,以秒为单位 | Age:12 |
Content-Encoding | 在数据上使用的编码类型 | Content-Encoding: gzip |
Content-Language | 内容所使用的语言 | Content-Language: da |
Content-Length | 回应消息体长度 | Content-Length: 3485 |
Content-MD5 | 内容的MD5,以Base64编码 | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
Content-Range | 这条部分消息是属于某条完整消息的哪个部分 | Content-Range: bytes 21010-47021/47022 |
Content-Type | 当前内容的MIME类型 | Content-Type: text/html; charset=utf-8 |
Date | 发送此消息的日期和时间 | Date: Tue, 15 Nov 1994 08:12:31 GMT |
ETag | 某个资源的某个特定版本的一个标识符,通常是一个 消息散列 | ETag: “737060cd8c284d8af7ad3082f209582d” |
Expires | 指定一个日期/时间,超过该时间则认为此回应已经过期 | Expires: Thu, 01 Dec 1994 16:00:00 GMT |
Last-Modified | 请求对象的最后修改时间 | Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT |
Location | 用来 进行重定向,或者在创建了某个新资源时使用。 | Location: http://www.w3.org/pub/WWW/People.html |
Refresh | 用于设定可定时的重定向跳转。右边例子设定了5秒后跳转至“http://www.w3.org/pub/WWW/People.html”。 | Refresh: 5; url=http://www.w3.org/pub/WWW/People.html |
Retry-After | 资源暂时不可用,告诉客户端多久后重试,值可以是以整数秒。也可以是时间字符串 | Example 1: Retry-After: 120;Example 2: Retry-After: Fri, 07 Nov 2014 23:59:59 GMT |
Server | 服务器的名字 | Server: Apache/2.4.1 (Unix) |
Set-Cookie | 告诉客户端设置cookie | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
Upgrade | 要求客户端升级另一个协议 | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
Via | 告知使用代理服务器的客服端,当前请求经过来那些服务器 | Via: 1.0 fred, 1.1 example.com (Apache/1.1) |