playframework-1.x - Play Framework 1.2.5 粘滞错误 : 324 no data received

标签 playframework-1.x

我有一个在 Play Framework 1.2.5 中运行的应用程序,有多个用户。

有时,用户会开始收到几分钟前为他们工作的特定 URL 的 324 错误。 (324 = 在 Chrome 中没有收到数据,在 IE8 中服务器关闭了连接)。一旦他们收到此消息,他们就会继续收到错误消息。

我可以看到请求到达运行 Play Framework 的机器(通过 Wireshark),但请求似乎没有到达 Play Controller 。 (作为 Controller 第一步的调试和跟踪消息不会输出到日志)。
我已经看到两个不同的 Controller 出现问题,它可能影响更多。

清除浏览器缓存、历史记录、重启客户端、重启播放、重启服务器似乎都没有区别。

其他浏览器可以成功访问“损坏”的 URL。 “损坏的”客户端可以访问同一应用程序中的其他 URL。

有谁知道:
1) 知道为什么会发生这种情况,或者看到过同样的问题,或者
2) 有人知道 Play 在响应链中的哪个位置可能会爆炸或发送 324 吗?
2)我如何更深入地追踪出了什么问题(例如,我可以追踪 Netty 访问吗?)

我已经搜索了很多类似问题的解决方案,只能在路由文件中找到一些导致类似 324 错误的错误引用,但这些似乎都是一致且可重复的,并且与 Play 2.x 相关。但糟糕的路由会导致 324 错误这一事实意味着我很想更详细地了解路由器对这些损坏的请求做了什么。

非常感谢任何帮助!这让我发疯!

最佳答案

好的,以防万一其他人看到这个令人恼火的问题......我已经找到了原因:

根本原因

Netty 3.2.4-FINAL 中的一个已知问题意味着如果请求包含 8053 字节或更大的 cookie,它会回复 324 响应。这在 Play Framework 社区中是众所周知的(参见 http://play.lighthouseapp.com/projects/57987/tickets/1618-long-cookies-with-double-quote-values-make-play-fail-before-the-request-is-handled)。
您会在那里的评论中注意到,双引号问题已修复,但大小问题仍然存在。

我的事业

那么,我是如何设法生成这么大的 cookie 的呢?答:JQuery 数据表。这个奇妙的 UI 元素(不,真的)有一个名为“bStateSave”的设置,它允许您将表格的状态(排序、过滤等)保存在 cookie 中以改善用户体验。
数据表的 cookie 大约为 900 字节。
但是,Datatables 在此 cookie 的命名中使用 URL 的路径部分,因此对于应用程序中的每个不同 URL 路径,您都会获得一个新的 cookie。
现在只需添加一个 RESTful 风格的 URL,例如/item/show/34(其中 34 是一个对象 id)和 hey-presto,为您查看的每个项目一个 900 字节的 cookie。这很快就会打破 8K 的限制。

答案

覆盖数据表状态 cookie 的命名并非微不足道,但它非常简单。

首先,将以下配置添加到您的数据表中

"bStateSave": true,
"fnStateSave": function(oSettings, oData) { save_dt_view(oSettings, oData); },
"fnStateLoad": function(oSettings) { return load_dt_view(oSettings); },

然后只需提供将存储和检索状态的 javascript 函数,使用您自己的不太精确的 cookie 名称:
function save_dt_view (oSettings, oData) {
    $.cookie('DataTables_myCookie', JSON.stringify(oData));
}
function load_dt_view (oSettings) {
  return JSON.parse( $.cookie('DataTables_myCookie') );
}

感谢 bennybenben 在 this发布我蚕食的代码示例。

关于playframework-1.x - Play Framework 1.2.5 粘滞错误 : 324 no data received,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15280823/

相关文章:

java - 玩!框架 1.2.5 : How to test if response is secure?

java - 玩!框架 1.2.4 : Is it possible to know parameters of a pending job (doJobWithResult)

java - 玩! : How to place property value in groovy expression

java - 游戏框架 : NullpointerException when startup

java - Play 1.2.4 :Retrieving hidden variable value in Controller

mysql - 玩! Framework 1.2.4 --- C3P0 设置以避免通信链路故障导致空闲时间

java - 单元测试进行中!不需要测试播放服务器的框架应用程序

java - 玩! JPA : Enforce not to create Entity on load

java - Play 框架——保证本地线程在请求​​结束或下一个请求开始时被清除

java - play - 将全局变量添加到自定义标签