在 Javascript 中,在制作 XHR 或接收推送通知时,JSON 以空的 for(;;); 开头的目的是什么?

What is the purpose of a JSON starting with an empty for(;;); in Javascript when making XHR or receiving Push notifications?

本文关键字:for 是什么 开头 JSON 通知 Javascript XHR      更新时间:2023-09-26
我想

问一下,在进行XHR或服务器向浏览器发出推送通知时,这种响应的目的是什么:

for(;;);[{"syncId": 2, "changes" : [["change",{"pid":"7"},["10",{"id":"7"}]]], "state":{"5":{"childData":{"7":{"alignmentBitmask":48,"expandRatio":0}}},"7":{"caption":"This is the real UI","text":""}}, "types":{"5":"1","7":"10"}, "hierarchy":{"5":["7"],"7":[]}, "rpc" : [], "meta" : {"async":true}, "resources" : {}, "typeMappings" : { "com.vaadin.ui.AbstractField" : 11 , "com.vaadin.ui.AbstractTextField" : 12 , "com.vaadin.ui.TextArea" : 10 }, "typeInheritanceMap" : { "11" : 6 , "12" : 11 , "4" : 9 , "6" : 5 , "10" : 12 , "8" : 4 , "9" : 6 , "1" : 8 }, "timings":[185, 6]}]

我的意思是,我知道它是一个 JSON(或者至少应该是(,但是响应开始时的for(;;);呢?这是干什么用的?

我以前没有见过前面的for(;;);结构 - 它是JavaScript,绝对不是有效的JSON。

您正在查看的内容可能是一个技巧,可以弄乱试图从不同域读取响应的人。浏览器中的跨源限制意味着您不能随意从随机域加载资源。但是,您可以做的是从另一个域加载JavaScript位:例如,Google Analytics就是这样做的。

也许您从中获得响应的任何服务都试图通过在响应前面粘贴无限循环来阻止忙碌者执行此类请求,从而削弱任何试图将其作为脚本请求然后逐字运行响应的人的浏览器。

然而,这都是猜测;它可能完全是另一回事。

编辑:如果你得到响应的服务是Facebook,这个答案给出了一个更合理的解释:显然Facebook添加它是为了迫使其开发人员使用受信任的JSON解析器。

for(;;);

不是标准的 JSON。看起来像响应错误。

如果将其删除,则 json 有效。