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

HTTP/2有什么好处:ApachevsNginx?

如何解决《HTTP/2有什么好处:ApachevsNginx?》经验,为你挑选了1个好方法。

我正在为大型SPA应用程序选择一个更好的Web服务器,其中包含许多JS和css文件.使用HTTP/2,我们现在无法将它们合并为两个大文件(JS为3 MB),在慢速连接时需要很长时间才能加载.但是哪种服务器更适合新的HTTP/2范例?

Nginx旨在解决http/1问题,它的优点是更好地服务于大量连接,HTTP/2只有一个连接用于所有文件,因此该功能现在似乎是多余的.你觉得怎么样,你能告诉我什么?



1> Barry Pollar..:

这是一个非常主观的问题,可能不适合StackOverflow,所以想象一下这个问题会被关闭.但这是我的两分钱......

完全披露:我主要使用Apache.

首先,让我们解决您的一个错误点:Nginx不是为解决HTTP/1问题而设计的.Nginx旨在通过基于异步事件驱动模型来解决先前Web服务器的一些可伸缩性问题.在HTTP/2下,每个客户端应该有更少的连接,你可以认为这使得可扩展性不是一个问题,因为每个客户端只使用他们之前所做资源的六分之一 - 但这可能有点简单.Apache现在也有一个事件驱动的mpm模块(虽然在任何线程不安全的PHP应用程序的情况下默认情况下通常不会打开 - 但这也是Nginx的一个问题!).这让他们更加重新回归,尽管仍有很多争论,很多人说Nginx仍然更快.根据我的经验,除非你正在处理真正庞大的卷(在这种情况下你应该看看CDN,负载均衡器和缓存加速器),很少有人会注意到Nginx和Apache之间的区别.当下游应用程序和系统发挥作用时尤其如此 - 缓慢的PHP应用程序将很快消除Web服务器级别的任何性能或可伸缩性问题.

无论如何,回到你的主要问题:

对于HTTP/2支持,我的选择是Apache over Nginx.它有一段时间有更好的HTTP/2支持.例如,Nginx仅在2018年初添加了HTTP/2 Push支持,而Apache已经拥有了多年的支持.Apache还支持PushDiary(基于即将推出的Cache- Digests草案),以防止推送已经发送的资源,支持提前推送的早期提示,以及推送优先级选项.从HTTP/2推送开始,Apache还支持在代理模式下使用HTTP/2(尽管它仍然标记为实验性的,目前这个问题的实用性是有问题的),而HTTP/2则通过HTTP(h2c - 虽然再次有用的是有问题,因为浏览器不支持这个).我还发现Apache HTTP/2实现的主要开发人员对mod_http2模块的GitHub页面非常敏感(自2.4.18以来作为核心Apache的一部分包含在内,自2.4.26以来不再标记为"实验性").

另一方面,我了解Cloudflare使用基于Nginx的自定义Web服务器,并且他们已经推出了一年多的HTTP/2推送(正是他们将此实现向后移植到Nginx).因此,考虑到Cloudflare的规模,虽然不确定它是如何根据核心Nginx代码进行自定义的,但这与实现相当.

还有一个HTTP/2一致性测试工具可用,当我最近针对一些常见的HTTP/2服务器运行时(对于我正在写的主题 btw的书),我得到了以下结果,这清楚地表明Apache是​​最合规的与规格:

哪个是最兼容的HTTP/2服务器?

现在公平地说,大多数错误的原因都是没有正确回应不良请求,在完美的世界中永远不应该发送,所以并不重要.但是,我们仍然没有生活在一个完美的世界中,错误检查是技术的重要组成部分,所以我一个人肯定更喜欢更符合要求的服务器.

最终,您最好选择最适合您的实施方案.一般的感觉一直是Nginx更轻,更容易配置,但另一方面可能并不像Apache那样功能齐全.HTTP/2支持似乎继续这个主题.如果你想玩即将推出的HTTP/2功能,那么对我来说,Apache肯定有优势(尽管没有什么可说的,以后也不会改变).但是,对于HTTP/2的基本用例,它们可能被认为是类似的.甚至HTTP/2推送还没有被使用,并且存在严重的担忧,如果没有适当地使用或者由于实现问题,它可能会降低性能,这可能是为什么它不是Nginx的优先级,而他们最近只实现了它.


推荐阅读
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 在使用 MUI 框架进行应用开发时,开发者常常会遇到 mui.init() 和 mui.plusReady() 这两个方法。本文将详细解释它们的区别及其在不同开发环境下的应用。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
author-avatar
陈炘宇_573
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有