HTTP
? HTTP(HyperText Transfer Protocol),超文本传输协议。
简单的 HTTP 协议
HTTP 是不保存状态的协议
? HTTP 是一种不保存状态,即无状态协议。
? 使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。
HTTP 方法
GET:获取资源
? GET 方法用来请求访问已被 URI 识别的资源。
POST:传输实体主体
? POST 方法用来传输实体的主体。
PUT:传输文件
? PUT 方法用来传输文件。
HEAD:获得报文首部
? HEAD 方法用来请求访问已被 URI 识别的资源,只是不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。
DELETE:删除文件
? DELETE 方法用来删除文件。
OPTIONS:询问支持的方法
? OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
注:方法名要用大写字母。
持久连接
? 在 HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。当使用浏览器浏览一个包含多张图片的 HTML 页面时,在发送请求访问 HTML 页面资源的同时,也会请求该 HTML 页面里包含的其他资源。因此,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销。
? 为了减少通信量的开销,HTTP/1.1 采用了持久连接的方法。持久连接的特点是只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
管线化
? 以前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术可以不用等待响应直接发送下一个请求。这样就能够做到同时发送多个请求,而不需要一个接一个地等待响应了。
cookie
? HTTP 协议虽然是一个无状态协议,但是有了 Cookie 技术就可以管理状态了。Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
? Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
? 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
没有 Cookie 信息状态下的请求 第2次以后(存有 Cookie 信息状态)的请求
HTTP 报文
请求报文(上)和响应报文(下)
请求行
? 包含用于请求的方法,请求 URI 和 HTTP 版本。
状态行
? 包含表明响应结果的状态码,原因短语和 HTTP 版本。
状态码
? 状态码是当客户端向服务器端发送请求时,描述返回的请求结果。通过状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
? 状态码以 3 位数字和原因短语组成。数字中的第一位指定了响应类别,有以下 5 种。
| 类别 | 原因短语 |
---|
1XX | 信息性状态码 | 接收的请求正在处理 | 2XX | 成功状态码 | 请求正常处理完毕 | 3XX | 重定向状态码 | 需要进行附加操作以完成请求 | 4XX | 客户端错误状态码 | 服务器无法处理请求 | 5XX | 服务器错误状态码 | 服务器处理请求出错 |
2XX 成功
? 2XX 的响应结果表明请求被正常处理了。
200 OK
? 表示从客户端发来的请求在服务器端被正常处理了。
204 No Content
? 表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。
206 Partial Content
? 表示客户端进行了范围请求,而服务器成功执行了这部分请求。
3XX 重定向
? 3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
301 Moved Permanently
? 永久性重定向。说明请求的资源已经不存在了,需改用新的 URI 再次访问。
302 Found
? 临时性重定向。说明请求的资源还在,但暂时需要用另一个 URI 来访问。
4XX 客户端错误
? 4XX 的响应结果表示客户端发生错误。
400 Bad Request
? 表示请求报文中存在语法错误。
403 Forbidden
? 表示对请求资源的访问被服务器拒绝了。
404 Not Found
? 表示服务器上无法找到请求的资源。
5XX 服务器错误
? 5XX 的响应结果表明服务器本身发生错误。
500 Internal Server Error
? 表示服务器端在执行请求时发生了错误。
503 Service Unavailable
? 表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
与 HTTP 协作的 Web 服务器
代理、网关、隧道
代理
? 代理服务器接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
? 代理分为缓存代理和透明代理。
缓存代理
? 代理转发响应时,缓存代理会预先将资源的副本缓存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。
透明代理
? 转发请求或响应时,不对报文做任何加工的代理被称为透明代理。反之,对报文内容进行加工的代理被称为非透明代理。
网关
? 网关能使通信线路上的服务器提供非HTTP协议服务。
隧道
? 通过隧道的传输,可以和远距离的服务器安全通信。
缓存
? 缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。
缓存的有效期限
客户端的缓存
? 缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中。缓存如果有效,就不必再向服务器请求相同的资源了,可以直接从本地磁盘内读取。
? 当判定缓存过期后,会向源服务器确认资源的有效性。若判断缓存失效,浏览器会再次请求新资源。
|