- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经阅读了很多有关http2的文档,并且启用它似乎很安全。但是我需要100%确保我不会进行任何回归,或者至少要知道会发生什么回归。
是什么导致我无法在生产apache服务器上启用http2?
我必须仔细检查哪些配置?
什么新行为可能会给我带来麻烦?
最佳答案
这是一个非常基于意见的问题,而不是Stack Overflow的一种很好的格式,旨在提供基于事实的答案。这也完全取决于您所提供的细节很少的环境。
但是,我对此感兴趣,并且不介意花一点时间尽可能地回答。
这些是您应该考虑的事情:
首先,您需要将Apache升级到支持HTTP / 2的版本。理想情况下,您应该升级到最新版本(在撰写本文时为2.4.29),因为自从它在2.4.17中首次启动以来,HTTP / 2代码已经进行了许多更改,并且在该版本中不再标记为“实验性”。 2.4.26。它的难易程度取决于您的环境,但是打包的版本(例如,通过RHEL和Centos上的yum
)通常不是最新版本,并且超出打包环境的安全性,从源代码构建或第三方存储库不是轻而易举的一步。另请参阅this question,以获取有关是否应使用mod_http2的更多信息(我认为是)。
您需要考虑您来自哪个版本的Apache,以及升级时需要进行哪些更改(如果有)。许多人仍在使用2.2和upgrade to 2.4 requires some changes。如果已经在2.4的较早版本上,那么这应该不是问题,但仍有一些更改可能会影响您。虽然2.2是生命的尽头,所以这是您迟早需要做的事情。
HTTP / 2要求HTTPS可以在所有浏览器上运行,因此,如果您的站点尚未安装在HTTPS上,则可能会有点升级。但是,Web再次迁移到HTTPS,因此,如果还没有这样做,那么您迟早会需要执行此操作。
HTTP / 2要求OpenSSL 1.0.2或更高版本具有ALPN支持才能协商HTTP / 2。同样,许多Linux发行版都不包含此版本,即使那些具有此发行版的版本(例如RHEL / Centos 7.4)也不会针对此版本构建Apache。所以再次,您可能需要查看从源代码构建或其他回购(请参见上面的要点)。
HTTP / 2需要良好的HTTPS配置(例如GCM密码),这要归功于OpenSSL 1.0.2,但可能需要查看您的SSL / TLS配置以进行配置。 SSLLabs Server Test Tool是查看此内容的最佳选择。
您是否使用websockets? They are currently not compatible with HTTP/2,因此如果使用它们,则需要保持HTTP / 1.1不变。当前有计划将WebSockets添加到HTTP / 2,但它们仍处于讨论阶段。
您应该知道,HTTP / 2强制使用小写的HTTP标头名称。传统上,HTTP标头名称始终不区分大小写,但是并非每个实现都正确实现了该实现,并且某些依赖于区分大小写。
HTTP / 2响应仍然发送响应代码(200、404),但是省略状态文本(“确定”,“未找到”)。同样,这不会影响大多数正确编码的应用程序,但是如果您依赖此响应消息,则可能需要做一些工作来解决此问题。
HTTP / 2旨在用于单个连接。如果您当前分片不同域的资产,则它可能会尝试coalesce them back into one connection,这应该可以无缝运行,但是如果HTTP / 2在所有分片域上均不可用,则会导致一些问题。
最后3分来自出色的BBC write up of the issues they experienced when moving to HTTP/2。
以上是有关如何升级以启用HTTP / 2的所有要点。坦率地说,在大多数标准Linux发行版上,这现在有点痛苦,但随着新版本的普及,希望它将变得更加容易。
但是,一旦安装到位并且可以升级到HTTP / 2,则需要确定是否要升级。
总体上,HTTP / 2被设计为向后兼容,因此应该进行无缝升级。可以使用HTTP / 2的客户端,不能使用HTTP / 2的客户端(可以在可预见的将来配置)。
但是,HTTP / 2在技术领域仍然相对较新,并且客户端或服务器端可能存在实现问题。说它已经使用两年了,我的经验是非常积极的,没有看到很多问题,但是与任何升级一样,您应该在升级之前进行测试,测试,测试,然后进行监控。我见过的大多数问题都是晦涩的问题,其中HTTP / 2并没有达到应有的性能,而没有显示出停止的问题,例如,大多数没有我兴趣的人都很难注意到它们。 20% of web traffic is using HTTP/2因此它是一种经过验证的技术,并且很大程度上基于SPDY,在过去的几年中,SPDY已被许多站点,服务器和客户端使用,而没有出现重大问题。
您还应该考虑HTTP / 2的好处。在我看来,大多数网站都应该看到良好的速度改进(可能达到20%),但这并不能保证,这将取决于单个站点以及访问者的连接和使用情况。某些带宽绑定的站点甚至可能会变慢。但是,您需要设定切合实际的期望,并了解性能瓶颈在哪里,然后这将有助于了解HTTP / 2是否(以及在多少程度上)会有所帮助。对于性能不佳的网站,这不是一个神奇的解决方案。
升级后要考虑的其他几点:
您是否针对HTTP / 2进行了优化(如果需要)?这会影响那些仍使用HTTP / 1.1的访问者吗?有关详细信息,请参见this answer。
您是对任何后端服务器使用HTTP / 2还是在Web服务器上终止HTTP / 2(就像许多HTTPS一样),并对任何后端应用程序服务器使用HTTP / 1.1?这要求使用mod_proxy_http2,该标记仍被标记为实验性的,并且与mod_http2主模块相比,具有较少的用法和过多的位置。我现在不建议这样做,除非您有充分的理由使用它。如果不进行上述升级,许多后端应用程序服务器也将不支持HTTP / 2。
您是否使用HTTP / 2 push等新功能?这仍然是一项新兴技术和needs careful thought,最好在缓存摘要标准化之前保留。
归根结底,没有人,但是您可以“ 100%确保”您不会遇到任何问题,您需要进行测试以增强自信。显然,您对HTTP / 2的了解和了解越多,您就越会做好充分的准备来理解影响和任何问题。
关于apache - 是什么可以阻止我用apache激活http2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47154767/
我刚开始学习JSP技术,遇到了瓶颈。 如何从 JSP 声明 block ? 这不起作用: ... 服务器说没有“out”。 U: 我确实知道如何使用返回字符串的方法重写代码,但是有没有办法在 ?
在一个字段中,我想设置一个具有自定义过滤器的自定义分析器-着眼于词干-因此,“闪存卡”和“闪存卡”的词根相同,因此返回的结果相同 当我运行以下查询时,我的命中率很高,但是“闪存卡”和“闪存卡”各自返回
快速提问。 我有一个通过 PInvoke 使用 native DLL 的应用程序,这个 DLL 可能会调用 PostQuitMessage()。 如何避免? (因为我的应用程序不应该关闭) 我试过 A
一些给定的 HTML 文章,例如: Content 与一些基本的 Jquery 结合使用,例如: $(".some_
我正在构建一个灯箱相册。当第一个图像加载时,CSS 转换起作用。当加载后的每个图像都没有。任何想法为什么?加载第一张之后的照片,但没有过渡。 Image.prototype.load = functi
这个问题在这里已经有了答案: Disable recent tasks button on Android 5.0 (2 个答案) 关闭 2 年前。 我知道这个问题之前在这里被问过 Android
我是 Objective-C 的新手,我只是想弄清楚我是否可以使用 block 或选择器作为 UIAlertView 的 UIAlertViewDelegate 参数 - 哪个更合适? 我已经尝试了以
我是 Linux (UNIX) 套接字下套接字编程的新手。我在 Internet 上找到了以下代码,用于为每个连接生成一个线程的 tcp 服务器。但是它不起作用。accept() 函数立即返回,不等待
recv()库函数手册页提到: It returns the number of bytes received. It normally returns any data available, up
我有一个用于其他项目的共享 ts 库。在这个库中有被同一个库的其他资源使用的资源。该库的结构分为 components/*、interfaces/*、services/* 等目录。在每个目录的根目录中
我想在同一行中一个接一个地显示我的 ListView ,但 ListView 显示每个新行中的每个项目。我怎样才能防止换行显示。以便它显示为段落 ListView.builder( shr
我有一个包含数千行的表格。 import React from "react" import { useSelector } from "react-redux"; import { useEffec
假设我通常希望收到关于代码中不完整模式的警告,但有时我知道某个函数的模式不完整,我知道这很好。 是still true GHC 的警告粒度是每个模块的,并且没有办法更改有关特定功能或定义的警告? 最佳
我的网络应用程序发送浏览器通知,我知道如何检查通知的浏览器权限,以及如果未授予权限,如何请求权限。 但是,即使用户授予我的站点发送通知的权限,她可能仍然无法收到通知,因为它们 might be dis
我有 Xcode 3.2.1,并且喜欢使用它,但是当我编辑文本中带有超链接的文件时(例如,带有引用的注释:# see http://example.com)Xcode 将文本变成可点击的超链接。尝试编
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我有一个在 MY_Controller 中运行的 acl。如果权限被拒绝,那么此刻,我只是执行 redirect('denied') - 这是一个非常基本的 Controller ,它加载一个非常基本
我一直很好奇尝试从 Chrome 切换到 Firefox Quantum,但是对于 Web 开发遇到了一个我无法轻松解决的主要障碍——它正在缓存我的本地主机文件,因此当我尝试在本地主机加载各种 emb
这真的让我很兴奋!在任何时候,我都会参与多个项目。当我退出Xcode时,下次打开Xcode时,我前一天的所有项目都会自动一一打开。 经常我最终编辑错误的文件,AHHHHHHHHHHH!我可以阻止这种行
我的Wiki上有500个左右的Spambot和大约5个实际注册用户。我已经使用nuke删除了他们的页面,但是他们一直在重新发布。我已经使用reCaptcha控制了spambot的注册。现在,我只需要一
我是一名优秀的程序员,十分优秀!