【发布时间】:2018-04-30 05:13:52
【问题描述】:
在我的虚拟主机切换到 HTTP/2 后,我遇到了一个奇怪的问题。
突然所有对 PHP 页面的 HEAD 请求都会在 Chrome 中导致 ERR_SPDY_PROTOCOL_ERROR。即使文件为空,也会发生这种情况。这似乎只发生在 Chrome 中,但 Postman 和 Lynx 似乎能够很好地发送请求。
一个例子,在Chrome的控制台中输入以下内容(test.php文件为空):
var http = new XMLHttpRequest();
http.open("HEAD", "https://play.asti.ga/api/test.php");
http.send();
返回以下错误:
HEAD https://play.asti.ga/api/test.php net::ERR_SPDY_PROTOCOL_ERROR
网络选项卡还显示(failed)。但是,对 test.html 执行相同的请求确实可以正常工作。
我联系了虚拟主机,他们声称他们的配置很好,所以我想知道我能做些什么来解决这个问题。服务器运行于 PHP/7.0.25
【问题讨论】:
-
curl --head https://play.asti.ga/api/test.php返回curl: (92) HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)-- 这不是来自 PHP。 -
来自 curl 的详细选项:
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0——也许这与代理从上游主机接收零字节有关。 -
嗯没关系,GET 请求也有相同的
len=0消息,但工作正常... -
注意,如果您通过 HTTP 请求相同的页面,它可以正常工作。这很清楚地表明问题出在 Web 服务器配置上,而不是您的应用程序上。
-
@AlexHowansky 感谢您的调查。我将再次联系我的虚拟主机(已经来回发送了很多电子邮件),希望他们这次能解决它。
标签: google-chrome network-protocols http2