返回

JSONP - 初探网页跨域请求

前端

JSONP 是什么?

JSONP(JSON with Padding)是一种跨域请求的技术,它是利用<script>标签的特性来实现跨域请求的。

在浏览器中,<script>标签可以加载和执行外部脚本。这些外部脚本可以来自与当前页面相同的域名,也可以来自不同的域名。这就是 JSONP 的原理:当一个页面需要向另一个域名的服务器发送请求时,它可以创建一个<script>标签,并把请求参数作为参数传递给<script>标签。当这个<script>标签被执行时,它就会向服务器发送请求,服务器返回的响应内容会以 JSON 格式包装在一个回调函数中。这个回调函数会被浏览器自动执行,从而实现跨域请求。

JSONP 的实现方式

JSONP 的实现方式很简单,只需要以下几步:

  1. 创建一个<script>标签,并把请求参数作为参数传递给<script>标签。
  2. <script>标签添加到页面中。
  3. 服务器返回的响应内容会以 JSON 格式包装在一个回调函数中。
  4. 这个回调函数会被浏览器自动执行,从而实现跨域请求。

以下是一个 JSONP 的示例代码:

<script src="https://example.com/api/v1/users?callback=myCallback"></script>

<script>
function myCallback(data) {
  console.log(data);
}
</script>

在这个示例中,我们首先创建一个<script>标签,并把请求参数callback=myCallback作为参数传递给<script>标签。然后把<script>标签添加到页面中。服务器返回的响应内容会以 JSON 格式包装在一个名为myCallback的回调函数中。这个回调函数会被浏览器自动执行,从而实现跨域请求。

JSONP 的优缺点

JSONP 的优点有:

  • 实现简单,只需要几行代码就可以实现跨域请求。
  • 不需要服务器端的支持,只要服务器能够返回 JSON 格式的数据即可。

JSONP 的缺点有:

  • 只能用于 GET 请求,不支持 POST 请求。
  • 不支持自定义头部信息。
  • 容易受到 JSONP 劫持攻击。

JSONP 与 CORS 的区别

CORS(Cross-Origin Resource Sharing)也是一种跨域请求的技术,它是一种 W3C 标准,得到了各大浏览器的支持。CORS 的实现原理与 JSONP 不同,它使用 HTTP 头部信息来控制跨域请求。

CORS 的优点有:

  • 支持 GET 和 POST 请求。
  • 支持自定义头部信息。
  • 不容易受到 JSONP 劫持攻击。

CORS 的缺点有:

  • 需要服务器端的支持,需要在服务器端配置 CORS 头部信息。
  • 实现比 JSONP 复杂。

结论

JSONP 和 CORS 都是跨域请求的技术,它们都有各自的优缺点。在实际开发中,应该根据具体情况选择合适的跨域请求技术。如果只需要支持 GET 请求,并且不需要自定义头部信息,那么可以使用 JSONP。如果需要支持 POST 请求,或者需要自定义头部信息,那么应该使用 CORS。