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

Mat*_*abe 5 javascript opera google-chrome spdy angularjs

我有一个使用Angular $ resource提供程序来处理对API后端的所有调用的Angular 1.5应用程序。我最近添加了一个具有拖放界面的功能,一旦将某项放入特定的存储桶中,我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搜索充其量是神秘的,听起来似乎不适合我的情况。

这是我$resource在Angular应用程序中用来进行此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"
      }
    })
  };
});
Run Code Online (Sandbox Code Playgroud)

上面的代码生成的请求本身如下所示:

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"}
Run Code Online (Sandbox Code Playgroud)

该请求的响应窗口为空,devtools将请求显示为“停止”。有什么想法吗?

Rob*_*Rob 2

从今年 5 月 15 日起,Chrome 不再支持 SPDY,并且不再包含在当前版本中。

\n\n
\n

...从 5 月 15 日 \xe2\x80\x94 HTTP/2 RFC \xe2\x80\x94 周年纪念日开始,Chrome\n 将不再支持 SPDY。

\n\n

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

\n
\n