HTTP报文结构、请求方法、状态码
文章目录
HTTP报文结构
http报文分为请求报文、响应报文,都主要由三部分组成:
一、HTTP请求报文
1.组成的各部分
请求行:分为三个部分,请求方法 + 请求地址 + http协议版本
请求头:传递一些额外的重要附加信息,以键值对key/value的形式组成,每行一对
请求体:为请求数据,以字符串拼接的形式,可选:如GET请求时,可以直接在URL后拼接,没有请求体
如图POST请求报文示例:
2.请求方法
HTTP/1.1中几种常用方法:
(1)GET:http默认的请求方法,用来获取URI/URL指定的资源,将请求参数追加在url后面,不安全,url长度限制get提交请求数据的大小
(2)POST:功能与GET类似,但主要目的不是获取响应主体的内容,一般用来传输实体的主体,提交表单数据,请求参数写在请求体(RequestBody)处,较安全,提交的数据大小没有限制,克服了GET的请求数据无法保密、数据量小的缺点
(3)PUT:与POST类似,也是提交表主体内容,最主要的区别为PUT是幂等的,POST不是幂等的,(幂等:不管进行了多少次操作,都实现了相同的结果)创建对象时通常用POST,更新对象时通常用PUT,但是HTTP/1.1中PUT方法不带有验证机制,存在安全隐患,所以一般还用POST(在后端逻辑处理更新),更多时候将PUT方法用作传输资源
(4)HEAD:与GET几乎相同,主要区别是HEAD方法只是请求消息的报文头而不是完整的内容,所以通常用来测试超链接的有效性、能否访问
(5)DELETE:请求服务端删除指定资源,但是HTTP/1.1中DELETE方法中没有验证机制,所以一般也不使用DELETE
(6)OPTIONS:用来查询针对请求URI/URL指定的资源支持的方法,主要在不知道对方支持什么方法时询问一下,会在返回报文的Allow字段中回答
(7)TRACE:回显服务器收到的请求,主要用于测试或诊断
(8)CONNECT:开启一个客户端与所请求资源之间的双向沟通的通道,用来创建隧道,一般不会用,只在使用代理服务器访问互联网的时候,向代理服务器发送connect请求,代理服务器与目标访问服务器握手并连接起来,然后告诉客户端连接成功,之后代理服务器只负责传递客户端、服务端双方的数据包,并不能读取数据具体内容
3.请求头内容
几种常用的请求头字段(只能用在请求头中):
首部字段名 | 说明 |
---|---|
Accept | 浏览器端(客户端)可以接受的媒体类型 Accept:* /* ——浏览器可以处理所有类型 Accept:text/html——html文档 … 若要可控制优先级,则使用q=0~1(可精确到小数点后3位)来表示权重值 |
Accept-Charset | 接收的字符集 |
Accept-Encoding | 浏览器声明自己接收的编码方法,通常指压缩方法,是否支持压缩,什么压缩方法(gzip,deflate) |
Accept-Language | 接收的语言(自然语言) 若要可控制优先级,则使用q=0~1(可精确到小数点后3位)来表示权重值 |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为 |
From | 用户的电子邮箱地址 |
Host | 请求资源所在服务器,主机号+端口号,通常从HTTP URL中提取出来 |
If-Match | 比较实体标记(ETag) |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记(与If-Match相反) |
If-Range | 资源未更新时发送实体Byte的范围请求 |
If-Unmodified-Since | 比较资源的更新时间(与If-Modified-Since相反) |
Max-Forwards | 最大传输逐跳数 |
Range | 实体的字节范围请求 |
Referer | 对请求中URI的原始获取方,告诉服务器我是从哪个页面链接过来的 |
TE | 传输编码的优先级 |
User-Agent | 告诉服务端客户端程序的信息如:使用的操作系统、浏览器的版本、名称,一般服务器通过这个来判断浏览器类型,从而做兼容设计 |
二、通用报文头、实体头
1.通用报文头
首部字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部、连接的管理 Connection:keep-alive——当一个网页打开后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个网页,可以继续使用这一个通道 Connection:close——代表一个Request后TCP连接就会关闭,再次请求就要重新建立TCP连接 |
Date | 创建报文的日期时间 |
Pragrma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
2.实体报文头
首部字段名 | 说明 |
---|---|
Allow | 资源支持的HTTP方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小(单位:字节Byte) |
Content-Location | 替代对应资源的URI/URL |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 text/html:HTML格式 text/plain:纯文本格式 text/xml:XML格式 image/gif:GIF图片格式 image/jpeg:JPG图片格式 image/png:PNG图片格式 application/xhtml+xml:XHTML格式 application/xml:XML数据格式 application/atom+xml:Atom XML聚合格式 application/json:JSON数据格式 application/pdf:PDF格式 application/msword:Word文档格式 application/octet-stream:二进制流数据(如文件下载) application/x-www-form-urlencoded:表单提交 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源的最后修改日期时间 |
三、HTTP响应报文
1.组成的各部分
响应行:分为两个部分,报文协议及版本 + 状态码及状态描述
响应头:与请求头类似,传递一些额外的重要附加信息,一般包含服务器信息、响应数据类型,产生时间等等
响应体:响应内容的主体,真正请求要的干货
如图响应报文示例:
2.状态码
HTTP协议用3位数字表示网页服务器超文本传输协议响应的状态
用啊第一位数字表示5种不同的状态,后两位表示具体信息
分类 | 含义 |
---|---|
1XX | 表示消息,这一类型的状态码,代表请求已被接受,需继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束 |
2XX | 表示成功,这一类的状态码,代表请求已成功被服务器接收、理解、接受 |
3XX | 表示重定向,这类状态码代表需要客户端采取进一步的操作才能完成请求。通常这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明 |
4XX | 表示请求错误,这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体。以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容 |
5XX | 表示服务器错误,这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体 |
几种常见的HTTP状态码
状态码 | 英文名称 | 描述 |
---|---|---|
200 | OK | 请求已成功,请求所希望的响应头或数据体将随此响应返回 |
202 | Accepted | 已接受请求,但未处理完成 |
206 | Partial Content | 部分内容,服务器成功处理了部分GET请求,如:断点续传 |
状态码 | 英文名称 | 描述 |
---|---|---|
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解客户端的请求,但是拒绝执行 |
404 | Not Found | 服务器无法根据客户端的请求找到资源 |
状态码 | 英文名称 | 描述 |
---|---|---|
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
502 | Bad Gateway | 充当网关或代理的服务器从远端服务器接收到了一个无效的请求 |
504 | Bad Gateway Timeout | 充当网关或代理的服务器从远端服务器未及时收到响应 |
3.响应头内容
首部字段名 | 说明 |
---|---|
Accept-Ranges | 是否接受字节范围请求 |
Age | 推算资源创建经过时间 |
ETag | 资源的匹配信息 |
Location | 令客户端重定向指定URI/URL |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | HTTP服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |