标签: http2

HTTP2 上的 websocket 也会在流中复用吗?

我试图澄清/理解websocketsover是否HTTP/2也会使用流通过 TCP 连接进行多路复用。RFC8441 的第 5 节似乎暗示了这一点

成功处理打开握手后,对等方应使用 CONNECT 事务中的 HTTP/2 流继续执行 WebSocket 协议 [RFC6455],就像 [RFC6455] 中提到的 TCP 连接一样。此时 WebSocket 连接的状态为 OPEN,如 [RFC6455] 第 4.1 节所定义。

HTTP/2 流关闭也类似于 [RFC6455] 的 TCP 连接关闭。有序的 TCP 级闭包表示为 END_STREAM 标志([RFC7540],第 6.1 节)。RST 异常由 RST_STREAM 帧([RFC7540],第 6.4 节)和 CANCEL 错误代码([RFC7540],第 7 节)表示。

但我的困惑来自于这样一个事实:即使使用 HTTP/1.1,虽然浏览器中的选项卡共享与同一主机的底层 TCP 连接(例如 chrome 建立 6 个 TCP 连接),但在不同选项websocket卡中创建到同一主机的连接会导致不同的 TCP每个选项卡中的连接。

我不确定为什么两者之间存在差异以及是否也可能websockets相同HTTP/2

有哪位高手可以解释一下。谢谢。

websocket http2

1
推荐指数
1
解决办法
2473
查看次数

强制 Faraday 适配器 :typhoeus 使用 HTTP/2 进行请求

如何强制Faraday适配器tyhoeus使用HTTP/2来向支持HTTP/2的服务器发出请求?我已经通过服务https://http2.pro/doc/api对此进行了测试,结果如下:

body="{\"http2\":1,\"protocol\":\"HTTP\\/2.0\",\"push\":0,\"user_agent\":\"Faraday v0.12.2\"}",
Run Code Online (Sandbox Code Playgroud)

\"http2\":1,这意味着 HTTP/2 不用于请求!

ruby typhoeus faraday http2

1
推荐指数
1
解决办法
2028
查看次数

Git Push 意外挂断。RPC 失败。HTTP2 帧层错误

自从过去 5-6 小时尝试将 138kb 提交推送到 Google Cloud 上托管的存储库以来,一直出现此错误。

我已经推送这个仓库很长时间了,但今天才收到这个错误。

error: RPC failed; http2 499 curl 16
fatal: the remote hung up unexpectedly.
fatal: the remote hung up unexpectedly.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下方法:

  1. 将 http.postBuffer 增加到 1 GB
  2. 运行垃圾收集
  3. 删除远程源并重新添加

我无法将 ssh 用于 git。它不允许我克隆(权限被拒绝)。

499:客户端关闭请求:我怀疑它超时了。

我使用的是 Mac OS Catalina 10.15.4 Git 版本 2.26.2

Git Push 在出现以下输出后冻结:

Enumerating objects: 61, done.
Counting objects: 100% (61/61), done.
Delta compression using up to 4 threads
Compressing objects: 100% (31/31), done.
Writing objects: 100% (41/41), 138.25 KiB | …
Run Code Online (Sandbox Code Playgroud)

git google-cloud-platform http2

1
推荐指数
1
解决办法
6194
查看次数

设置 gRPC 服务器的端口

据我了解,gRPC的协议是TCP之上的http2。因此,可以分配的最大端口是65535,对吗?但如果我将服务器地址设置为超出范围的“0.0.0.0:70040”,它仍然可以正常工作,并且 gRPC 客户端能够与 gRPC 服务器连接并通信。我可以知道这实际上意味着什么吗?谢谢。

builder.AddListeningPort("0.0.0.0:70040", grpc::InsecureServerCredentials());
Run Code Online (Sandbox Code Playgroud)

tcp http http2 grpc

1
推荐指数
1
解决办法
1万
查看次数

为什么FireFox中的HTTP/2速度较慢?

Akamai在他们的网站上有一个非常有趣的HTTP/2演示:

https://http2.akamai.com/demo

HTTP/2(HTTP的未来)允许通过单个TCP连接同时下载资源,减少了对spritesheets和连接的需求......据我所知,在有大量请求的网站上应该总是更快(比如在演示中) ).

当我在Chrome或Safari中尝试演示时,确实要快得多,但是当我在FireFox中测试它时,它一直都是SLOWER.同一台计算机,同一连接.

为什么是这样?

在此输入图像描述

所有主流浏览器(包括FireFox )显然支持 HTTP/2 ,所以它应该可以正常工作,但在这个现实世界的演示中,它在80%的时间内都比较慢.(在Chrome和Safari中,它在100%的时间内都会更快.)

在确保我清除了所有缓存之后,我在接下来的星期一再次尝试:

在此输入图像描述

我的操作系统:带有FireFox版本44.0.2的El Capitan版本10.11.3(15D21)

更新(2016年4月)

现在运行Firefox 45.0.1:

在此输入图像描述

还是慢一点!

firefox http http2

0
推荐指数
1
解决办法
505
查看次数

什么会阻止我用 apache 激活 http2?

我已经阅读了很多关于 http2 的文档,启用它似乎是安全的。但我需要 100% 确定我不会有任何回归,或者至少知道会发生什么回归。

什么会阻止我在我的生产 apache 服务器上启用 http2?我必须仔细检查什么配置?哪些新行为可能会给我带来麻烦?

