Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 好奇:Facebook';s的轮询服务正在回调期间使用_Javascript_Ajax_Facebook_Polling_Feed - Fatal编程技术网

Javascript 好奇:Facebook';s的轮询服务正在回调期间使用

Javascript 好奇:Facebook';s的轮询服务正在回调期间使用,javascript,ajax,facebook,polling,feed,Javascript,Ajax,Facebook,Polling,Feed,我在Chrome开发者工具上观看网络监视器,了解Facebook如何在其新闻提要中更新内容 来自AJAX的所有响应都以以下内容开头: for (;;);{"__ar":1,"payload":[]} (;)的是什么你在做什么 这是他们自定义JS框架的一部分吗?还是这个本地人只是我不熟悉的东西 当我预览它时,它似乎是作为json对象加载的。这似乎是对内容保护(DRM)的一次蹩脚尝试。for()的for循环基本上是无限的。这样做的目的似乎是,任何天真地使用javascript来获取AJAX请求的人

我在Chrome开发者工具上观看网络监视器,了解Facebook如何在其新闻提要中更新内容

来自AJAX的所有响应都以以下内容开头:

for (;;);{"__ar":1,"payload":[]}
(;)的
是什么你在做什么

这是他们自定义JS框架的一部分吗?还是这个本地人只是我不熟悉的东西


当我预览它时,它似乎是作为json对象加载的。

这似乎是对内容保护(DRM)的一次蹩脚尝试。for()的
for
循环基本上是无限的。这样做的目的似乎是,任何天真地使用javascript来获取AJAX请求的人都会因为无限循环而导致代码挂起

for()
循环也会为标准JSON解析器生成错误,比如jQuery或YUI中的解析器,甚至JSON.org中的解析器。要使用请求,您需要编写自己的解析器,或者首先从请求中删除
for()
循环


这就是为什么我说这看起来很蹩脚。因为用一点代码从字符串中删除
for()
循环并不困难。

这似乎是对内容保护(DRM)的一次蹩脚尝试。for()的
for
循环基本上是无限的。这样做的目的似乎是,任何天真地使用javascript来获取AJAX请求的人都会因为无限循环而导致代码挂起

for()
循环也会为标准JSON解析器生成错误,比如jQuery或YUI中的解析器,甚至JSON.org中的解析器。要使用请求,您需要编写自己的解析器,或者首先从请求中删除
for()
循环


这就是为什么我说这看起来很蹩脚。因为用一点代码从字符串中删除
for()
循环并不困难。

它本身并不是真正的内容保护;正如已经指出的,围绕它工作是微不足道的。可能的目的是“破坏”应用程序,只需获取字符串并将其提供给javascript
eval()
函数。这种方法曾经非常普遍,现在仍然比你想象的更常见。我怀疑有相当多的程序员认为这实际上是将JSON字符串解析为javascript变量的正确方法。将for循环添加到字符串的开头会松散地强制执行解析而不是eval规则。当然,如果程序员一心想使用eval,那么解决这个问题仍然很简单。我想说,它更像是一个破烂的代码检测器,将迫使旧的(和懒惰的)编码得到纠正。

它本身并不是真正的内容保护;正如已经指出的,围绕它工作是微不足道的。可能的目的是“破坏”应用程序,只需获取字符串并将其提供给javascript
eval()
函数。这种方法曾经非常普遍,现在仍然比你想象的更常见。我怀疑有相当多的程序员认为这实际上是将JSON字符串解析为javascript变量的正确方法。将for循环添加到字符串的开头会松散地强制执行解析而不是eval规则。当然,如果程序员一心想使用eval,那么解决这个问题仍然很简单。我想说,它更像是一个破译的代码检测器,它将强制纠正旧的(和懒惰的)编码。

这是一种安全措施吗?因为它是作为字符串返回的。。除非尝试执行某个字符串,否则不会到达循环。。那么,您难道不能使用本机字符串替换方法将for(;;)替换为空字符串吗?请注意,我说过
任何人都可以天真地用javascript来获取AJAX请求。我假设每个人都理解天真的程序员使用
eval()
解析JSON。(即使是Crockford也同意,如果字符串首先进行了错误测试,那么它也是少数几种适当使用
eval
的方法之一)。因此,这是一种安全措施?因为它是作为字符串返回的。。除非尝试执行某个字符串,否则不会到达循环。。那么,您难道不能使用本机字符串替换方法将for(;;)替换为空字符串吗?请注意,我说过
任何人都可以天真地用javascript来获取AJAX请求。我假设每个人都理解天真的程序员使用
eval()
解析JSON。(即使是Crockford也同意,只要字符串首先进行了错误测试,它也是为数不多的适当使用
eval
)的方法之一。这里回答:这里回答:以及Facebook想要
破坏此类应用的原因:内容保护。破坏应用是机制,内容保护是意图。我们实际上是在说同样的事情。没有什么可以阻止知道自己在做什么的人正确解析返回,正如上面提到的,这可能会阻止编码人员对AJAX端点的返回值进行评估(),这也是Facebook想要打破这类应用的原因:内容保护。破坏应用是机制,内容保护是意图。我们实际上是在用不同的方式说同样的事情。没有什么可以阻止知道自己在做什么的人正确解析返回,正如上面提到的,这可能会阻止程序员对AJAX端点的返回值执行en eval()