没有回调的JSONP如何工作?

时间:2018-11-13 23:03:43

标签: javascript jsonp

我正在使用客户端SDK,该SDK在后台创建脚本并将其附加到<head>,如下所示:

<script src="http://foo.com?foo=bar"></script>

请注意,没有callback参数。

响应返回以下内容(带有标题Content-Type: application/javascript):

{ document.cookie="something=thing" }

它在浏览器中设置cookie(当我在开发工具中查看cookie时可以看到)。

奇怪的是,在脚本的URL中没有通常在JSONP请求中期望的回调参数。

我试图通过向本地网页添加类似的脚本并点击返回相同响应的本地服务器来复制此行为,但与SDK不同的是,它没有设置cookie。 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>}

1 个答案:

答案 0 :(得分:2)

尽管API源代码中有方法名称,但它不是JSONP。

JSONP是一种JavaScript程序,符合以下特定格式:仅包含一个带有一个参数的函数调用,如果将其从JavaScript程序中取出并放入JSON文件,则该参数为JSON。

JSONP的工作原理是注入一个<script>元素,该元素加载并执行JavaScript程序。

这里提供的是一个不符合JSONP格式的JavaScript程序。

它仍然是JavaScript程序。

使用<script>加载仍然有效。