美文网首页
jsonp为什么能够实现跨域?

jsonp为什么能够实现跨域?

作者: 伐樱大魔 | 来源:发表于2020-02-21 17:05 被阅读0次

为什么会存在跨域问题?

因为所有支持JavaScript的浏览器都有一个叫做“同源策略”的安全策略。
具体怎么个策略法不是本章所探讨的。
这个安全策略就导致了不能跨域请求。

什么是跨域?

跨域大概就是你以一个‘http://localhost:3000’去请求了一个‘http://localhost:3001’的资源(反之亦然)。
我们的浏览器就会很友好地给我们提示:

image

此处用的是fetch

但是很多时候,我们特别需要跨域,所以市面上出现了闻名的jsonp用来解决跨域问题。

jsonp是如何实现跨域的?

jsonp的实现遵循了一个原理:

js文件是可以不受安全策略的限制而随便下载的

所以,我们可以在html的顶部加上我们要请求的资源,例如:

<script type="text/javascript" src="http://localhost:3000/test.js></script>

通过查看浏览器的network,这个资源是请求到了,跨域也成功了!

jsonp就是通过这个原理来实现跨域的,当然不仅仅是这些。

简易代码实现jsonp跨域

众所周知,jsonp的跨域,是要带上callback函数的。

我们把本地实现的back函数传递过去 ?callback=back

<script>
    function back(data) {
        console.log(data);
    }
</script>
       
<script type="text/javascript" src="http://localhost:3000/test.js?callback=back"></script>
  

http://localhost:3000/test.js里,我们只需要执行back函数即可:

back({message:"success"});

并且返回了json

{ 
    message:"success"
}

约定回调函数名很重要!约定回调函数名很重要!约定回调函数名很重要!


额外小细节

如果我在http://localhost:3000/test.js里,我不用我们约定的back回调函数名,那么我们的控制什么都不会打印,比如我此刻:

say({message:"success"});
image

没有定义say所以控制台报错啦!

同理,如果你重复定义

const back = ({message:"success"});

也会报错:

image

这都是语法问题啦!

相关文章

  • 浏览器跨域问题,教你手写实现jsonp跨域

    跨域概述为什么会有跨域跨域解决办法:1、jsonp;2、后台代理手写实现jsonp跨域(包括服务器端代码) 跨域问...

  • 对jsonp 的理解认识

    什么是跨域?为什么要跨域呢?听说jsonp能. 为什么jsonp能跨域呢?什么时候使用jsonp?怎么使用json...

  • JSONP原理探究

    介绍   JSONP是一直种解决跨域问题的方案,实现的原理来自于页面中的 标签能够跨域请求资源。要通过JSONP实...

  • jsonp为什么能够实现跨域?

    为什么会存在跨域问题? 因为所有支持JavaScript的浏览器都有一个叫做“同源策略”的安全策略。具体怎么个策略...

  • ajax跨域

    JSONP之所以能够用来解决跨域方案,主要是因为 脚本拥有跨域能力,而JSONP正是利用这一点来实现。具体原理如图

  • JavaScript - GET/POST及跨域方法

    xhr 原生方法请求 window fetch 方法 关于跨域 利用JSONP实现跨域调用 使用 CORS(跨域资...

  • JSONP技术原理及实现

    转自《跨域jsonp的原理》 首先确定为什么要用jsonp,因为要跨域请求数据,那为什么会发生跨域呢,因为浏览器的...

  • js中代理模式

    典型例子 jsonP用过代理,实现跨域交互

  • #hello,JS:15 同源策略 & 跨域(JSONP)

    跨域有几种常见的方式?你有没有跨域使用的经验? 方式: 使用jsonp实现跨域?使用cors实现跨域?浏览器另类的...

  • 实现前端跨域的几种方式

    1、jsonp跨域实现方式 server.js 2、CORS跨域实现方式 index.html server1.j...

网友评论

      本文标题:jsonp为什么能够实现跨域?

      本文链接:https://www.haomeiwen.com/subject/cfthqhtx.html