繁体   English   中英

没有回调的JSONP如何工作?

[英]How is this JSONP without a callback working?

我使用的是客户端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>}

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

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

JSONP通过注入<script>元素来工作,该元素加载并执行JavaScript程序。

您在这里拥有的是一个不符合JSONP格式的JavaScript程序。

它仍然是一个JavaScript程序。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM