【发布时间】:2019-04-16 20:45:59
【问题描述】:
我正在使用客户端 SDK,它在后台创建一个脚本并将其附加到 <head>,如下所示:
<script src="http://foo.com?foo=bar"></script>
注意没有callback 参数。
响应发回以下内容(带有标头Content-Type: application/javascript):
{ document.cookie="something=thing" }
它会在浏览器中设置 cookie(当我在开发工具中查看 cookie 时可以看到)。
奇怪的是,在脚本的 URL 中,没有回调参数,正如您通常在 JSONP 请求中所期望的那样。
我尝试通过向本地网页添加一个类似的脚本来复制此行为,并访问返回相同响应的本地服务器,但它没有设置 cookie,这与 SDK 不同。 SDK 本身非常简单,我没有看到任何其他魔法发生。
以前有人见过这样的事情吗?它是如何工作的?
编辑:这是内部 SDK 方法和示例响应
_jsonp: function(o, e) {
var t = document.createElement("script");
t.type = "text/javascript", t.src = e, t.async = !0, document.getElementsByTagName("head")[0].appendChild(t), o.log("SENT JSONP request: " + e)
},
示例响应:
响应标头
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 158
Content-Type: application/javascript
响应正文
{document.cookie=<redacted>}
【问题讨论】:
-
这不是真正的 jsonp 请求。它实际上只是一个 javascript 文件。
-
@KevinB 是的,我想我只是想知道该响应是如何执行的。此外,他们在后台将其称为
_jsonp方法,所以我认为他们的意图是发出 jsonp 请求。 -
这不是 jsonp 请求,因为该请求没有返回 JSONP。它正在返回 javascript。 jsonp 响应也是 javascript,但并非所有 javascript 都是 jsonp。
-
@KevinB 好吧,让我们假设他们的方法名称
jsonp只是用词不当。我们还没有回答有关如何执行响应的问题。 FWIW,这是整个缩小的 SDK,如果你有 chrome 或其他的美化工具,可以阅读它:assets.jetlore.com/js/jltracking.js -
这段代码所做的只是设置一个cookie。当你包含它时,它会设置一个 cookie。就是……就是这样。
{document.cookie=<redacted>}不是对象,它只是普通的旧 javascript。很可能只是alert('Hello World!'),然后会弹出一个警报。
标签: javascript jsonp