PUT请求仅在Chrome或Opera中生成SPDY协议错误?

时间:2016-08-17 00:53:56

标签: javascript angularjs google-chrome opera spdy

我有一个Angular 1.5应用程序,它使用Angular $resource provider来处理对API后端的所有调用。我最近添加了一个具有拖放界面的功能,一旦项目被放入特定存储桶,我执行PUT请求,其中包含所有相关数据到公共API方法以保存所述数据。

几个月前我开发了它,甚至在一个特定版本中发现了纯Mac版Chrome中的一个奇怪的错误(我们已经过去了2或3个版本),但除此之外它完美无缺。

我最近刚刚在自己做了一些测试之后发布了它,只是意识到Chrome和Opera浏览器都在PUT调用时出错,API从未收到请求。我得到的唯一信息是Chrome控制台中的此说明:

PUT https://www.phpdraft.com/api/draft/59/pick/5026/depth_chart/37 net::ERR_SPDY_PROTOCOL_ERROR

要亲自查看此内容,请点击以下网址:PHPDraft

我怀疑我的服务器使用HTTPS的事实可能是这里的问题,但到目前为止我在ERR_SPDY_PROTOCOL_ERROR上完成的Google搜索最多只是神秘而且听起来并不像他们适用于我的情况。

以下是我在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"}

此请求的响应窗口为空,devtools将请求显示为“已停止”。任何想法在这里发生了什么?

1 个答案:

答案 0 :(得分:2)

截至今年5月15日,Chrome no longer supports SPDY已不再包含在当前版本中。

  

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

     

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