我有一个Angular 1.5应用程序,它使用
Angular $resource provider来处理对API后端的所有调用.我最近添加了一个具有拖放界面的功能,一旦项目被放入特定的存储桶,我就会向公共API方法执行包含所有相关数据的PUT请求以保存所述数据.
几个月前我开发了它,甚至在一个特定版本的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
要亲自看到这个,这里是可以进行调用或类似调用的URL: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将请求显示为“已停止”.有什么想法在这里发生了什么?
最佳答案 截至今年5月15日,
Chrome no longer supports SPDY并不再包含在当前版本中.
… starting on May 15th — the anniversary of the HTTP/2 RFC — Chrome
will no longer support SPDY.…SPDY and NPN support will be removed with the release of Chrome 51.