这个没有回调的 JSONP 是如何工作的?

How is this JSONP without a callback working?

我正在使用 client-side SDK,它会在后台创建一个脚本并将其附加到 <head>,如下所示:

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

请注意没有 callback 参数。

响应发回以下内容(header Content-Type: application/javascript):

{ document.cookie="something=thing" }

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

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

我试图通过向本地网页添加一个类似的脚本来复制此行为,并且我正在访问一个本地服务器,returns 有相同的响应,但它没有设置 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)
    },

响应示例:

回复header秒

Connection: keep-alive
Content-Encoding: gzip
Content-Length: 158
Content-Type: application/javascript

回应body

{document.cookie=<redacted>}

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

JSONP是一个JavaScript程序,它符合以下特定格式:只包含一个函数调用,只有一个参数,如果取出来就是JSON JavaScript 程序并放入 JSON 文件。

JSONP 通过注入一个 <script> 元素来加载和执行 JavaScript 程序。

您这里的 JavaScript 程序不符合 JSONP 格式。

它仍然是一个 JavaScript 程序。

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