jsonp 的优缺点

简介: jsonp 的优缺点

JSONP,全名是JSON with Padding,是一种通过<script>标签来获取跨域数据的策略。它本质上不是一个新的技术,只是JavaScript的普通函数调用的一种形式,即利用了网页脚本的同源策略。

优点:

  1. 实现简单:JSONP的实现相对简单,只需要将返回的数据包裹在一个函数调用中,然后通过动态创建<script>标签来获取数据。
  2. 跨域支持:由于它利用了<script>标签的同源策略,所以可以突破浏览器的同源策略限制,实现跨域数据请求。

缺点:

  1. 只支持GET请求:JSONP只支持GET请求,不能使用POST、PUT、DELETE等其他HTTP方法。
  2. 安全性问题:JSONP的安全性相对较低,因为它返回的数据是明文的,没有经过任何的加密或编码,容易被恶意攻击者获取并利用。
  3. 兼容性问题:虽然大部分现代浏览器都支持JSONP,但一些较老的浏览器可能不支持。

代码示例:

假设我们有以下的JSONP请求:

<script>
function handleData(data) {
console.log(data);
}
var script = document.createElement('script');
script.src = 'http://example.com/data?callback=handleData';
document.body.appendChild(script);
</script>

这个例子中,我们创建了一个名为handleData的函数,用于处理从服务器获取的数据。然后我们创建了一个<script>标签,将其src属性设置为服务器的URL,同时将回调函数名作为参数传递给URL。最后我们将<script>标签添加到文档的body中,这样就可以触发与服务器的跨域请求。

在服务器端,它需要返回类似下面的JSON数据:

handleData({"name": "John", "age": 30});

这样,当浏览器获取到这个数据后,会调用handleData函数,将数据作为参数传入。

相关文章
|
10月前
|
SQL 存储 Apache
Apache Doris 3.0.3 版本正式发布
亲爱的社区小伙伴们,Apache Doris 3.0.3 版本已于 2024 年 12 月 02 日正式发布。该版本进一步提升了系统的性能及稳定性,欢迎大家下载体验。
377 16
|
11月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
机器学习/深度学习 人工智能 PyTorch
深度学习长文|使用 JAX 进行 AI 模型训练
深度学习长文|使用 JAX 进行 AI 模型训练
|
缓存 网络协议 算法
|
Docker 容器
Excalidraw 简介及 Docker Compose 部署指南
家人们好,我们在工作生活中经常需要画些图,我们往期了已经出过draw-io私有化部署的文章了,今天我要向大家介绍一款名为 Excalidraw 的绘图工具,这款工具了我个人非常喜欢使用,是因为它可以修改成类似于手写体的字体,并且可以直接绘画,这篇文章我将分享如何使用 Docker Compose 轻松部署 Excalidraw。
1039 0
Excalidraw 简介及 Docker Compose 部署指南
|
缓存 前端开发 JavaScript
React.memo 与 useMemo 超厉害!深入浅出带你理解记忆化技术,让 React 性能优化更上一层楼!
【8月更文挑战第31天】在React开发中,性能优化至关重要。本文探讨了`React.memo`和`useMemo`两大利器,前者通过避免不必要的组件重渲染提升效率,后者则缓存计算结果,防止重复计算。结合示例代码,文章详细解析了如何运用这两个Hook进行性能优化,并强调了合理选择与谨慎使用的最佳实践,助你轻松掌握高效开发技巧。
440 0
A module cannot have multiple default exports.是、关闭Vetur扩展,或者重启项目,神奇的bug,复制代码造成的
A module cannot have multiple default exports.是、关闭Vetur扩展,或者重启项目,神奇的bug,复制代码造成的
|
人工智能 Linux Windows
MoneyPrinterPlus全面支持本地Ollama大模型
现在,MoneyPrinterPlus除了支持大模型厂商的服务之外,还可以接入本地的Ollama大模型了。
|
弹性计算 Linux
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
40297 0