apache ssl https http2

0
推荐指数
1
解决办法
842
查看次数

Java中通过Socket发送HTTP/2请求


我需要通过 TCP 套接字从我的 Java 类发送 HTTP/2 请求。我已经适配了一段适用于普通 HTTP/1.1 的代码。但是,使用 HTTP/2 时,它不会输出任何响应或错误代码。

你能看出其中有什么问题吗?我试图访问的服务器位于https://localhost:8443

Socket s = new Socket(InetAddress.getByName("localhost"), 8443);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.print("GET / HTTP/2.0\r\n");
pw.print("Host: localhost:8443\r\n\r\n");
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t;
while((t = br.readLine()) != null) System.out.println(t);
br.close();
Run Code Online (Sandbox Code Playgroud)

谢谢!

java http2

0
推荐指数
1
解决办法
1658
查看次数

上传时如何使用多路复用http2功能

上传多个文件时,使用多路复用 http2 功能应该会显着提高性能。

Java 有一个 httpclient,它原生支持 HTTP/2 协议,因此我尝试编写代码以供自己理解。

这项任务似乎并不像我最初想的那样容易,或者在另一方面,我似乎无法找到能够在上传中使用多路复用的服务器(如果存在)。

这是我写的代码,有人有想法吗?

HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build();
String url = "https://your-own-http2-server.com/incoming-files/%s";
Path basePath = Path.of("/path/to/directory/where/is/a/bunch/of/jpgs");

Function<Path, CompletableFuture<HttpResponse<String>>> handleFile = file -> {
    String currentUrl = String.format(url, file.getFileName().toString());
    try {
        HttpRequest request = HttpRequest.newBuilder()
                                         .uri(URI.create(currentUrl))
                                         .header("Content-Type", "image/jpeg")
                                         .PUT(HttpRequest.BodyPublishers.ofFile(file))
                                         .build();
        return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString());
    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
};

List<Path> files = Files.list(basePath).collect(toList());

files.parallelStream().map(handleFile).forEach(c -> {
         try {
             final HttpResponse<String> response = c.get();
             System.out.println(response.statusCode());
         } catch (Exception e) {
             e.printStackTrace(); …
Run Code Online (Sandbox Code Playgroud)

java file-upload http2 java-http-client

0
推荐指数
1
解决办法
1726
查看次数

使用HTTP/2协议时如何传递Keep-alive元数据?

我有一个Web 应用程序,它使用 Spring boot 并在后端angular嵌入服务器。tomcat我想让已建立的 http 连接保持更长时间,以提高后续 http 请求的响应时间。浏览器被告知通过添加类似的内容来http/1.1保持http连接处于活动状态。但是, HTTP/2 中禁止连接特定的标头字段,例如 Connection 和 Keep-Alive 。因此,Chrome 和 Firefox 在 HTTP/2 响应中忽略它们。对于 HTTP/2,应通过其他方式传送特定于连接的元数据。Connection: Keep-AliveKeep-Alive: timeout=5, max=1000response header

我在任何地方都找不到那些“其他手段”应该是什么。我也无法在任何地方找到如何配置嵌入式 Tomcat 9 服务器以将Keep-alive元数据添加到HTTP/2响应中。这就是 tomcat 现在的配置方式:

@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
    return (tomcat) -> tomcat.addConnectorCustomizers((connector) -> {
        if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
            AbstractHttp11Protocol<?> protocolHandler = (AbstractHttp11Protocol<?>) connector
                    .getProtocolHandler();
            protocolHandler.setDisableUploadTimeout(false);
            protocolHandler.setConnectionUploadTimeout(5000);
            protocolHandler.setKeepAliveTimeout(4000);
            protocolHandler.setMaxKeepAliveRequests(200);
            protocolHandler.setUseKeepAliveResponseHeader(true);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但如果我想使用,这些设置将不起作用HTTP/2 …

tomcat keep-alive spring-boot http2

0
推荐指数
1
解决办法
3606
查看次数

如何让 Wildfly 10.1 在 HTTPS 和 HTTP 中都使用 HTTP/2 协议?

我按照Wildfly 10.1 新闻中的简单说明在端口 8443 上启用了 HTTP/2 和 TLS 协议,一切顺利。

但是我想在 HTTP 页面中也启用 HTTP/2 协议,像在 HTTP 中一样在两个 HTTPS 中获取这个协议。

有可能的?

以及如何直接在 standalone-full.xml 配置文件中进行此更改?

谢谢你。

https http wildfly http2

-1
推荐指数
1
解决办法
1870
查看次数

php7.4、php7.4-fpm、http2、Apache、nginx,我很困惑

  • 我可以将 php7.4-fpm 与 A​​pache 一起使用吗?或者 php-fpm 真的只能与 nginx 一起使用吗?为什么?
  • php7.4支持http2吗?或者你还需要 php-fpm 吗?http2 官方网站 (http2.pro) 已经有几年没有更新了。
  • 还值得激活 HTTP2 吗?(最新的更新可以追溯到几年前。)
  • 要激活http2,我遵循了此处描述的所有过程: https: //http2.pro/doc/Apache,现在如果我必须重新激活php(正常)我该如何返回?

(这个问题最初更具解释性,但管理员不喜欢它......他们要求它更加集中,所以让我们尝试只回答问题。)

php apache nginx http2 php-7.4

-2
推荐指数
1
解决办法
1485
查看次数