是否有任何规范说明什么仍然被视为有效的 JSONP?

发布于 2024-12-29 22:19:06 字数 920 浏览 0 评论 0原文

我需要解析 .NET 中的 JSONP 消息并在这些消息中查找 JSON。是否有描述有效 JSONP 消息的最新规范?

我找到了这篇博文(来自2005年)由 Bob Ippolito 指定第一个 JSONP 提案,其中 JSONP 消息可以包含几乎任何 JavaScript 代码。

我还在 json-p.org 上发现了一个可能更新的规范,仅允许对指定函数进行函数调用在名为 callback 的请求 URI 参数中。

最后 维基百科 说:

虽然填充(前缀)通常是回调的名称 在浏览器的执行上下文中定义的函数, 它也可以是变量赋值、if 语句或任何其他 JavaScript 语句。对 JSONP 请求的响应(即 遵循 JSONP 使用模式的请求)不是 JSON,也不是 解析为 JSON;返回的有效负载可以是任意 JavaScript 表达式,并且根本不需要包含任何 JSON。但 传统上,它是一个调用函数的 JavaScript 片段 调用一些 JSON 格式的数据。

那么是否有任何全局定义可以构成有效的 JSONP 响应以及允许哪些 JavaScript 构造?我是否应该期待任何 JavaScript 代码,因为这是当前浏览器接受的代码(因为它具有 application/javascript 内容类型)?

I need to parse JSONP messages in .NET and find JSON in those messages. Is there any up to date specification describing a valid JSONP message?

I found this blog post (from 2005) by Bob Ippolito specifying the first JSONP proposal, where a JSONP message could contain almost any JavaScript code.

I also found a probably more recent specification on json-p.org allowing only function calls to functions specified in a requesting URI parameter named callback.

Finally Wikipedia says:

While the padding (prefix) is typically the name of a callback
function that is defined within the execution context of the browser,
it may also be a variable assignment, an if statement, or any other
JavaScript statement. The response to a JSONP request (namely, a
request following the JSONP usage pattern) is not JSON and is not
parsed as JSON; the returned payload can be any arbitrary JavaScript
expression, and it does not need to include any JSON at all. But
conventionally, it is a JavaScript fragment that invokes a function
call on some JSON-formatted data.

So is there any global definition what makes a valid JSONP response and what JavaScript constructs are allowed? Should I expect any JavaScript code, because that is what current browsers accept (because it has application/javascript content type)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沉睡月亮 2025-01-05 22:19:06

由于 JSONP 是一种模式而不是一种语言(就像 JSON 的情况一样),因此没有标准。

它的名称意味着您将获得一个封装在函数调用中的有效 JSON 对象。

事实上,告诉您响应中将包含哪些内容的“规范”应该是 API 您正在订阅 文档

As JSONP is a pattern rather than a language (as is the case with JSON), there is no standard.

It's name implies that you'll get a valid JSON object wrapped in a function call.

Indeed, the "specification" which tells you what will be included in the response should be something for the API you're subscribing to to document.

呆头 2025-01-05 22:19:06

它实际上可以是任何有效的 JavaScript,因为它的作用是将新的脚本标记附加到页面。您看到 callback({...JSON...}) 的原因是因为它正在调用您传递到脚本标记的 URL 中的回调函数。但是,您可以将整个 Web 应用程序的函数调用和其他内容放在同一负载中。

您应该考虑跨源资源共享作为 JSONP 的替代方案。它允许常规 AJAX 使用添加的一些 HTTP 标头直接跨源通信。它是 JSONP 的一个很好的替代品,JSONP 受到 GET 请求的限制(大多数(如果不是全部)版本的 IE 中的 2083 个字符 URL 限制)。

It could literally be any valid JavaScript because what it does is append a new script tag to the page. The reason you see callback({...JSON...}) is because it's invoking the callback function you passed into the URL of the script tag. However, you could put an entire web application's worth of function calls and other things in the same payload.

You ought to look into Cross-Origin Resource Sharing as an alternative to JSONP. It allows regular AJAX to talk directly across origins using the addition of a few HTTP headers. It's a great alternative to JSONP which is stuck with the limitations of a GET request (2083 character URL limit in most, if not all, versions of IE).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文