通信双方,请求访问文本或图像等资源的一端为客户端,提供资源响应的一端为服务器端。对于一条通信线路来说,服务器端和客户端是明确分开的。
请求必须由客户端发出,由服务器响应回复。
HTTP/1.0 和 HTTP/1.1 支持的方法
关于持久化连接
早期的HTTP连接每进行一次HTTP通信就要断开一次TCP连接,如果网页中包含很多其他资源,就存在许多无谓的请求和断开,增加了通信的开销,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接。
持久连接旨在建立 1 次 TCP 连接后进行多次请求和响应的交互。
持久化连接使管线化变为可能,即之前需要发送请求,然后等待回应。现在无需等待回应,可以同时发送多个请求无需逐个等待回应。
关于Cookie
HTTP为无状态连接,长连接解决的是一个页面多次请求开销大问题,Cookie机制则可以解决请求多个页面反复认证的问题。
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
用于HTTP协议交互的信息被称为HTTP报文。分为请求报文和响应报文。报文本身就是多行字符串。第一行为报文首部,其余为报文主体。
请求报文和响应报文格式如下:
HTTP传输可以按照数据原貌传输,但是为了提高传输速率:
可以对实体内容进行原样压缩
常用的内容编码有以下几种
• gzip(GNU zip)
• compress(UNIX 系统的标准压缩)
• deflate(zlib)
• identity(不进行编码)分割发送的分块传输内容编码
分块传输编码会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。
发送多种数据的多部分对象集合
我们平时发送邮件时,可以添加附件,可添加的附件的类型多种多样,是因为邮件发送采用了MIME机制,它允许邮件处理文本、图片、视频等多个不同类型的数据。而在MIME扩展中会使用一种称为多部分对象集合的方法,能容纳多种类型。
内容协商是指请求页面存在多种形式,然后根据客户端的语言、字符集、编码方式等响应给它最适合的页面。
当发起一个请求时,你可能需要知道你请求的结果,这时候就要明白状态码代表的含义了。
返回结果的状态码整理
1XX Informational(信息性状态码) | 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码)服务器处理请求出错
200 OK
在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。
204 Not Content
服务器接收的请求成功处理,但无内容可返回。
206 Partial Content
该状态码表示客户端的范围请求被成功处理。
301 Moved Permanently
永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。
302 Found
临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
303 See Other
303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。
304 Not Modified
该状态码表示客户端发送附带条件的请求 2 时,服务器端允许请求访问资源,但未满足条件的情况。304中不牵扯重定向。
307 Temporary Redirect
临时重定向。该状态码与 302 Found 有着相同的含义,只是不会从 POST 变成 GET。
400 Bad Request
表示请求报文中存在语法错误。
401 Unauthorized
该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示用 户认证失败。
403 Forbidden
表明对请求资源的访问被服务器拒绝了。实体的主体部分可能会有被拒绝的理由。
404 Not Found
该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error
表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障。
503 Service Unavailable
表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
http首部的结构及各字段的用法
在TCP传输中,无论请求还是响应都会使用到首部字段,使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。
与 Cookie 有关的首部字段
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息 请求首部字段
通用首部字段
请求首部字段
响应首部字段
实体首部字段
缓存请求指令