HTTP必备知识
HTTP协议(HyperText Transfer Protocol) 超文本传输协议,基于TCP/IP通信协议来传递数据
原理
- 工作于C/S架构上,浏览器作为客户端向服务器发送请求(request),服务器:Apache(80)、Tomcat(8080)、nginx(80)、IIS等,括号内为默认端口
- 服务器收到请求后,向客户端发送响应消息(response)
图1 TCP/IP通信传输流
HTTP是无连接的,每次连接只处理一个请求
HTTP是无状态的,对于事务处理没有记忆能力
HTTP是媒体独立的,可指定MIME-type来规定传输数据类型.
HTTP消息结构
使用统一资源标识符(URI)来传输数据和建立连接
客户端请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
- 请求行(request line):包含请求方法,URI、HTTP版本
- 请求头部(header)
- 空行
- 请求数据
如下图:
服务器响应消息
包括:
- 状态行:响应结果状态码,原因短语,HTTP版本
- 消息报头
- 空行
- 响应正文
实例
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
HTTP 请求方法
HTTP1.0 GET、POST、HEAD方法
HTTP1.1 新增OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定资源 |
2 | POST | 提交表单,传输实体数据包含在请求头中 |
3 | HEAD | 类似GET,用于获取报头 |
4 | PUT | 传输文件,会导致资源建立或已有资源修改 |
5 | DELETE | 删除文件 |
5 | CONNECT | 要求用隧道代理方式 |
5 | OPRIONS | 询问支持的方法 |
5 | TRACE | 追踪路径 |
5 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 |
HTTP状态码
常见的HTTP状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500内部服务器错误
状态码分类
分类 | 描述 |
---|---|
1XX | 信息,服务器收到请求,需要请求者继续执行操作 |
2XX | 成功,请求正常处理完毕 |
3XX | 重定向,需要进行附加操作以完成请求 |
4XX | 客户端错误,服务器无法处理请求 |
5XX | 服务器状态,服务器处理请求出错 |
状态码 | 原因短码 | 具体描述 |
---|---|---|
200 | OK | 请求成功。一般用于GET与POST请求 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
HTTP首部字段
通用首部字段
Cache-Control 控制缓存行为
Date 创建报文日期时间
Connection 逐跳首部、连接的管理 close/Keep-Alive(HTTP1.1默认)
Transfer-Encoding 传输编码方式 chunkde 分块
请求首部字段
Accept 用户代理可处理的首部 (格式和权重)
Accept-Charset 优先使用的字符集 GB2312
Accept-Encoding 优先使用的内容编码 gzip
Accept-Language 优先使用语言 en-us zh-cn
Host 请求资源所在服务器 主机地址
User-Agent HTTP客户端程序的信息
Authorization Web认证信息 证书值
响应首部字段
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
Location 令客户端重定向至指定URI
Proxy-Authorization 代理服务器对客户端的认证信息
Server HTTP 服务器的安装信息
实体首部字段
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体适用的内容编码
Content-Language 实体主体的使自然语言
Content-Length 实体主体的大小
Content-Location 替代对应资源的URI
Content-Type 实体主体的媒体类型 和编码 charset
Expires 实体主体过期日期时间
Last-Modified 资源最后修改日期时间
逐跳首部字段(除此都是端到端首部)
Connection、Keep-Alive、Upgrade、Proxy-Authorization、Proxy-Authenticate、Transfer-Encoding、TE
Cookie 相关字段
- Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段 发出者为服务器
参数:HttpOnly 防止脚本攻击 Secure 仅在HTTPS安全通信时才会发送Cookie expires 过期时间 name=value(必需) - Cookie 服务器接收到的Cookie信息 请求首部字段
常见媒体格式
- 常见的媒体格式类型如下:
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif:gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
- 以application开头的媒体格式类型:
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 : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
- 另外一种常见的媒体格式是上传文件之时使用的:
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
HTTP1.1改进
- 默认长连接
- 支持只发送头信息(节约了带宽)
- 支持host域 一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
- 缓存处理 引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
- 错误通知 在HTTP1.1中新增了24个错误状态响应码
HTTP2.0改进
- 多路复用 同一个连接并发处理多个请求
- 请求头压缩 HTTP2.0使用HPACK算法对header的数据进行压缩
- 服务器推送