jsonp 详解

article/2025/9/30 19:48:05

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

Jsonp原理(可以先看 Demo)

首先在客户端注册一个callback,然后把callback的名字传给服务器。此时,服务器先生成 json 数据,然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp。最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里。(动态执行回调函数)

Demo 演示

一、服务端:建立 web 工程 test_jsonp_server

服务端监听在 8080 端口。

源码下载地址:https://gitee.com/liupeifeng3514/test_jsonp_server

Servlet

package com.lpf.jsonp;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TestJsonpDemo extends HttpServlet {private static final long serialVersionUID = 1L;public TestJsonpDemo() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 回调函数名String callBack = request.getParameter("callback");// json数据String jsonData = "{\"name\":\"挖坑埋你\"}";// jsonp格式的数据String jsonp = callBack + "(" + jsonData + ")";// 设置头信息response.setHeader("Content-type", "application/json;charset=utf-8");// 输出jsonp格式的数据response.getWriter().println(jsonp);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

web.xml

    <servlet><servlet-name>TestJsonpDemo</servlet-name><servlet-class>com.lpf.jsonp.TestJsonpDemo</servlet-class></servlet><servlet-mapping><servlet-name>TestJsonpDemo</servlet-name><url-pattern>/testJsonpDemo</url-pattern></servlet-mapping>

二、客户端:建立 web 工程 test_jsonp_client

客户端监听在 8081 端口。

源码下载地址:https://gitee.com/liupeifeng3514/test_jsonp_client

index_jsonp.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>JSONP 实例</title></head>
<body><div id="divCustomers"></div><script  src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script><script type="text/javascript">  function callbackFunction(data) {document.getElementById('divCustomers').innerHTML = data.name;}</script><script type="text/javascript" src="http://127.0.0.1:8080/test_jsonp_server/testJsonpDemo?callback=callbackFunction"></script>
</body>
</html>

index_no_jsonp.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>JSONP 实例</title></head>
<body><div id="divCustomers"></div><script  src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script><script type="text/javascript">  $.ajax({  url:"http://127.0.0.1:8080/test_jsonp_server/testJsonpDemo?callback=callbackFunction",success:function(result) {document.getElementById('divCustomers').innerHTML = data.name;},  timeout:3000});</script>
</body>
</html>

三、运行,验证

跨域不只是指域名(IP)不同,端口号不同也是跨域(即使域名、IP都相同,但端口号不同)

1、跨域失败

这里写图片描述

这里写图片描述

可以看到服务端正确响应了,也返回了正确的数据,但浏览器禁止对返回的数据进行处理。

2、跨域成功

这里写图片描述

页面正确显示了服务端返回的数据。


参考文章:前端必备HTTP技能之同源策略详解


http://chatgpt.dhexx.cn/article/0NPrAdNN.shtml

相关文章

VUE2.0之Jsonp的使用方法(前端)

本文主要介绍的是在VUE2.0Jsonp的使用方法,通过github引入jsonp和promise封装,实现跨域获取数据。 1.JSONP的用途和原理 使用JSONP主要是目的通过动态创建Script,动态拼接url,进而抓取数据,实现跨域。确切地说,AJAX请求由于同源影响,是不允许进行跨域请求的,而Script标…

JSONP跨域的原理

目录 JSONP跨域原理演示JSONP跨域注意事项JSONP实践jQuery发送JSONP请求 JSONP&#xff08;JSON With Padding&#xff09;是利用script标签的跨域功能&#xff0c;比如script和img的src属性&#xff0c;link的href属性&#xff0c;它只支持get请求。 JSONP跨域原理演示 把外部…

java~jsonp的使用

对于一个后端程序来发&#xff0c;它可能会被多个应用调用&#xff0c;而跨域的问题就来了&#xff0c;使用jsonp来解决这个问题是个不错的方式&#xff0c;下面说一下关于jsonp的知识 JSONP不是新技术&#xff0c;只是在页面上响应一段js对于响应的 MIME type (‘text/plain’…

轻松搞定JSONP跨域请求

一、同源策略 要理解跨域&#xff0c;先要了解一下“同源策略”。所谓同源是指&#xff0c;域名&#xff0c;协议&#xff0c;端口相同。所谓“同源策略“&#xff0c;简单的说就是基于安全考虑&#xff0c;当前域不能访问其他域的东西。 一些常见的是否同源示例可参照下表&a…

jsonp

jsonp 我们知道&#xff0c;普通的ajax请求存在跨域无权限访问的问题&#xff0c;这是浏览器的安全策略在起作用 index.php: <?php $info {"code" : 10,"title" : "jsonp","name" : "rgy"};echo $info; ?> test.h…

什么是JSONP及其实现原理

一、为什么会有JSONP 解决跨域问题&#xff1b;因为XMLHttpRequest有同源策略&#xff0c;而在实际开发中又常有跨域的需求&#xff0c;早期开发者为解决跨域问题&#xff0c;设计出了JSONP这个东西 二、JSONP长什么样 类似JSON&#xff0c;一种JSON的变体&#xff0c;样式就…

Ajax中的JSONP

同源策略和跨域的概念 什么是同源 如果两个页面的协议&#xff0c;域名和端口都相同&#xff0c;则两个页面具有相同的源。 什么是同源策略 同源策略(英文全称Same origin policy)是浏览器提供的一个安全功能。 MDN官方给定的概念:同源策略限制了从同一个源加载的文档或脚本如…

JSONP解决跨域问题

一、什么是同源 概念&#xff1a;如果两个页面的协议、域名和端口都相同&#xff0c;则这两个页面具有相同的源。 二、什么是同源策略 概念&#xff1a;是浏览器提供的一个安全功能。 三、什么是跨域 概念&#xff1a;同源指的是两个URL的协议、域名、端口号一致&#xff0c…

关于Jsonp,你知道多少?

# 一、Jsonp为跨域而生 为什么会出现跨域问题&#xff1f; &#x1f64b;‍♀️出于浏览器的同源策略限制。 什么是源? &#x1f64b;‍♀️源&#xff08;origin&#xff09;就是协议&#xff08;protocol&#xff09;&#xff0c;主机&#xff08;host&#xff09;和端口…

JSONP原理及实现

文章目录 基本原理执行过程优缺点 案例分析前期准备后端代码前端简单实现jQuery中ajax实现封装一个JSONP方法简易版同时多个请求最终版JSONP方法 基本原理 基本原理&#xff1a; 主要就是利用了 script 标签的src没有跨域限制来完成的。 执行过程 前端定义一个解析函数(如: …

什么是 JSONP?

前言 首先我们得先了解JSONP是怎么产生的。 最开始跨域请求数据没有现在方便&#xff0c;Ajax直接请求普通文件存在跨域无权限访问的问题&#xff0c;然后聪明的程序员想出了一套非官方的解决办法&#xff0c;程序员发现凡是带有“src”这个属性的标签都拥有跨域的能力&#x…

jsonp介绍

为什么要知道jsonp&#xff0c;jsonp的作用是什么&#xff1a; Jsonp(JSON with Padding) 是 json 的一种"使用模式"&#xff0c;可以让网页从别的域名&#xff08;网站&#xff09;获取资料&#xff0c;即跨域读取数据。原则上浏览器是不允许请求不同域名的数据的&…

前端跨域jsonp的细节,挡住面试官的连环提问

1.前言 在前端面试中&#xff0c;想必每一个人都会被问到跨域相关的问题&#xff0c;背过八股文的小伙伴肯定对跨域的解决对答如流&#xff0c;常见的跨域解决方案在网上有很多整理&#xff0c;但是如果问到实现的细节&#xff0c;你是否能够手写实现或者深入解读呢&#xff1f…

jsonp 的原理及应用

1. 什么是jsonp jsonp全称json with padding&#xff0c;填充式的json,jsonp是为跨域而生的 2. 那么有哪些标签可以跨域呢 <img src""> //图片 <link href""> //css <script src""> //程序我们可以使用script来帮助我们跨域…

JSONP详解

Jsonp(JSON with Padding) 是 json 的一种”使用模式”&#xff0c;可以让网页从别的域名&#xff08;网站&#xff09;那获取资料&#xff0c;即跨域读取数据。 为什么我们从不同的域&#xff08;网站&#xff09;访问数据需要一个特殊的技术(JSONP )呢&#xff1f;这是因为同…

使用JSONP解决跨域

1.首先需要知道什么是跨域 浏览器从一个域名的网页去请求另一个域名的资源时&#xff0c;域名、端口、协议任一不同&#xff0c;都是跨域 出于浏览器的同源策略限制 同源策略&#xff08;Sameoriginpolicy&#xff09;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功…

虚拟机安装ubuntu全教程

主要流程 - 准备安装包&#xff08;包括ubuntu镜像、虚拟机压缩包、分区助手)安装虚拟机安装ubuntu、安装vmtool&#xff08;解决ubuntu全屏的问题&#xff09; 一、准备安装包 下载地址&#xff1a;http://pan.baidu.com/s/1hr39WGG 密码&#xff1a;tttq 二、安装虚拟机 …

ubuntu服务器ubuntu Server安装教程

记录一次系统安装到拷贝大数据文件的过程。 说在前: 1.系统U盘启动安装软件Rufus&#xff0c;自行百度下载2.下载Ubuntu Server镜像&#xff0c;官方地址即可一、安装 1、选择Ubuntu Server 2、语言选择&#xff0c;默认英语 3、有网络的话选择第一项升级系统&#xff0c;…

ubuntu安装图文教程

作为目前世界上最安全的操作系统&#xff0c;Linux逐渐被大多数人使用&#xff0c;而ubuntu作为Linux分支中最华丽美观的操作系统&#xff0c;有必要有一个好多安装教程 ubuntu系统是一个linux操作系统;ubuntu安装教程的每个版本类似&#xff0c;下面给您带来的是12.04版本的ub…

Ubuntu/Windows 双系统安装教程

前言 由于工作所用的开发环境是linux的&#xff0c;所以决定把自己电脑装一个windows/ubuntu双系统。Ubuntu不同版本的物理机安装流程都是一样的&#xff0c;而且极其简单&#xff0c;不要怕自己没装过把电脑整坏了&#xff0c;大不了连windows一起给它重装了。 双系统安装步…