Http协议

delims 于 2020-08-11 发布

‘\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 定了三种请求方法,GETPUTHEAD

HTTP1.1 新增五种请求方法,OPTIONSPUTDELETETRACECONNECT

不同请求方法的区别。请求方法名称区分大小写

方法 说明
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)