HTTP 协议
HTTP,Hyper Text Transfer Protocl(超文本传输协议),主要应用于www(Web),最初目的是为了提供一种发布和接收HTML页面的方法。
一、数据包
1. 请求报文

-
请求行
- 请求方法
例如,get:读/看,获取;post:写/提交 - 请求信息
例如,index.html首页文件 - 请求协议
- HTTP/1.0:TCP短连接
- HTTP/1.1(主流):TCP长连接(keepalived)
- HTTP/2.0:TCP长连接优化,提高用户并发访问效率
- 请求方法
-
请求头
- Host:请求主机信息
- User-Agent:使用的浏览器类型
- Accept:客户端可识别的内容类型
-
空行
- 最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头
-
请求主体
- 使用get方法,无请求主体信息
- 使用post方法,有请求主体信息
2. 响应报文

-
起始行
- 响应协议
- 状态码
- 状态码的文本描述
-
响应头
- 媒体类型
- 私有连接及时间
- 字符集
-
空行
-
响应主体
二、请求方法
| 方法 | 简述 | 详述 |
|---|---|---|
| GET | 获取 | 请求指定的页面信息,并返回实体主体 |
| HEAD | 获取 | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
| POST | 写/提交 | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改 |
| PUT | 替换 | 从客户端向服务器传送的数据取代指定的文档的内容 |
| DELETE | 删除 | 请求服务器删除指定的页面 |
| CONNECT | 连接 | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 |
| OPTIONS | 查看 | 允许客户端查看服务器的性能 |
| TRACE | 追踪 | 回显服务器收到的请求,主要用于测试或诊断 |
| PATCH | 局部更新 | 是对 PUT 方法的补充,用来对已知资源进行局部更新 |
三、状态码
状态码由三个十进制数字组成,第一个数字定义了状态码的类型。
1. 分类
| 状态码 | 说明 |
|---|---|
| 1xx | 信息,服务器收到请求,需要请求者继续操作 |
| 2xx | 操作成功 |
| 3xx | 重定向,需要进一步操作以完成请求 |
| 4xx | 客户端错误,请求包含语法错误,或无法完成请求 |
| 5xx | 服务器错误,服务器在处理请求时发生错误 |
2. 状态码列表
| 状态码 | 英文名称 | 简述 | 详述 |
|---|---|---|---|
| 100 | Continue | 继续 | 客户端应继续其请求 |
| 101 | Switching Protocols | 切换协议 | 服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
| 200 | OK | 请求成功 | 一般用于GET与POST请求 |
| 201 | Created | 已创建 | 成功请求并创建了新的资源 |
| 202 | Accepted | 已接受 | 已经接受请求,但未处理完成 |
| 203 | Non-Authoritative Information | 非授权信息 | 请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
| 204 | No Content | 无内容 | 服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
| 205 | Reset Content | 重置内容 | 服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
| 206 | Partial Content | 部分内容 | 服务器成功处理了部分GET请求 |
| 300 | Multiple Choices | 多种选择 | 请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
| 301 | Moved Permanently | 永久移动 | 请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
| 302 | Found | 临时移动 | 与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
| 303 | See Other | 查看其它地址 | 与301类似。使用GET和POST请求查看 |
| 304 | Not Modified | 未修改。 | 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
| 305 | Use Proxy | 使用代理。 | 所请求的资源必须通过代理访问 |
| 306 | Unused | 已经被废弃的HTTP状态码 | |
| 307 | Temporary Redirect | 临时重定向 | 与302类似。使用GET请求重定向 |
| 400 | Bad Request | 客户端请求的语法错误 | 服务器无法理解 |
| 401 | Unauthorized | 请求要求用户的身份认证 | |
| 402 | Payment Required | 预留 | 将来使用 |
| 403 | Forbidden | 拒绝执行 | |
| 404 | Not Found | 找不到资源 | |
| 405 | Method Not Allowed | 请求方法错误 | |
| 406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 | |
| 407 | Proxy Authentication Required | 需要代理认证 | 与401类似,但请求者应当使用代理进行授权 |
| 408 | Request Time-out | 请求超时 | |
| 409 | Conflict | 请求冲突 | 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 |
| 410 | Gone | 请求的资源不存在(以前有,现在没了) | 410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
| 411 | Length Required | 请求长度 | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
| 412 | Precondition Failed | 请求的先决条件错误 | |
| 413 | Request Entity Too Large | 请求实体过大 | 请求实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
| 414 | Request-URI Too Large | 请求的URI过长 | |
| 415 | Unsupported Media Type | 不支持的媒体类型 | |
| 416 | Requested range not satisfiable | 请求范围无效 | |
| 417 | Expectation Failed | expect请求失败 | |
| 500 | Internal Server Error | 服务器内部错误 | |
| 501 | Not Implemented | 未执行 | 服务器不支持请求的功能,无法完成请求 |
| 502 | Bad Gateway | 网关错误 | |
| 503 | Service Unavailable | 服务无法连接 | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
| 504 | Gateway Time-out | 网关超时 |
四、资源类型
1. 静态资源
-
描述
- 要什么给什么,服务器页面显示什么,客户端页面就显示什么。
-
常见后缀
- html、shtml、xml、css
-
特点
- 网页是固定不变的
- 容易被搜索引擎收录
- 网页没有数据库支持
- 所以在网站制作和维护方面的工作量较大,当网站信息量很大时,完全依靠静态网页比较困难
- 网页交互性较差
- 在程序功能方面实现不全
- 不做任何解析
- 当客户端请求数据时,服务器会直接从磁盘文件系统上返回数据
- 网页是固定不变的
2. 动态资源
-
描述
- 要什么信息,需要查询数据库进行解析后发送给客户端
-
常见类型
- asp、php、jsp
-
特点
- 必须有数据库支持
- 可以实现更多功能(交互)
- 特殊符号
?、&,不便于被搜索引擎收录 - 接收到用户请求,需要数据库作出处理,响应慢
3. 伪静态资源
-
动态转静态
- 利用rewrite重写技术把动态网页变成静态网页
- 访问时,rewrite重写,连接数据库查询
-
特点
- 便于搜索引擎收录
- 有数据库支持,实现交互