JSONP - 初探网页跨域请求
2023-10-01 20:28:53
JSONP 是什么?
JSONP(JSON with Padding)是一种跨域请求的技术,它是利用<script>
标签的特性来实现跨域请求的。
在浏览器中,<script>
标签可以加载和执行外部脚本。这些外部脚本可以来自与当前页面相同的域名,也可以来自不同的域名。这就是 JSONP 的原理:当一个页面需要向另一个域名的服务器发送请求时,它可以创建一个<script>
标签,并把请求参数作为参数传递给<script>
标签。当这个<script>
标签被执行时,它就会向服务器发送请求,服务器返回的响应内容会以 JSON 格式包装在一个回调函数中。这个回调函数会被浏览器自动执行,从而实现跨域请求。
JSONP 的实现方式
JSONP 的实现方式很简单,只需要以下几步:
- 创建一个
<script>
标签,并把请求参数作为参数传递给<script>
标签。 - 把
<script>
标签添加到页面中。 - 服务器返回的响应内容会以 JSON 格式包装在一个回调函数中。
- 这个回调函数会被浏览器自动执行,从而实现跨域请求。
以下是一个 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。