PUT请求只在Chrome或Opera中产生SPDY协议错误?

5
我有一个Angular 1.5应用程序,使用Angular $resource provider来处理所有对API后端的调用。我最近添加了一个拖放界面的功能,一旦将项目放入特定桶中,我会执行一个PUT请求来保存相关数据到公共API方法中。
我几个月前开发了它,并在某个版本(我们已经过了2或3个版本)的Mac版Chrome中发现了一个奇怪的错误,但除此之外,它完美地工作。
我最近进行了更多的测试后发布了它,只是意识到Chrome和Opera浏览器都在PUT调用时出现了错误,API从未收到该请求。控制台中Chrome的描述为: PUT https://www.phpdraft.com/api/draft/59/pick/5026/depth_chart/37 net:: ERR_SPDY_PROTOCOL_ERROR 要查看自己是否有这个问题,请访问此URL:PHPDraft 我怀疑我的服务器正在使用HTTPS可能是问题所在,但到目前为止,我在ERR_SPDY_PROTOCOL_ERROR上做的谷歌搜索最好是晦涩难懂,听起来似乎并不适用于我的情况。
以下是如何在我的Angular应用程序中使用$resource来进行PUT调用(以及所有其他类似的调用):
angular.module('app').factory('api', function($resource, ENV) {
  return {
    DepthChartPosition: $resource(ENV.apiEndpoint + "commish/draft/:id/depthchartposition/:position_id", {
      draft_id: '@draft_id',
      position_id: '@position_id',
      draft_sport: '@draft_sport',
      manager_id: '@manager_id',
      pick_id: '@pick_id'
    }, {
      'update': {
        method: 'PUT',
        url: ENV.apiEndpoint + "draft/:draft_id/pick/:pick_id/depth_chart/:position_id"
      }
    })
  };
});

以下是由上述代码生成的请求本身的样子:
General
Request URL:  https://www.phpdraft.com/api/draft/59/pick/5026/depth_chart/37

Request Headers
Accept:application/json, text/plain, */\*
Content-Type:  application/json;charset=UTF-8
Origin:  https://www.phpdraft.com
Referer:  https://www.phpdraft.com/draft/59/depth_chart
User-Agent:  Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36

Request Payload
{draft_id: "59", position_id: "37", pick_id: "5026"}

这个请求的响应窗口是空的,开发者工具显示该请求为“stalled”。这里发生了什么?

在Linux上的Chrome浏览器中出现了复制的错误。首先,谷歌搜索结果建议前往chrome://net-internals/#events&q=type:SPDY_SESSION%20is:active并刷新套接字。尝试了这个方法,但结果没有改变。请注意,我在SPDY错误之前就遇到了这个错误Failed to parse SourceMap: https://www.phpdraft.com/js/affix.min.js.map - Zoot
有趣的是,您也遇到了词缀映射错误。我明确地没有构建应用程序以使用源代码映射,因此很奇怪为什么这个错误还存在(我也看到了)。我会提交一个单独的错误报告。 - Mattygabe
1个回答

2
截至今年5月15日,Chrome不再支持SPDY,并且在当前版本中不再包含该协议。
引用块:

...从5月15日开始——HTTP/2 RFC的周年纪念日——Chrome将不再支持SPDY。

...随着Chrome 51的发布,SPDY和NPN支持将被删除。


1
我从未明确地告诉我的应用程序或服务器使用SPDY协议(事实上,自从我看了Robert Boedigheimer的HTTP/2演讲之后,我对它是什么以及其作用非常熟悉),那么为什么Chrome和Opera都会出现这个错误?我的Chrome设置已经明确关闭了SPDY(但HTTP/2开启)。 - Mattygabe
@Mattygabe SPDY 需要在服务器端进行设置,HTTP/2 也是如此。Opera 可能会与 Chrome 表现相同,因为它使用了与 Chrome 相同的引擎 Blink。 - Rob
我向我的主机(Accuwebhosting)进行了核实,他们表示无法放弃SPDY而选择HTTP/2,因为这是共享主机,可能会影响其他客户。我认为这是胡说八道,因为SPDY只是HTTP/2工作组的实验测试场地,并不打算在任何地方用于生产。是时候找一个新的主机了! - Mattygabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接