HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同, 用于客户端和服务器之间的通信。
请求访问文本或图像等资源的一端称为客户端, 而提供资源响应的一端称为服务器端。
在两台计算机之间使用 HTTP 协议通信时, 在一条通信线路上必定有一端是客户端, 另一端则是服务器端。
2.2 通过请求和响应的交换达成通信HTTP 协议规定, 请求从客户端发出, 最后服务器端响应该请求并返回。
请求报文是由请求方法、 请求 URI、 协议版本、 可选的请求首部字段和内容实体构成的。
请求报文如下:
起始行开头的GET表示请求访问服务器的类型, 称为方法(method) 。
随后的字符串 /index.htm 指明了请求访问的资源对象,也叫做请求 URI(request-URI) 。
最后的 HTTP/1.1, 即 HTTP 的版本号, 用来提示客户端使用的 HTTP 协议功能。
响应报文基本上由协议版本、 状态码(表示请求成功或失败的数字代码) 、 用以解释状态码的原因短语、 可选的响应首部字段以及实体主体构成。
响应报文如下:
在起始行开头的 HTTP/1.1 表示服务器对应的 HTTP 版本。
紧挨着的 200 OK 表示请求的处理结果的状态码(status code) 和原因短语(reason-phrase)。
下一行显示了创建响应的日期时间, 是首部字段(header field) 内的一个属性。
接着以一空行分隔, 之后的内容称为资源实体的主体(entity body)。
2.3 HTTP 是不保存状态的协议HTTP 是一种不保存状态, 即无状态(stateless)协议。 HTTP 协议自身不对请求和响应之间的通信状态进行保存。使用 HTTP 协议, 每当有新的请求发送时, 就会有对应的新响应产生。 协议本身并不保留之前一切的请求或响应报文的信息。
2.4 请求 URI 定位资源HTTP 协议使用 URI 定位互联网上的资源。当客户端请求访问资源而发送请求时, URI 需要将作为请求报文中的请求 URI 包含在内。 例如:URI为完整的请求URI、在首部字段Host中写明网络域名或IP地址。除此之外, 如果不是访问特定资源而是对服务器本身发起请求, 可以用一个 * 来代替请求 URI。
2.5 告知服务器意图的 HTTP 方法GET : 获取资源
GET 方法用来请求访问已被 URI 识别的资源。 指定的资源经服务器端解析后返回响应内容。
POST: 传输实体主体
虽然用 GET 方法也可以传输实体的主体, 但一般不用 GET 方法进行传输, 而是用 POST 方法。 虽说 POST 的功能与 GET 很相似, 但 POST 的主要目的并不是获取响应的主体内容。
PUT: 传输文件
PUT 方法用来传输文件。要求在请求报文的主体中包含文件内容, 然后保存到请求 URI 指定的位置。
HEAD: 获得报文首部
HEAD 方法和 GET 方法一样, 只是不返回报文主体部分。 用于确认URI 的有效性及资源更新的日期时间等。
DELETE: 删除文件
DELETE 方法用来删除文件, 是与 PUT 相反的方法。 DELETE 方法按请求 URI 删除指定的资源。
OPTIONS: 询问支持的方法
OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
TRACE: 追踪路径
TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。发送请求时, 在 Max-Forwards 首部字段中填入数值, 每经过一个服务器端就将该数字减 1, 当数值刚好减到 0 时, 就停止继续传输, 最后接收到请求的服务器端则返回状态码 200 OK 的响应。客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修改 / 篡改的。
CONNECT: 要求用隧道协议连接代理
ConNECT 方法要求在与代理服务器通信时建立隧道, 实现用隧道协议进行 TCP 通信。 主要使用 SSL(Secure Sockets Layer, 安全套接层) 和 TLS(Transport Layer Security, 传输层安全) 协议把通信内容加密后经网络隧道传输。
向请求 URI 指定的资源发送请求报文时, 采用称为方法的命令。方法的作用在于, 可以指定请求的资源按期望产生某种行为。
HTTP/1.0 和 HTTP/1.1 支持的方法表2.7 持久连接节省通信量 2.7.1 持久连接
持久连接的特点是, 只要任意一端没有明确提出断开连接, 则保持 TCP 连接状态。
持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销, 减轻了服务器端的负载。 另外, 减少开销的那部分时间, 使 HTTP 请求和响应能够更早地结束, 这样 Web 页面的显示速度也就相应提高了。
在 HTTP/1.1 中, 所有的连接默认都是持久连接, 但在 HTTP/1.0 内并未标准化。 虽然有一部分服务器通过非标准的手段实现了持久连接,但服务器端不一定能够支持持久连接。 毫无疑问, 除了服务器端, 客户端也需要支持持久连接。
管线化技术使得不用等待响应亦可直接发送下一个请求。做到同时并行发送多个请求, 而不需要一个接一个地等待响应了。
2.8 使用 cookie 的状态管理cookie 技术通过在请求和响应报文中写入 cookie 信息来控制客户端的状态。
cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-cookie 的首部字段信息, 通知客户端保存 cookie。 当下次客户端再往该服务器发送请求时, 客户端会自动在请求报文中加入cookie 值后发送出去。
服务器端发现客户端发送过来的 cookie 后, 会去检查究竟是从哪一个客户端发来的连接请求, 然后对比服务器上的记录, 最后得到之前的状态信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)