服务器未发送自定义响应标头(Rails Devise)

时间:2016-04-06 19:40:08

标签: http tcp okhttp

我正在尝试在Rails服务器的每个请求中检索3个响应头(Rails Devise Auth Headers:uid,client,access-token)。

使用Postman(http客户端)它正在工作。 使用OkHttp(java http客户端),头文件不会显示在客户端中(我已使用Wireshark检查过)。 当我处于调试模式时,它只是工作......

2 个答案:

答案 0 :(得分:1)

邮递员的附加标题是由于邮递员发送了一个Origin标头,服务器正在使用CORS标头回复,即Access-Control-...。这些标头在普通HTTP标头内发送,即不在响应之后发送。

但是这些访问控制标头仅在从浏览器进行访问时才相关,因为它们控制XHR的跨源行为。由于您不在浏览器中,因此它们与您正在做的事情无关。相关的是响应的主体和一些其他标题,在这里你没有发现任何差异。同样无关紧要的是,如果在同一TCP连接(由邮递员完成HTTP保持活动)或多个连接(OkHttp)内发送多个请求,因为每个请求独立于另一个请求并且使用相同的TCP连接只是性能优化。

如果你真的想要获得这些特殊标题,你应该在你的OkHttp请求中添加一个Origin标题。有关如何添加自己的标题,请参阅the OkHttp examples。但就像我说的那样:这些访问控制头应该与实际任务无关,并且不需要访问这些头。

答案 1 :(得分:0)

Rails项目的“config / initializers / devise_token_auth.rb”文件中有一个属性“config.batch_request_buffer_throttle”。我们将它从5秒改为0秒。 在当前时间段内,当前令牌可用于以下请求。 作为原始文档:“有时需要同时向API发出多个请求。在这种情况下,批处理中的每个请求都需要共享相同的身份验证令牌。此设置确定请求可以在多大程度上分开仍然使用相同的身份验证令牌。“

因此,当我们使用Postman或Java Debug执行请求时,5秒运行,允许Devise生成新令牌,然后将其检索到客户端。