HTTP的场景实践 baidu.com| 青训营

332 阅读12分钟

基本概念image.png

HTTP(超文本传输协议)是一种用于在Web浏览器和Web服务器之间传输数据的协议。HTTP的场景实践包括以下几个方面:

  1. 请求和响应:客户端(如浏览器)通过发送HTTP请求到服务器,请求特定的资源(如HTML页面、图片、视频等)。服务器接收到请求后,会返回一个HTTP响应,其中包含请求的资源以及相关的元数据(如状态码、响应头等)。

  2. 请求方法:HTTP支持多种请求方法,如GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。不同的请求方法对应不同的操作。

  3. URL:URL(统一资源定位符)是用于标识互联网上资源的字符串。它由多个部分组成,如协议(http或https)、域名、路径和查询参数等。

  4. 状态码:HTTP响应中的状态码表示请求的处理结果。常见的状态码有200(成功)、404(未找到资源)、500(内部服务器错误)等。

  5. 响应头:HTTP响应中包含了一些元数据,称为响应头。这些信息描述了响应的属性,如内容类型、缓存控制、字符集等。

  6. 缓存:为了提高性能,HTTP支持缓存机制。客户端可以缓存服务器返回的资源,以便在后续请求中直接使用缓存的内容,而不需要再次向服务器发送请求。

  7. HTTPS:HTTPS(安全超文本传输协议)是在HTTP基础上加入了SSL/TLS加密层,提供了更加安全的数据传输。通过使用HTTPS,可以确保数据在传输过程中不被窃取或篡改。

发展历程

image.png

HTTP 是 Hyper Text Transfer Protocol 的缩写,即超文本传输协议。它是一个用于在客户端和服务器之间传输超文本文档的协议。HTTP 是互联网上最基本的协议,它定义了如何在客户端和服务器之间发送和接收请求和响应。

HTTP 最初由 Tim Berners-Lee 在 1989 年发明。当时,Web 还处于早期阶段,HTTP 的第一个版本 HTTP/0.9 非常简单,只支持 GET 方法。

在 1991 年,HTTP 的第二个版本 HTTP/1.0 发布。HTTP/1.0 增加了 POST 方法,并支持分块传输。

在 1997 年,HTTP 的第三个版本 HTTP/1.1 发布。HTTP/1.1 是目前使用最广泛的版本,它支持持久连接、压缩、分块传输等功能。

在 2015 年,HTTP 的第四个版本 HTTP/2 发布。HTTP/2 是 HTTP/1.1 的重大改进,它使用二进制编码,能够显著提高性能。

HTTP 是一个不断发展的协议,它随着 Web 的不断发展而不断改进。HTTP 是互联网上最基本的协议,它使 Web 成为我们今天所熟知的存在。

以下是 HTTP 各版本的主要功能:

  • HTTP/0.9:只支持 GET 方法,不支持分块传输。
  • HTTP/1.0:支持 POST 方法,支持分块传输。
  • HTTP/1.1:支持持久连接、压缩、分块传输等功能。
  • HTTP/2:使用二进制编码,能够显著提高性能。

HTTP 状态码

image.png

HTTP 状态码是 HTTP 协议中定义的状态码,用于指示请求的状态。状态码由三位数字组成,

第一位数字表示请求的类型,第二位数字表示请求的细分类型,第三位数字表示请求的详细信息。

HTTP 状态码分为五类:

  1. 成功状态码:表示请求成功,服务器已经处理了请求。
  2. 重定向状态码:表示请求成功,但服务器需要客户端重定向到新的 URL 才能获取资源。
  3. 客户端错误状态码:表示请求失败,是由于客户端的错误引起的。
  4. 服务器错误状态码:表示请求失败,是由于服务器的错误引起的。
  5. 信息状态码:表示请求成功,但没有资源返回。

常见的 HTTP 状态码包括:

  • 200 OK:请求成功,服务器已经处理了请求。
  • 301 Moved Permanently:请求成功,但服务器需要客户端重定向到新的 URL 才能获取资源。
  • 400 Bad Request:请求失败,是由于客户端的错误引起的。
  • 500 Internal Server Error:请求失败,是由于服务器的错误引起的。
  • 404 Not Found:请求成功,但没有资源返回。

HTTP 状态码是 HTTP 协议中非常重要的一部分,它用于指示请求的状态,帮助客户端和服务器之间更好地进行通信。

请求头

image.png

请求头是 HTTP 请求中用于传递有关请求的信息的头部字段。请求头由键和值组成,键以冒号分隔,值以空格分隔。 请求头可以用于传递各种信息,例如请求的资源类型、请求的媒体类型、请求的压缩方法、请求的缓存策略等。

