在Grab,我们在众多软件系统中广泛使用这两种机制,以确保我们能够应对失败并继续为我们的客户提供他们期望的服务。但这两种机制是否相同?我们在哪里以及如何选择其中一个?...在后备处理中,使用估计值而不是实际值而不是唯一选项,其他常见选项包括: 使用不同的上游服务重试请求 稍后安排请求 从缓存中加载可能过时的数据 当然,有一些情况没有合理的后备。...有了这个,我们可以通过定义我们愿意等待上游的时间来限制我们处理请求所需的总时间。 2.最大并发请求 这是堡垒设置(如上所述)。 考虑默认值(10)表示同时发出请求而不是“每秒”。...这里要注意的第一件事是因为断路名称是一个参数,所以可以向断路器的多个调用提供相同的值。 这有一些有趣的副作用。 假设您的服务调用上游服务的多个端点,称为“列表”,“创建”,“编辑”和“删除”。...可以同时使用每个服务和每个主机(虽然我从未尝试过)。在此配置中,每个服务电路应仅在几乎没有机会存在任何有效主机时打开,并且通过这样做可以节省在重试周期中运行的请求处理时间。
如果您有两个应用(前端和后端),则可以为每个应用使用部署和服务,并在集群中部署它们。 当前端应用发出请求时,它不需要知道有多少个 Pod 连接到后端服务。...根据您的网络实现,请求最终到达 Pod。 默认情况下,Kubernetes 使用 iptables 来实现服务。 iptables 是否使用轮询进行负载均衡?...您可以自己修复它,因为 Kubernetes 不知道如何对持久连接进行负载均衡。 服务是称为端点的 IP 地址和端口的集合。 您的应用可以从服务中检索端点列表,并决定如何分配请求。...在这种情况下,您可以做什么? 您可以打开几个不同的 SQL 连接并在它们之间循环。或者,您可以使用外部负载均衡器,如 pgpool。 在此场景中,您的应用连接到一个端点:pgpool。...您可以忽略 kube-proxy,并始终使用无头服务收集的端点列表,以便从客户端对请求进行负载均衡。 但您能想象将该逻辑添加到群集中部署的所有应用中吗?
使用 GraphQL 的客户端程序可以通过其功能查询该模式。这种方法使得客户端与服务端解耦,并允许其两者独立开发和扩展。 GraphQL 请求可以是查询(读取操作)或突变(写入操作)。...然后 GraphQL 层将与两个不同的数据服务进行通信。GraphQL 首先将客户端从需要与多种语言进行通信中隔离,并将单个请求转换为使用不同语言的多个服务的多个请求。...例如,READ REST API 端点可能是 GET /ResouceName - 从该资源获取所有记录的列表; GET /ResourceName/ResourceID - 获取该 ID 标识的单条记录...如果我们反转这个模式,它同样有效。如果我们有一个 GraphQL 查询,我们明确知道如何在 UI 中使用它的响应,因为查询与响应具有相同的“结构”。...DataLoader 的原理是使用批处理和缓存的组合。如果相同的客户端请求导致需要向数据库请求多个数据,则可以使用 DataLoader 来合并这些请求,并从数据库批量加载其响应。
3.在端点上使用嵌套显示关系 很多时候,不同的端点可以相互联系,所以你应该对它们进行嵌套,这样更容易理解它们。...例如,对于一个多用户博客平台,不同的帖子可能是由不同的作者写的,所以在这种情况下,像 https://mysite.com/posts/author 这样的端点会成为一个有效的嵌套。...使用五种 HTTP 方法 POST,GET,PUT/PATCH,DELETE 可以提供 CRUD 功能(创建,获取,更新,删除)。 除了 POST 其他请求都具备幂等性(多次请求的效果相同)。...需要注意的是 POST 和 PUT 最大的区别就是幂等性,所以 PUT 也可以用于创建操作,只要在创建前就可以确定资源的 ID。 获取:使用 GET 方法获取资源。GET 请求从不改变资源的状态。...注意,点赞文章我选择了 PUT 而不是 POST,因为我觉得点赞这种行为应该是幂等的,多次操作的结果应该相同。 4.FAQ 批量删除接口如何设计?
你可以将多个调用封装到一个 API 中,让它们在服务器端完成,而不是从客户端发出多个请求。此方法也可以解决过取和欠取问题,因为你可以在将数据发回客户端之前对其进行操作。...如果是这种情况,GraphQL 的弃用模型对你一点帮助都没有。 使用 REST,你可以创建一个新端点或现有端点的另一个版本。问题是一样的,只是解决方案看起来有一点不同。...我很抱歉,但是我又一次得出了一个完全不同的结论。如果将规则设置为不允许版本控制,则可以添加新的端点或替换现有端点的实现。在这种情况下,GraphQL 和 REST 之间没有区别。...我赞同,GraphQL 是 API 的未来,但是出于不同的原因。 较好的性能和较小的有效负载并不是 GraphQL 特有的特性。...你可以使用其他工具,或者扩展 GraphQL,来获得更好的结果,例如使用 Relay 来持久化查询。要真正地从 GraphQL 文档中获得好处,你要做的不仅仅是向模式中添加描述。
在我的职业生涯中,我使用了数百个 REST API 并制作了数十个。由于我经常在 API 设计中看到相同的错误,因此我认为写下一组最佳实践可能会更好。...通过使不同类型的 ID 具有自描述性,您可以显着改善 API 的人机工程学。...有很多层软件会对请求返回 404,其中有些可能是你无法控制的: 配置错误的客户端点击了错误的 URL 配置错误的代理(客户端和服务器端) 负载平衡器配置错误 服务器应用程序中的路由表配置错误 返回...为了获得非幂等操作的一次性行为,我们需要在客户端和服务器之间进行额外的协调。通常有两种好方法和一种蹩脚方法来支持这一点。...糟糕的选项:提供一个端点来列出最近的交易 如果 API 未提供任何有关幂等性的显式帮助,则这是客户端开发人员的解决方法: 每次提交之前,从服务器获取最近事务的列表。
灵活性 是使用 REST 的另一个优势,因为可以将其设计成处理不同类型的调用并返回不同的数据格式。 REST 的劣势 抓取过度——这是指 API 端点提供的信息比客户端所需要的要多得多。...抓取不足——这是指 API 端点并没有提供所需的全部信息。因此,客户端必须发出多个请求才能获取应用程序所需的全部内容。 什么是 GraphQL?...这也意味着我们可以定制我们的请求,这样我们就可以从端点发出任何请求,并且能获得我们所请求的任何内容,仅此而已,无需更多操作。我们传递查询并得到响应。...要使用 GraphQL 实现相同的效果,我们可以使用类似于这样的查询: query { User(id: '123') { name posts { title } followers { name }...}} 通过使用这样的查询,我们将能获得具有以下属性的 JSON 响应。
Address and Port-Dependent Mapping (关心对端地址和端口的转换模式):如主机A发出的数据包具有以下特征:1) 相同的源IP地址,2) 相同的源端口,3) 相同的目的IP...在下图中,由于两个数据包具有不同的目标端口(80 和 8080),因此使用了不同的外部端口映射值(转换端口 = 1000 和 1004)。...任意IP地址分配:这类NAT对于内部端点发出的数据包,即使它们源自相同的源IP地址,只要其会话(即{源IP、源端口、目标IP、目标端口}的组合)不同,就会分配不同的外部IP地址。...配对IP地址分配:配对NAT(Paired NATs)对于内部端点发出的数据包,即使它们的会话(即{源IP、源端口、目标IP、目标端口}的组合)不同,只要源自相同的源IP地址,也会分配相同的外部IP地址...这种方法可以有效避免端口冲突,提高地址资源的利用率,但可能需要应用程序不依赖于特定的端口号进行通信,或者需要额外的机制来跟踪和管理这些动态分配的端口映射,以确保数据包的正确路由和应用层协议的正常运行(VPP
所以这里就有必要测试任何用户提供的URL的端点,对SSRF的测试通常从提供带有内部地址的URL输入开始。 根据常用的网络配置,可能需要尝试几个不同的地址。...首先为易受攻击的端点提供已识别的内部计算机的不同端口,并确定端口之间的服务器响应行为是否存在差异。...其次,使用服务器响应时间扫描网络和端口: 如果服务器没有以状态代码的形式返回任何有用的信息,那也不用担心,攻击者可能仍然可以通过检查服务器响应攻击者发出的请求所需的时间来确定这些网络结构。...首先,我们整理下之前利用SSRF的技能,假设攻击者已经在Web应用程序上找到了获取外部资源的功能,并且可以从各种外部站点获取内容,还可以请求任意文件类型都没有任何限制。...当新人/攻击者找不到有效的旁路时,可以帮助逆向思考,切换视角,想想:如果是我自己,会如何实现此功能的SSRF保护机制? 然后,继续尝试绕过这种设计的保护机制。
监控应用程序通过短信网关向受服务影响的客户发送1000条短信。示例可以成倍增加,但原则是相同的:当冗长的过程完成时通知调用者,并且可以使用信息。...客户端调用服务器操作。(Web服务、RPC、本地方法调用等) 客户机订阅了代理,并开始从不同的线程监听主题。 服务器完成所需的工作并向主题发布消息。 客户机获取信息并进行处理。...2.3 轮询 从性能和可伸缩性的角度来看,轮询应该是最不可取的方法,因为它会给客户端和服务器端带来额外的压力。...如果这是一次性请求/响应对,则可以从存储库中当场删除查找行。 3.4 有效载荷策略 在服务器端生成的响应可以表示任何信息。它可以是一个十位数字或一个十兆字节的文件。...有效负载策略描述了如何将此信息传递到客户端。 负载可以直接在异步通知本身内部传递。如果大小以千字节表示,我们可以将信息传递给回调。如果不是这样,那么应该在通知中传递指向文件的指针。
不同的HTTP方法可以在任何端点上使用,这些方法映射到应用程序的创建、读取、更新和删除(CRUD)操作: HTTP方法CRUD行为GET读取返回请求数据POST创建创建一个新记录PUT 或者 PATCH...API-Request.png REST API响应 响应的有效负载可以是任何实用的东西:数据、HTML、图像、音频文件等等。...注意,浏览器向REST API发出两个请求: 对同一URL的HTTP OPTIONS请求确定Access-Control-Allow-Origin HTTP响应头是否有效。 实际的REST调用。...id=123 所有这些都是为用户123获取数据的有效选项。当你有更复杂的操作时,组合的数量会进一步增加。 归根结底,你如何格式化URL并不重要,但整个API的一致性很重要。...API身份验证将根据使用上下文而有所不同: 在某些情况下,第三方应用程序被视为像任何其他具有特定权利和权限的登录用户。例如,一个地图API可以将两点之间的方向返回给调用的应用程序。
今天,我想和大伙分享一些非常有意思的内容。为了存储及管理的方便,相信大家可能都会选择使用一些密码管理器来存储不同网站的密码(例如Facebook,Gmail等其他帐户)。...在仔细观察应用程序并完成各个请求之后,我发现应用程序会从位于应用程序的/api/的API中检索不同的信息。 在对应用程序进行一些爬行和抓取后,我发现了一些API端点: ?...API端点观察 当应用程序与API完全交互时,每个端点都返回了一些值和信息,其中包括record ID,session token和其他一些内容。让我来解释下这些API。...抓取记录后,接下来就是获取session token以进行POST请求。这里我还将记录的响应转换为了JSON,并直接从JSON对象调用记录ID的值。...接下来我们要做的就是将具有”record ID”的POST请求,发送到/api/v1/passwords/record端点。我将使用XHR发送具有指定记录ID的POST请求。
事实上,我们每天都使用 TLS 来实现机密性、完整性和服务器身份验证,但通常不依赖相互身份验证,即 TLS 会话确保我们与正确的服务器通信,但我们随后依赖密码或不同的顶部的身份验证形式,以使用 Web...分离身份验证握手和有效负载 如果我们将身份验证握手与负载传输分开,我们可以使用 TLS 1.3 作为握手协议,同时依赖 IPsec 或 WireGuard 作为性能更好、更透明的负载通道: 我们获得了这两种模型的好处并实现了许多出色的特性...您可能希望从身份验证中受益,但对支付身份验证后,没有必要进行所有有效负载数据的加密。 上图并排显示了两个模型。...我们将使用即将到来的 SPIFFE 与 Cilium 集成的示例。这允许在创建网络策略时使用 SPIFFE 身份来选择工作负载。...Cilium 仍然像今天一样识别单个端点,并且网络分段仍然适用于这些单个端点。如果网络策略同时指定 SPIFFE 身份和端点选择器,这能够有效阻断恶意流量负载。
这样做可以实现两个小目标 减轻服务器负载 提升系统性能 下面我们就一起来探讨一下 HTTP 缓存都有哪些 不同类型的缓存 HTTP 缓存有几种不同的类型,这些可以分为两个主要类别:私有缓存 和 共享缓存...某些操作仅限于具有相同来源的内容,可以使用 CORS 取消此限制。...现在我带你认识了两遍不同的源,现在你应该知道如何区分两个 URL 是否属于同一来源了吧! 好,你现在知道了什么是跨域问题,现在我要问你,哪些请求会产生跨域请求呢?...比较两个资源是否时相同的版本有些复杂,根据上下文,有两种相等性检查 当期望的是字节对字节进行比较时,例如在恢复下载时,使用强 Etag进行验证 当用户代理需要比较两个资源是否具有相同的内容时,使用若 Etag...当客户端在本地修改资源打算重新发送之前,第二个客户端可以获取相同的资源并对资源进行修改操作,这样就会造成问题。
数据包编号长度位直接取决于数据包编号,但只要一个值可以编码为相同数量的字节,它们就会保持不变。这些头字段的强互连和依赖性明显降低了有效的可控性。...除了极少数情况,假冒协议可以在有效负载的这个位置包含完全相同的四个字节,这些字节将不可用于假冒攻击。版本后跟源和目标的 CID。每个都将在相应的长度标识符之前。...使用这种屏蔽策略,客户端仍然可以选择服务器反映的 DCID,并且如果需要,它可以根据该值进行路由和负载平衡。然而由于服务器选择了屏蔽,因此请求伪造攻击的有效负载不再由攻击者控制。...New CID 列指示服务器是否为新路径使用New CID。为了使用 CMRF 执行协议假冒,攻击者必须事先知道使用哪个 CID 才能将有效负载注入正确的 CID。...由于 QUIC 要求没有 CID 被重复用于一个连接,因此不可能在握手和 NEW_CONNECTION_ID 帧中传输相同的有效负载。只有五个支持连接迁移的开源实现根据需要使用New CID。
:spd服务器不对外暴露dns,ip接口,必须通过sdp专用客户端使用专有的协议才能连接SPA特点:单包授权技术可以看作是端口敲门技术的演进,两者具有相同的目标,但实现方式却有很大不同。...(UDP报头内)和服务密码组合在一起,生成哈希值。...服务器将记录它收到的最后一个有效授权的数据包,以防止攻击者发送旧的数据包进行重放攻击如果哈希值不匹配或者与此前收到的有效哈希值相同,则不执行任何操作。...说明弱口令检测是通过读取HASH值与弱口令字典计算的HASH值进行对比来检查是否存在弱口令。如果不想读取HASH值,您可以从基线检查策略中移除弱口令基线。...从访问控制和身份验证系统中获取用户账户及授权等信息。从企业自身的管理系统中获取员工的相关信息。从社交平台和社交软件中获取用户的相关信息。
事实上,尝试解码访问令牌是危险的,因为服务器不保证访问令牌将始终保持相同的格式。下次您从该服务获取访问令牌时,完全有可能采用不同的格式。...例如,Google 的 API 使用 OpenID Connect 提供一个 userinfo 端点,该端点可以返回有关给定访问令牌的用户的信息,或者您可以改为从 ID 令牌获取用户信息。...“expires_in”值是访问令牌有效的秒数。访问令牌的有效期取决于您使用的服务,并且可能取决于应用程序或组织自己的策略。您可以使用此时间戳来抢先刷新您的访问令牌,而不是等待带有过期令牌的请求失败。...,它可以使用之前收到的刷新令牌向令牌端点发出请求,并将取回可用于重试原始请求的新访问令牌。...这就是应用程序是否知道刷新令牌的预期寿命无关紧要的原因,因为无论它过期的原因如何,结果总是相同的。
安全架构的关键部分是会话(存储主体的ID和角色)、安全上下文(存储有关发出当前请求的用户的信息) 缺点:使用内存中会话,必须把特定会话的所有请求路由到同一个应用程序实例。这使负载均衡和操作变得复杂。...API Gateway和服务使用透明令牌来传递有关主体的信息。...命令行参数 SPRING_APPLICATION_JSON JVM系统属性 操作系统环境变量 当前目录中的配置文件 来自此列表的靠前的来源的特定属性值将覆盖此列表稍后的来源中的相同属性。...Spring Boot使这些属性可以通过ApplicationContext访问,如通过@Value注解获取属性的值。...推送模式有效、使用广泛,但要重新配置正在运行的服务很难,且配置属性值存在分散在众多服务定义中的风险。 使用基于拉取的外部化配置 启动时,服务实例从配置服务器检索其配置属性。
大家好,又见面了,我是你们的朋友全栈君。 ODrive通讯协议 与ODrive进行通讯需要对通讯端点进行一系列操作。理论上,端点上的数据可以是以任何方式序列化的任何类型的数据。...可以通过从端点0读取JSON来枚举可用的端点,从理论上讲,每个接口都可以不同(实际上并没有这么做)。每个端点都可以被用来发送和接收字节数据,有效字节数据的含义在JSON中进行了定义。...请求是从PC到ODrive的消息,响应是从ODrive到PC的消息。 每个请求-响应事务对应于一个端点操作。...请求 Bytes 0, 1 数据包的序列号, MSB = 0 当前,服务器不进行处理,也不过滤重复发送的数据包。 Bytes 2, 3 端点ID 可以从JSON定义中获取所有端点的ID。...如果客户端不需要任何响应数据,则可以将该值设置为0。 Bytes 6 to N-3 有效负载 有效负载的长度由数据包大小确定。 有效负载的格式取决于端点类型。 端点类型可以从JSON定义中获取。
用于多项任务的模块化后门 对 CVE-2021-44228 的利用会导致运行带有 base64 编码负载的 PowerShell 命令,最终从参与者控制的 Amazon S3 存储桶中获取“CharmPower...该核心模块可以执行以下主要功能: 验证网络连接- 执行后,脚本通过使用参数 hi=hi 向 google.com 发出 HTTP POST 请求来等待活动的 Internet 连接。...基本系统枚举——该脚本收集 Windows 操作系统版本、计算机名称以及 $APPDATA 路径中的文件 Ni.txt 的内容;该文件可能由主模块下载的不同模块创建和填充。...进程– 使用 tasklist 命令获取正在运行的进程。 系统信息——运行“systeminfo”命令来收集系统信息。有更多命令,但被注释掉了。...与旧后门的相似之处 Check Point 注意到“CharmPower”与 APT35 过去使用的 Android 间谍软件之间的相似之处,包括实现相同的日志记录功能并使用相同的格式和语法。
领取专属 10元无门槛券
手把手带您无忧上云