【教程】HTTP协议快速学习
备注
2021/4/1 星期四
以前已经学过一点简单的http协议了,但是一知半解,在这个网络时代http协议太重要了,准备再重新学习一下。
一、HTTP协议概述
http(Hypertext Transfoer Protocol)协议,叫做超文本传输协议,是tcp/ip协议中的应用层协议, 是一种无状态的协议(每次请求都是独立的与之前的请求没有任何相关性),默认端口为80。
- 一个完整的网页访问过程:浏览器根据域名解析IP地址->浏览器与WEB服务器建立一个TCP连接->浏览器给WEB服务器发送一个HTTP请求->服务器端响应HTTP请求,浏览器得到HTML代码->浏览器解析HTML代码,并请求HTML代码中的资源->关闭TCP连接,浏览器对页面进行渲染呈现给用户
二、http报文格式
用于http交互的信息叫做http报文,请求端发出的http报文叫做请求报文,响应端答复的叫做响应报文。
一个http报文由报文首部、空行、报文主体三部分组成
1.请求报文(Request Message)
请求报文的首部由请求行和首部字段组成
例如
2.响应报文(Response Message)
响应报文的首部由状态行和首部字段组成
例如
三、 协议版本
目前常见的http协议一共有四个版本
- http/0.9
最初版本,功能简陋,仅支持GET方法,仅能请求访问HTML格式的资源。 - http/1.0
在0.9的版本上做了修改,新增POST和HEAD方法,同时也开始支持更多种数据格式新增状态码、多字符集支持、多部分发送、权限、cache访问、内容编码等。 - http/1.1
目前被广泛使用的版本,引入了持久连接、管道机制,新增六种请求方式 - http/2.0
最新提出的版本,主要为解决1.1版本效率较低的问题,目前还没有被广泛使用
四、请求行(Request Line)
http请求报文的第一行称为请求行,请求行由请求方法、URL、协议版本和换行符组成
1. 请求方法
在http1.0中只定义了三种方法GET、POST和HEAD,http1.1中 新增了六种
方法 | 详情 |
---|---|
GET | 用于获取资源,请求指定的页面信息,并返回实体主体。 |
POST | 用于传输实体主题,向指定资源提交数据进行处理请求,如提交表单或者上传文件 |
HEAD | 与GET类似,不过返回具体的内容,只用于获取报头确认URL的有效性及资源更新的日期时间 |
OPTIONS | 用来查询请求URL指定的资源支持的方法。 |
PUT | 类似FTP协议的文件上传,将请求报文主体中包含的文件内容保存到请求URL指定的位置 |
DELETE | 与PUT相反,用来将指定URL位置的文件删除 |
PATCH | 对某个资源做部分修改 |
TRACE | 追踪一个资源请求中间所经过的代理 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
2. URL
URL(Uniform Resource Locator)叫统一资源定位器,是网络每一信息资源都有的在网上唯一的地址。
五、状态行(Statuse Line)
http响应报文的第一行称为状态和行,状态行由协议版本、状态码、状态信息和换行符组成
1.状态码类别
代码 | 类别 | 详情 |
---|---|---|
1XX | Informational(信息性状态码) | 请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Sever Error(服务器错误状态码) | 服务器处理请求出错 |
2.常见状态码
状态码 | 状态信息 | 详情 |
---|---|---|
200 | OK | 请求被正常处理了 |
204 | No Content | 请求成功处理,但响应报文不含实体主体 |
206 | Partial Content | 响应客户端的范围响应,并成功返回指定范围的实体内容 |
301 | Moved Permanently | 永久重定向,资源已被分配新的URI,希望以后使用新的URI访问 |
302 | Found | 临时重定向,希望本次使用新的URI访问 |
303 | See Other | 与302Found相似,但要求客户端使用GET方式访问资源 |
304 | NotModified | 请求不满足条件,返回结果不包含主体,这一代码实际也和重定向没有关系 |
307 | Temporary Redirect | 临时重定向,与302Found相似 |
400 | BadRequest | 报文中有语法错误,需要修改后重发 |
401 | Unauthorized | 请求需要认证或认证失败 |
403 | Forbidden | 请求的资源被拒绝,服务器没必要做出解释,但也可以在主体中给出解释 |
404 | Not Found | 没有找到请求的资源,也可以当作403Forbidden使用 |
500 | Internal Server Error | 服务器发生错误 |
503 | Service Unavailable | 服务器超载或停机维护 |
六、首部字段总结
首部字段是http报文中的重要内容,首部字段可以提供报文主体大小、所使用的语言、认证信息等内容。首部字段分为四种。
1.通用首部字段(General Header Fields)
字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部、连接的管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
2.请求首部字段(Request Header Fields)
字段名 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言(自然语言) |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为 |
From | 用户的电子邮箱地址 |
Host | 请求资源所在服务器 |
If-Match | 比较实体标记(ETag) |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记(与 If-Match 相反) |
If-Range | 资源未更新时发送实体 Byte 的范围请求 |
If-Unmodified-Since | 比较资源的更新时间(与If-Modified-Since相反) |
Max-Forwards | 最大传输逐跳数 |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 实体的字节范围请求 |
Referer | 对请求中 URI 的原始获取方 |
TE | 传输编码的优先级 |
User-Agent HTTP | 客户端程序的信息 |
3.响应首部字段(Response Header Fields)
字段名 | 说明 |
---|---|
Accept-Ranges | 是否接受字节范围请求 |
Age | 推算资源创建经过时间 |
ETag | 资源的匹配信息 |
Location | 令客户端重定向至指定URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | HTTP服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |
4.实体首部字段(Entity Header Fields)
字段名 | 说明 |
---|---|
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小(单位:字节) |
Content-Location | 替代对应资源的URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源的最后修改日期时间 |