Play框架 - 检索请求中的Date标头

时间:2014-09-15 06:34:53

标签: scala http playframework request

我在处理请求时需要访问Date:标头,但这似乎被框架“吞噬”了;任何其他标题(甚至组成FooBar个)出现,我可以得到它们,但这给了我None(我正在使用Postman发送一个简单的GET请求 - 其他一切正常工作) :

println("Date: " + request.headers.get("Date").getOrElse("no date!"))
无论我如何尝试发送合理的东西,

都会返回"no date!"

我想知道在request对象到达我的Action之前是否会处理它。

我需要发送的实际字符串值,因为这应该是请求签名的一部分 - 因此表示相同值的等效Date对象不会有太大用处(因为它需要是哈希的一部分) ,以避免重播攻击)。

正如测试一样,我将Date标题替换为Date-Auth标题,这个显示得很好:

ArrayBuffer((Date-Auth, ArrayBuffer(Wed, 15 Nov 2014 06:25:24 GMT))

任何想法或建议都非常感谢!

2 个答案:

答案 0 :(得分:0)

您确定请求中有日期标题(使用firebug或wireshark等工具进行测试)吗? 浏览器不需要发送Date标头。

来自日期部分(14.18)的

RFC 2616 (HTTP 1.1)

  

客户端应该只在包含实体主体的消息中发送Date头字段,就像PUT和POST请求一样,即使这样,它也是可选的。没有时钟的客户端不得在请求中发送Date头字段。

答案 1 :(得分:0)

我的立场得到了纠正 - 事实证明Chrome阻止了一大堆标题: http://www.getpostman.com/docs/requests

我写了一个Python Flask测试服务器,事实上,Date标题不存在。 该页面也有一个修复,适用于Postman版本0.10.4.3和拦截器(1)。

抱歉浪费每个人的时间!

1顺便说一下,IMO Postman是最好的REST客户端,除了令人难以置信的功能外,现在还有一些很棒的外观。如果您正在使用REST API,我强烈推荐它。