解决跨域——前后端协商jsonp
JSONP 原理
1.什么是 JSONP
JSONP(JavaScript with padding)是 JSON 的一种“使用方式”,可用于解决主流浏览器的跨域数据访问问题。
2.JSONP 原理
由于浏览器同源策略的限制,网页中无法通过 Ajax 请求非同源的接口数据。但是<script>
标签不受浏览器同源策略的影响,所以可以通过 src 属性,请求非同源的 js 脚本。
因此,JSONP 的实现原理是,通过<script>
标签的 src 属性,请求跨域的数据接口,并通过函数调用的形式,接收跨域接口响应回来的
数据
3.执行过程
1.客户端定义一个解析函数,如 jsonpCallback = function(res){}
2.通过 params 的形式(d)包装 script 标签的请求参数,并且声明执行函数(如 cbj=jsonpCallback)
3.后端获取到前端声明的执行函数(jsonpCallback),并以带上参数且调用执行函数的方式传递给前端
4.前端在 script 标签返回资源的时候就会去执行 jsonpCallback 并通过回调函数的方式拿到数据了。
4.缺点
由于 JSONP 是通过<script>
标签的 src 属性+回调函数实现的跨域数据请求,所以 JSONP只支持 GET 数据请求,而不支持 POST 请求。
JSONP 和 AJAX 区别
jsonp 和 Ajax 没有任何关系,因为 jsonp 没有用到 XMLHttpRequest 这个对象
jsonp 之所以能跨域,是因为他并不是发送 ajax 请求,并不是利用 XMLHTTPRequest 对象和服务端进行通信,他其实是利用动态创建的 script 标签,而 script 标签是没有同源策略限制的,可以跨域的
实现
前端 5500 端口
1 |
|
后端 3000 端口
1 |
|
1 |
|
解决跨域——前后端协商jsonp
https://hugtyftg.github.io/2024/01/28/解决跨域——前后端协商jsonp/