热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

不同的域但相同的IP,多个连接还是一个连接?-HTTP2:differentdomainbutsameIP,multipleconnectionoroneconnection?

WithinHTTP2:在HTTP2:Sowhenrequestonehtmlpage,withmultipledomains(www.example.com,api.exa

Within HTTP2:

在HTTP2:

So when request one html page, with multiple domains(www.example.com, api.example.com...), it is said, there will be multiple connections.

因此,当请求一个html页面时,有多个域(www.example.com, api.example.com…),会有多个连接。

but what if these domains share one same IP? Are there still multiple connections?

但是如果这些域名共享一个IP呢?还有多个连接吗?

2 个解决方案

#1


2  

That depends on the client.

这取决于客户。

http://httpwg.org/specs/rfc7540.html#HttpExtra

http://httpwg.org/specs/rfc7540.html HttpExtra

Clients SHOULD NOT open more than one HTTP/2 connection to a given host and port pair, where the host is derived from a URI, a selected alternative service [ALT-SVC], or a configured proxy.

客户端不应该打开一个以上的HTTP/2连接到给定的主机和端口对,其中主机来自URI、选择的替代服务[ALT-SVC]或配置的代理。

...

A client MAY open multiple connections to the same IP address and TCP port using different Server Name Indication [TLS-EXT] values or to provide different TLS client certificates but SHOULD avoid creating multiple connections with the same configuration.

客户端可以使用不同的服务器名称指示[TLS- ext]值打开同一个IP地址和TCP端口的多个连接,或者提供不同的TLS客户端证书,但是应该避免使用相同的配置创建多个连接。

...

Connections that are made to an origin server, either directly or through a tunnel created using the CONNECT method (Section 8.3), MAY be reused for requests with multiple different URI authority components. A connection can be reused as long as the origin server is authoritative (Section 10.1). For TCP connections without TLS, this depends on the host having resolved to the same IP address.

可以直接或通过使用CONNECT方法创建的通道对源服务器进行连接(第8.3节),可以使用多个不同URI权限组件的请求重用它们。只要源服务器是权威的,就可以重用连接(第10.1节)。对于没有TLS的TCP连接,这取决于主机解析到相同的IP地址。

So there's not really a hard requirement, so if a client has very good reasons for making multiple connections instead of reusing one it is allowed to do so.

所以没有硬性要求,所以如果客户端有很好的理由建立多个连接而不是重用一个,那么它就可以这么做。

Specially if both domains use a different TLS certificate (not one where both names are present as SubjectAltNames) I'd expect to see a separate connection for each.

特别是如果两个域都使用不同的TLS证书(而不是两个名称都作为subject - taltnames显示的证书),我希望看到每个域都有单独的连接。

#2


0  

As @mata says this is up to the client.

@mata说这取决于客户。

However one clear use case is in connection coalescing.

然而,一个清晰的用例是连接合并。

Under HTTP/1.1 domains were often sharded (e.g. www.example.com might also have a static.example.com domain for serving static assets). This was for two reasons:

在HTTP/1.1下,域通常是分片的(例如www.example.com也可能有一个用于服务静态资产的static.example.com域)。这有两个原因:

  1. To break the 6-8 connection limit per domain that browsers often used and allow more downloads in parallel.
  2. 为了打破浏览器经常使用的每个域的6-8连接限制,并允许更多的并行下载。
  3. To have so called "COOKIE-less" domains which saved on the overhead of sending these HTTP headers for static assets that didn't need them (e.g. images, css, Javascript).
  4. 有所谓的“无COOKIE”域,它节省了将这些HTTP头发送给不需要它们的静态资产(例如图像、css、Javascript)的开销。

Under HTTP/2 there is one connection and the limit on parallel downloads is the stream limit which is much higher (usually 100-150 though can also be unlimited). Additionally with HPACK header compression large COOKIEs cause less of a performance hit (though there can still be security issues which can be another reason for COOKIE-less domains).

在HTTP/2下有一个连接,并行下载的限制是流限制,后者要高得多(通常是100-150,但也可以是无限的)。此外,使用HPACK头压缩时,大型COOKIE会减少性能损失(尽管仍然存在安全问题,这可能是无COOKIE域的另一个原因)。

So, should we just give up on sharded domains completely now? What about those clients that cannot support HTTP/2? While support is very good it is not universal and those behind proxy connections (e.g. corporate connections or antivirus software) often cannot use this even if their browsers can.

那么,我们现在应该完全放弃共享域吗?那么那些不支持HTTP/2的客户机呢?虽然支持非常好,但它并不是通用的,而且代理连接(例如公司连接或杀毒软件)背后的人通常不能使用它,即使他们的浏览器可以。

Connection coalescing is used by browsers to collapse near identical connections (usually those with the same IP address and same TLS certificate) into one connection rather than opening a single one when using HTTP/2 and allows HTTP/1.1 connections to continue seeing these as separate domains. Daniel Haxx has the best blog post on how this is actually implemented by browsers(though it's about a year and a half old at the time of writing so this may have changed). To summarise it, Chrome uses it as you'd expect, Firefox is (overly?) aggressive about coalescing in as many circumstances as it can (and maybe some that it shouldn't!) and Edge and Safari don't do coalescing at all.

浏览器使用连接合并将几乎相同的连接(通常是具有相同IP地址和相同TLS证书的连接)合并到一个连接中,而不是在使用HTTP/2时打开一个连接,并允许HTTP/1.1连接继续将这些连接视为独立的域。Daniel Haxx有一篇关于浏览器是如何实现这一功能的最好的博客文章(尽管写这篇文章的时候已经有一年半的时间了,所以可能已经发生了变化)。总而言之,Chrome按照你所期望的那样使用它,Firefox在尽可能多的情况下(也许有些情况下它不应该这么做)积极地进行合并,而Edge和Safari根本就没有合并。

If a connection is coalesced when it shouldn't be, the server can respond with a 421 HTTP Status code which basically means "What are you doing, that's not a request for me!!" and the browser can then try again with a separate connection.

如果连接不应该被合并,服务器可以使用421 HTTP状态码进行响应,这基本上意味着“您在做什么,这不是我的请求!”,然后浏览器可以再次尝试使用一个单独的连接。

It also looks like that HTTP/2 will shortly add the ORIGIN Frame which will allow the server to respond to any request with a "hey, I can also serve you api.example.com requests if you want" style message. Even if the IP address doesn't match (which has some people concerned about the security implications of that!).

看起来HTTP/2很快就会添加源框架,允许服务器以“嘿,如果你想要的话,我也可以为你提供api.example.com请求”样式消息来响应任何请求。即使IP地址不匹配(这让一些人担心它的安全影响!)

While we're on the topic, it's not always the case that as single domain will always use one connection either. Read Jake Archibald's excellent post on HTTP/2 Push which shows that there are various circumstances when that's not the case (summarised as: for non-credentialed requests, when having the same domain open in a separate tab in Edge, or randomly even on the same tab for Safari).

虽然我们在讨论这个主题,但并不总是单个域总是使用一个连接。请阅读Jake Archibald在HTTP/2 Push上发表的优秀文章,该文章显示,当情况并非如此时,会出现各种各样的情况(总结为:对于未认证的请求,当同一域在Edge的另一个选项卡中打开时,或者在Safari的同一个选项卡上随机打开时)。


推荐阅读
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • poj 3352 Road Construction ... [详细]
  • 深入解析Android GPS机制:第五部分 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
  • 本文探讨了在使用 Outlook 时遇到的一个常见问题:无法加载 SAVCORP90 插件,导致软件功能受限。该问题通常表现为在启动 Outlook 时会收到错误提示,影响用户的正常使用体验。文章详细分析了可能的原因,并提供了多种解决方法,包括检查插件兼容性、重新安装插件以及更新 Outlook 版本等。通过这些步骤,用户可以有效解决这一问题,恢复 Outlook 的正常运行。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • AngularJS 进阶指南:第三部分深入解析
    在本文中,我们将深入探讨 AngularJS 的指令模型,特别是 `ng-model` 指令。`ng-model` 指令用于将 HTML 元素与应用程序数据进行双向绑定,支持多种数据类型验证,如数字、电子邮件地址和必填项检查。此外,我们还将介绍如何利用该指令优化表单验证和数据处理流程,提升开发效率和用户体验。 ... [详细]
author-avatar
田得婕_762
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有