一、基础知识
1,URI,统一资源标识符(uniform resource identifier)
URI包含URL(统一资源定位符uniform resource locator)和URN(统一资源名称uniform resource name);
2,请求和响应报文
请求报文:
响应报文:
二,HTTP请求方法
客户端发送的 请求报文 第一行为请求行,包含了方法字段。
GET:获取资源
HEAD:获取报文首部,不返回主体部分。用于确认URL有效期以及资源更新时间等
POST:传输实例主体,主要用来传输数据
PUT:上传文件,由于自身不带验证机制,任何人都可以上传文件,存在安全性问题;
PATCH:对资源进行部分修改,允许部分修改
DELETE:删除文件,不带验证机制
OPTIONS:支持查询的方法,查询指定的URL能够支持的方法,会返回Allow:GET,POST等这样的内容
CONNECT:要求在与代理服务器通信时建立隧道,使用SSL和TLS协议,机密后经网络隧道传输。
<SSL,Secure Socket Layer 安全套接层><TLS,Transport Layer Security 传输层安全>
TRACE:追踪路径 ,服务器将通信路径返回给客户端。通常不会使用,因为它会受到跨站追踪。
三、HTTP状态码
服务器返回的响应报文中的第一行为状态行,包含状态码以及原因短语,用来告知客户端请求的结果。
| 状态码 | 类别 | 含义 |
|---|---|---|
| 1XX | Informational(信息性状态码) | 接收的请求正在处理 |
| 2XX | Success(成功状态码) | 请求正常处理完毕 |
| 3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
| 4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
| 5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
1XX信息性状态码:
100 continue:目前正常,客户端可以继续发送请求或者忽略这个响应;
2XX成功状态码:
200 OK
204 No content:请求已成功处理,但是返回响应不包含实体的主体部分。
206 Partial Content:客户端进行了范围请求,响应报文保函由Content-Range指定范围的实体内容。
3XX重定向状态码:
301 Moved Permanently:永久重定向
302 Found:临时重定向
303 See Other:临时重定向,明确要求客户端采用GET获取资源。
304 Not Modified:未更改
307 Temporary Redirect:临时重定向,类似302,不要求把请求方法改为GET
4XX客户端错误状态码:
400 Bad Request:请求报文中存在语法错误
401 Unauthorized:请求用户认证
403 Forbidden:请求被拒绝
404 Not Found
5XX服务器错误状态码:
500 Internal Server Error:正在执行请求时发生错误
503 Service Unavailable:暂时在维护,无法处理请求;
四、HTTP首部-4种
通用首部字段、请求首部字段,响应首部字段,和实体首部字段
通用首部字段:
| 首部字段名 | 说明 |
|---|---|
| Cache-Control | 控制缓存的行为 |
| Connection | 控制不再转发给代理的首部字段、管理持久连接 |
| Date | 创建报文的日期时间 |
| Pragma | 报文指令 |
| Trailer | 报文末端的首部一览 |
| Transfer-Encoding | 指定报文主体的传输编码方式 |
| Upgrade | 升级为其他协议 |
| Via | 代理服务器的相关信息 |
| Warning | 错误通知 |
请求首部字段:
| 首部字段名 | 说明 |
|---|---|
| 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 客户端程序的信息 |
响应首部字段:
| 首部字段名 | 说明 |
|---|---|
| Accept-Ranges | 是否接受字节范围请求 |
| Age | 推算资源创建经过时间 |
| ETag | 资源的匹配信息 |
| Location | 令客户端重定向至指定 URI |
| Proxy-Authenticate | 代理服务器对客户端的认证信息 |
| Retry-After | 对再次发起请求的时机要求 |
| Server | HTTP 服务器的安装信息 |
| Vary | 代理服务器缓存的管理信息 |
| WWW-Authenticate |
服务器对客户端的认证信息 |
实体首部字段:
|
首部字段名 |
说明 |
|---|---|
| Allow | 资源可支持的 HTTP 方法 |
| Content-Encoding | 实体主体适用的编码方式 |
| Content-Language | 实体主体的自然语言 |
| Content-Length | 实体主体的大小 |
| Content-Location | 替代对应资源的 URI |
| Content-MD5 | 实体主体的报文摘要 |
| Content-Range | 实体主体的位置范围 |
| Content-Type | 实体主体的媒体类型 |
| Expires | 实体主体过期的日期时间 |
| Last-Modified | 资源的最后修改日期时间 |
连接管理-3种:
当浏览器访问一个包含多张图片的HTML页面时,出了请求访问HTML页面资源,还会请求图片资源。
长连接只需要建立一次TCP连接,就能多次进行HTTP通信。
从HTTP/1.1开始,默认长连接,若断开,则有客户端/服务器提出,Connection:close
在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 Connection : Keep-Alive。
流水线:流水线是在同一条长连接上发出连续的请求,而不用等待响应返回,这样可以避免连接延迟。