Day6--字节跳动-HHTP协议|青训营

127 阅读7分钟

一、http定义

介绍

HTTP(超文本传输协议,英语:HyperText Transfer Protocol)是一个用于传输超媒体文档(例如 HTML)的应用层协议,是万维网的数据通信的基础。

版本

  1. 1999年6月公布的 RFC 2616,定义了 HTTP 协议中现今广泛使用的一个版本 HTTP 1.1。
  2. 2015年5月以 RFC 7540 正式发布 HTTP/2 标准,取代 HTTP 1.1 成为 HTTP 的实现标准。
  3. 2022年6月6日标准化为 RFC9114 的最新版本 HTTP/3,抛弃使用 TCP,通过 UDP 上使用 QUIC 来承载应用层数据。

通信过程

  1. 使用 TCP 协议,通过网页浏览器、网络爬虫或者其它的工具,客户端(user agent,用户代理程序)发起一个 HTTP 请求到服务器上指定端口(默认端口为80)。
  2. 应答的服务器(origin server)上存储着一些资源,比如 HTML 文件和图像,服务器在那个端口监听客户端的请求。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
  3. 一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
  4. 每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。HTTP/2 中的连接具有复用性,即每个目标地址建立连接后,可以永久被利用,所以每个来源仅需要一个连接。

请求方法

它们都实现了不同的语义,但根据共同的特征由可以分类为:safe(安全), idempotent(幂等), 或 cacheable(可缓存)。

  • GET 的请求应该只被用于获取数据。
  • HEAD 方法请求一个与 GET 请求的响应相同的响应,但没有响应体。
  • POST 方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用。
  • PUT 方法用请求有效载荷替换目标资源的所有当前表示。
  • DELETE 方法删除指定的资源。
  • CONNECT 方法建立一个到由目标资源标识的服务器的隧道。
  • OPTIONS 方法用于描述目标资源的通信选项。
  • TRACE 方法沿着到目标资源的路径执行一个消息环回测试。
  • PATCH 方法用于对资源应用部分修改。

Safe(安全)

  1. 指这是个不会修改服务器的数据的方法,也就是说,这是一个对服务器只读操作的方法。
  2. 浏览器调用安全的方法不用考虑会给服务端造成什么危害,这样,服务端就能允许客户端预加载资源。
  3. 这些方法是安全的:GET,HEAD 和 OPTIONS。所有安全的方法都是幂等的,但并非所有幂等方法都是安全的,例如,PUT 和 DELETE 都是幂等的,但不是安全的。

image.png

1.1协议分析

image.png 报文

image.png

方法

image.png

image.png

状态码

image.png

image.png

请求头

  1. HTTP 标头是用于 HTTP 请求或响应的字段,它传递关于请求或者响应的额外上下文和元数据。
  2. 例如,请求消息可以使用标头表明它首选的媒体格式,而响应可以使用标头表明返回主体的媒体格式。
  3. 标头是不区分大小写,开始于行首,后面紧跟着一个 ':' 和与之相关的值。字段值在一个换行符(CRLF)前或者整个消息的末尾结束。
  4. 根据不同的消息上下文,标头可以分为:
  • 请求标头:包含要获取的资源或者客户端自身的更多信息。例如,Accept-* 标头指示响应的允许格式和首选格式。其他标头可用于提供身份验证凭据(Authorization、Token 授权等)、控制缓存或获取有关用户代理(user agent)或引荐来源网址(referrer)等的信息。
  • 响应标头:包含有关响应的额外信息,例如响应的位置(Location)、响应时间(Date)、最后更新时间(Last-Modified)或者关于服务器自身的信息(Server,包括名字、版本等)。
  • 表示标头:包含消息主体中资源的元数据(例如,编码、MIME 媒体类型、压缩方案等)。包括 Content-Type、Content-Encoding、Content-Language 和 Content-Location。
  • 有效负荷标头:包含有关有效载荷数据表示的单独信息,包括内容长度和用于传输的编码。包括 Content-Length、Content-Range、Trailer 和 Transfer-Encoding。
  1. 并非所有可以出现在请求中的标头都被规范称为请求标头,并非所有出现在响应中的标头都根据规范将其归类为响应标头。例如,Content-Type 就是一个表示标头,在请求中 (如 POST 或 PUT),客户端告诉服务器实际发送的数据类型;在响应中,Content-Type 标头告诉客户端实际返回的内容的内容类型。

image.png

响应头

image.png

缓存

image.png

强缓存

  • Expires,时间戳

  • Cache-Control

    • 可缓存性

      • no-cache:协商缓存验证
      • no-store不使用任何缓存
    • 到期

      • max-age:单位秒,最大缓存周期,相当于请求时间
    • 重新验证*重新加载

      • must-revalidate:—旦资源过期.在成功向原始服务器验证之前,不能使用

协商缓存

  • Etag/If-None-Match:资源的特定版本的标识符,类似于指纹
  • Last-Modified/lf-Modified-Since:最后修改时间

下图是浏览器缓存的机制,所以不一定状态为200的都经过完整的TCP流程,可能数据来自于缓存

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

image.png(HTTP 304状态码的详细讲解_web_blog的博客-CSDN博客)

cookie

Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态),而 Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。浏览器会存储 Cookie 并在下次向同一服务器再发起请求时携带并发送到服务器上。

工作机制如下:

cookie.webp

服务器使用Set-Cookie 响应标头向用户代理(一般是浏览器)发送 Cookie 信息。例如:

Set-Cookie: <cookie-name>=<cookie-value>

这指示服务器发送标头告知客户端存储一对 Cookie:

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry

[页面内容]

现在,对该服务器发起的每一次新请求,浏览器都会将之前保存的 Cookie 信息通过Cookie 请求标头再发送给服务器。

GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

Secure 属性和 HttpOnly 属性可以确保 Cookie 被安全发送,并且不会被意外的参与者或脚本访问。

  1. 标记为 Secure 的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端。它永远不会使用不安全的 HTTP 发送(本地主机除外),这意味着中间人攻击者无法轻松访问它。不安全的站点(http)无法使用 Secure 属性设置 Cookie。但是,Secure 不会阻止对 Cookie 中敏感信息的访问。例如,有权访问客户端硬盘(如果未设置 HttpOnly 属性,则有权访问 JavaScript)的人可以读取和修改它。
  2. JavaScript Document.cookie 无法访问带有 HttpOnly 属性的 Cookie,此类 Cookie 仅作用于服务器。例如,持久化服务器端会话的 Cookie 不需要对 JavaScript 可用,而应具有 HttpOnly 属性。此预防措施有助于缓解跨站点脚本(XSS)攻击。

Cookie 主要用于以下三个方面:

  • 会话状态管理 - 如用户登录状态、购物车、游戏分数或其它需要记录的信息
  • 个性化设置 - 如用户自定义设置、主题和其他设置
  • 浏览器行为跟踪 - 如跟踪分析用户行为等

Cookie 曾一度用于客户端数据的存储,因当时并没有其它合适的存储办法而作为唯一的存储手段,但现在推荐使用现代存储 API。新的浏览器 API 已经允许开发者直接将数据存储到本地,如使用 Web storage API(localStorage 和 sessionStorage)或 IndexedDB。

image.png

http2

image.png

image.png

image.png

HTTPS

image.png

二、静态资源

image.png

2.1、登录

image.png

image.png

image.png

跨域

image.png

image.png

image.png

image.png

image.png

单点登录

image.png

image.png