一、HTTP协议
1、什么是HTTP协议?
客户端:请求访问文本或图像等资源的一端
服务器端:提供资源响应的一端
(1)HTTP协议用于客户端和服务端之间的通信,通过请求和响应的交换达成通信。
(2)HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。
(3)HTTP是一种不保存,即无状态协议。HTTP协议自身不具备保存之前发送过得请求或响应的功能。如果需要保存状态,需要使用cookie技术。
(4)HTTP协议使用URI定位互联网上的资源。
2、HTTP方法
方法 | 作用 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
二、HTTP报文
1、什么是HTTP报文?
用于HTTP协议交互的信息被称为HTTP报文。
请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。
2、了解请求报文和响应报文
请求报文
请求报文 | 具体内容 |
---|---|
报文首部 | 请求行、请求首部字段、通用首部字段、实体首部字段、其他 |
空行 | |
报文主体 |
响应报文
响应报文 | 具体内容 |
---|---|
报文首部 | 状态行、响应首部字段、通用首部字段、实体首部字段、其他 |
空行 | |
报文主体 |
3、压缩传输的内容编码
- gzip(GNU zip)
- compress(UNIX系统的标准压缩)
- deflate(zlib)
- identity(不进行编码)
三、HTTP状态码
HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。
状态码的类别
状态码 | 类别 | 原因短语 |
---|---|---|
1xx | Informational(信息性状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务器错误状态码) | 服务器处理请求错误 |
具体的状态码含义
状态码 | 原因短语 | 含义 |
---|---|---|
200 | OK | 表示客户端发来的请求在服务器被正常处理了 |
204 | No Content | 代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分 |
206 | Partial Content | 表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求 |
301 | Moved Permanently | 永久性重定向。表示请求的资源已被分配了新的URI |
302 | Found | 临时性重定向。表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问 |
303 | See Other | 表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源 |
304 | Not Modified | 表示资源已找到,但未符合条件请求 |
307 | Temporary Redirect | 临时重定向。 |
400 | Bad Request | 表示报文中存在语法错误 |
401 | Unauthorized | 表示发送的请求需要有HTTP认证的认证信息 |
403 | Forbiddent | 表明对请求资源的访问被服务器拒绝了 |
404 | Not Found | 表明服务器上无法找到请求的资源 |
500 | Internal Server Error | 表明服务器端在执行请求时发生了错误 |
503 | Service Unavailable | 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。 |
四、与HTTP通信的应用程序
HTTP通信时,除客户端和服务器外,还有一些用于通信数据转发的应用程序:
代理
代理是一种有转发功能的应用程序,接收客户端发送的请求后转发给其他客户端,不改变URI。
网关
网关是转发其他服务器通信数据的服务器,工作机制跟代理类似,还能使通信线路上的服务器提供非HTTP协议服务。
隧道
隧道是一条客户端与服务器连接的通信线路,使用SSL等加密手段进行通信,本身不会解析HTTP请求。隧道本身是透明的,客户端不用在意隧道的存在。
五、HTTP首部字段
1、通用首部字段
首部字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部、连接的管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误信息 |
2、请求首部字段
首部字段名 | 说明 |
---|---|
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 | 实体的字节范围请求 |
Refer | 对请求中URI的原始获取方 |
TE | 传输编码的优先级 |
User-Agent | HTTP客户端程序的信息 |
3、响应首部字段
首部字段名 | 说明 |
---|---|
Accept-Ranges | 是否接受字节范围请求 |
Age | 推算资源创建经过时间 |
ETag | 资源的匹配信息 |
Location | 令客户端重定向至指定URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | HTTP服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |
4、实体首部字段
首部字段名 | 说明 |
---|---|
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小 |
Content-Location | 替代对应资源的URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体的媒体类型 |
Last-Modified | 资源的最后修改时间 |
六、HTTP首部字段指令
1、通用首部字段
(1)Cache-Control,操作缓存的工作机制
指令 | 含义 |
---|---|
Cache-Control: public | 表明其他用户也可利用缓存 |
Cache-Control: private | 表示响应只以特定的用户作为对象 |
Cache-Control: no-cache | 不缓存过期的资源 |
Cache-Control: no-store | 不存储缓存 |
Cache-Control: maxage=604800 | 缓存资源的缓存时间不超过604800秒(即一周),那么客户端就接收缓存的资源;如果max-age为0,表示缓存服务器不使用已缓存的资源,直接将请求转发给源服务器获取资源。 |
Cache-Control: s-maxage=604800 | 跟max-age指令相同,不过s-maxage指令只适用于供多位用户使用的公共缓存服务器 |
Cache-Control: min-fresh=60 | 在60秒以内如果有超过有效期限的资源都无法作为响应返回 |
Cache-Control: max-stale=3600 | 在3600秒内,无论资源是否过期,客户端都会接收 |
Cache-Control: only-if-cached | 客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回 |
Cache-Control: must-revalidate | 代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效 |
Cache-Control: proxy-revalidate | 要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性 |
Cache-Control: no-transform | 无论是在请求还是在响应中,缓存都不能改变实体主体的媒体类型 |
(2)Connection
指令 | 含义 |
---|---|
Connection: 不再转发的首部字段名 | 不再转发给代理的首部字段 |
Connection: close | 断开连接 |
Connection: Keep-Alive | 维持持续连接 |
(3)Date:表明创建HTTP报文的日期和时间
(4)Pragma
Cache-Control: no-cache
Pragma: no-cache
客户端要求所有的中间服务器不返回缓存的资源
(5)Trailer:事先说明在报文主体后记录了哪些首部字段
Trailer: Expires
...
0
Expires: Tue, 28 Sep 2014 23:49:49 GMT
指定首部字段Trailer的值为Expires
(6)Warning:警告码
警告码 | 警告内容 | 说明 |
---|---|---|
110 | Response is stale(响应已过期) | 代理返回已过期的资源 |
111 | Revalidation failed(再验证失败) | 代理再验证资源有效性时失败 |
112 | Disconnection operation(断开连接操作) | 代理与互联网连接被故意切断 |
113 | Heuristic expiration(试探性过期) | 响应的使用期超过24小时 |
199 | Miscellaneous warning(杂项警告) | 任意的警告内容 |
214 | Transformation applied(使用了转换) | 代理对内容编码或媒体类型等执行了某些处理时 |
299 | Miscellaneous persistent warning(持久杂项警告) | 任意的警告内容 |
2、请求首部字段
指令 | 含义 |
---|---|
Accept:text/plain; q=0.3, text/htm | 通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级 |
Accept-Charset: iso-8859-5, unicode-1-1; q=0.8 | 通知服务器用户代理支持的字符集及字符集的相对优先顺序 |
Accept-Encoding: gzip, deflate | 告知服务器用户代理支持的内容编码及内容编码的优先级顺序 |
Accept-Language:zh-cn,zh;q=0.7, en-us | 告知服务器用户代理能够处理的自然语言集,以及自然语言集的优先级 |
Authorization | 告知服务器,用户代理的认证信息(证书值) |
Expect | 告知服务器,期望出现的某种特定行为 |
3、响应首部字段
(1)Accept-Ranges
Accept-Ranges: bytes
告知客户端服务器是否能处理范围为byte的请求
(2)Server
Server: Apache/2.2.17(Unix)
告知客户端当前服务器上安装的HTTP服务器应用程序的信息
4、实体首部字段
(1)Allow
Allow: GET, HEAD
通知客户端能够支持Request-URI指定资源的所有HTTP方法
(2)Expires
Expires: Wed, 23 Sep 2016 21:36:01 GMT
七、HTTPS
HTTP+加密+认证+完整性保护 = HTTPS(HTTP Secure)
HTTPS是身披SSL外壳的HTTP