请求头是 HTTP 协议中非常重要的一部分,它用于传递有关请求的信息,帮助客户端和服务器之间更好地进行通信。

以下是一些常见的请求头:

  • Accept:用于指定客户端可以接受的媒体类型。
  • Accept-Charset:用于指定客户端可以接受的字符集。
  • Accept-Encoding:用于指定客户端可以接受的压缩方法。
  • Accept-Language:用于指定客户端的语言偏好。
  • Authorization:用于指定客户端的身份验证信息。
  • Cookie:用于传递客户端的 cookie 信息。
  • Host:用于指定请求的资源的主机。
  • If-Modified-Since:用于指定客户端最后一次请求资源的时间。
  • If-None-Match:用于指定客户端最后一次请求资源的 ETag。
  • If-Unmodified-Since:用于指定客户端最后一次请求资源的时间,且资源未被修改。
  • User-Agent:用于指定客户端的用户代理。

请求头可以用于传递各种信息,这取决于请求的具体情况。

HTTP 缓存

image.png

缓存是指将数据存储在临时存储中,以便在需要时快速访问。在 HTTP 中,缓存可以用于提高性能,减少网络流量,并降低服务器的负载。

HTTP 缓存可以分为两种:客户端缓存和服务器缓存。客户端缓存是指在客户端(例如 Web 浏览器)中存储数据。服务器缓存是指在服务器中存储数据。

HTTP 缓存的工作原理如下:

  1. 客户端向服务器发送请求。
  2. 服务器响应请求,并将数据发送给客户端。
  3. 客户端将数据存储在缓存中。
  4. 客户端再次请求相同的数据时,将从缓存中获取数据,而不是从服务器获取数据。

HTTP 缓存可以提高性能,减少网络流量,并降低服务器的负载。

  • 提高性能:HTTP 缓存可以减少对服务器的请求次数,从而提高性能。
  • 减少网络流量:HTTP 缓存可以减少需要从服务器下载的数据量,从而减少网络流量。
  • 降低服务器的负载:HTTP 缓存可以减少服务器需要处理的请求数,从而降低服务器的负载。

HTTP 缓存是 HTTP 协议中非常重要的一部分,它可以帮助提高性能,减少网络流量,并降低服务器的负载。

场景分析

常规

image.png

图中代码是一个HTTP请求的示例,用于获取名为"soutu_new2_e1a824c.css"的CSS文件。下面是对每段代码的解析和注释:

// 创建一个XMLHttpRequest对象
var xhr = new XMLHttpRequest();

// 设置请求的方法为GET
xhr.open('GET', 'https://pss.bdstatic.com/r/www/cache/static/protocol/https/soutu/css/soutu_new2_e1a824c.css');

// 发送请求
xhr.send();
    
  • var xhr = new XMLHttpRequest();:这行代码创建了一个XMLHttpRequest对象,用于在浏览器和服务器之间进行异步通信。
  • xhr.open('GET', 'https://pss.bdstatic.com/r/www/cache/static/protocol/https/soutu/css/soutu_new2_e1a824c.css');:这行代码指定了请求的方法为GET,并且指定了请求的URL地址。在这个例子中,请求的URL是"pss.bdstatic.com/r/www/cache…
  • xhr.send();:这行代码发送了请求。当调用这个方法时,浏览器会向指定的URL发送一个HTTP GET请求,并等待服务器返回响应。

根据给定的信息,该请求的状态码为200,表示请求成功。远程地址是***.170.26.36:443,表示服务器的IP地址和端口号。引荐来源网址政策为unsafe-url,表示该网页没有设置referrer policy,即可以跨域访问。

响应标头(Response Headers)

图中这段代码是一个HTTP请求的响应标头(Response Headers)部分。下面是对每行标头的解释和作用:

  • Accept-Ranges:指定客户端可以接受的响应实体范围,例如 "bytes"、"bytes /" 等。
  • Access-Control-Allow-Origin:指定允许访问资源的来源域,用于跨域资源共享(CORS)。
  • Age:表示缓存资源的时间长度,单位为秒。
  • Cache-Control:控制缓存的行为,包括缓存是否启用、缓存过期时间等。
  • Content-Encoding:指定响应内容的编码方式,例如 gzip、deflate 等。
  • Content-Md5:响应内容的 MD5 哈希值,用于验证数据的完整性。
  • Content-Type:指定响应内容的媒体类型,例如 text/html、application/json 等。
  • Date:响应生成的日期和时间。
  • Etag:用于验证资源是否被修改的标识符,通常与 Last-Modified 一起使用。
  • Expires:指定资源的过期时间,以 GMT 格式表示。
  • Last-Modified:指定资源最后修改的日期和时间,以 GMT 格式表示。
  • Ohc-Cache-Hit:指示缓存是否命中。
  • Ohc-File-Size:响应文件的大小,以字节为单位。
  • Ohc-Global-Saved-Time:指示全局保存时间,即整个请求处理过程中所花费的总时间。
  • Ohc-Response-Time:指示响应时间,即从接收到请求到发送响应所经过的时间。
  • Ohc-Upstream-Trace:上游跟踪信息,通常用于调试目的。
  • Server:服务器软件的名称和版本信息。
  • Timing-Allow-Origin:指定允许计时器的来源域。
  • X-Bce-Content-Crc32:响应内容的 CRC32 校验和值。

以上是常见的一些 HTTP 响应标头字段及其含义。根据具体的应用场景和需求,还可以使用其他的标头字段来提供更多的信息或者控制特定的行为。

请求标头(Request Headers)

image.png

图中这段代码是一个HTTP请求的请求标头(Request Headers)部分。下面是对每行标头的解释和作用:

  • Authority:指定请求的目标服务器的域名或IP地址。
  • Method:指定请求的方法,例如 GET、POST 等。
  • Path:指定请求的资源路径。
  • Scheme:指定请求使用的协议,例如 http 或 https。
  • Accept:指定客户端可接受的内容类型和编码方式。
  • Accept-Encoding:指定客户端可接受的压缩编码方式,例如 gzip、deflate、br 等。
  • Accept-Language:指定客户端可接受的语言环境,包括语言和国家/地区信息。
  • Referer:指定请求来源页面的 URL。
  • Sec-Ch-Ua:包含有关用户代理的信息,用于识别客户端设备和浏览器类型。
  • Sec-Ch-Ua-Mobile:指定移动设备的相关信息。
  • Sec-Ch-Ua-Platform:指定客户端操作系统的信息。
  • Sec-Fetch-Dest:指定请求的目标资源类型,例如 style、script 等。
  • Sec-Fetch-Mode:指定请求的跨域访问模式,例如 no-cors 表示不允许跨域访问。
  • Sec-Fetch-Site:指定请求的站点来源,通常为当前页面的 URL。
  • User-Agent:指定客户端的用户代理信息,包括浏览器类型、版本号等。

以上是常见的一些 HTTP 请求标头字段及其含义。根据具体的应用场景和需求,还可以使用其他的标头字段来提供更多的信息或者控制特定的行为。

登录

image.png image.png

图中这段代码是一个HTTP请求的常规信息(General Information)部分。下面是对每行信息的解释和作用:

  • 请求网址:指定请求的目标 URL,这里是百度的登录接口。
  • 请求方法:指定请求的方法,例如 GET、POST 等。
  • 状态代码:响应的状态码,用于表示请求的处理结果。
  • 远程地址:发起请求的客户端的 IP 地址和端口号。
  • 引荐来源网址政策:指定浏览器对引荐来源网址的策略,例如 unsafe-url 表示不允许使用引荐来源网址。
image.png

这段代码是一个HTTP响应的原始信息(Raw Information)部分。下面是对每行信息的解释和作用:

  • Access-Control-Expose-Headers:指定允许在跨域请求中暴露的响应头字段。
  • Cache-Control:指定缓存策略,包括是否启用缓存、缓存时间等。
  • Connection:指定连接方式,如持久连接或短连接。
  • Content-Length:响应内容的长度。
  • Content-Security-Policy-Report-Only:指定报告策略,用于指示哪些内容安全策略违规需要报告给浏览器。
  • Content-Type:指定响应的内容类型,例如HTML、JSON等。
  • Date:响应生成的日期和时间。
  • Expires:指定响应的过期时间。
  • P3p:指定内容安全策略的参数。
  • Pragma:指定HTTP协议的实现方式。
  • Referrer-Policy:指定在跨域请求中使用的引用页面来源策略。
  • Server:指定服务器软件的名称和版本。
  • Set-Cookie:设置cookie的头部字段。
  • Trace-Id:跟踪标识符,用于跟踪请求和响应的流程。
  • Tracecode:跟踪码,用于进一步跟踪请求和响应的过程。
  • vary:指定在发送不同请求时应考虑哪些变量来确定响应内容。

以上是该段代码中的主要响应头字段及其含义。

更多内容↓

qrcode_for_gh_8dcb159c10f3_1280.jpg