美文网首页
跨域方式实现原理之-jsonp

跨域方式实现原理之-jsonp

作者: Wang_Yong | 来源:发表于2020-05-21 18:58 被阅读0次

什么是跨域
首先说一下同源:同源就是规定多个web资源的url中的scheme(协议)、hostname(域名)、port(端口)、必须相同,
只要有一项不同那么这个web资源就是不同源 的。

当请求地址与源页面地址不同源时,就产生跨域现象。

同源策略就是规定了javascript可以操作那些web内容的一个完整的安全限制。

同源策略限制的内容有:

  • cookie LocalStorage IndexDB
  • dom 节点
  • ajax请求
    跨域加载标签 src href属性都可以跨域加载资源。

解决方案:
jsonp

jsonp
原理:

  • script元素可以作为一种Ajax传输协议
  • 利用srcript标签不受同源策略限制,网页可以从其他源获取json数据(服务器支持才可以)
  • 只需设置script元素的src属性并且插入到DOM中,浏览器就会发出一个HTTP请求到src属性指向所指向的URL
  • script 元素会自动下载并执行下载的数据
  • 使用这种script元素进行ajax数据传输的技术就叫做jsonp,也就是JSON-Padding
    服务器会返回一个这样的相应
    // functionName(["baidu", "tencent", "alibaba"])

以前就知道利用src属性不受同源策略影响,现在直接贴代码一目了然

优缺点
优点:简单兼容性好
缺点:只支持get方式,不安全,可能遭受xss攻击
这次终于搞懂jsonp的实现形式了

后端代码使用及其简单 node - express

let express = require(''express)
let app = express()

app.get('/say', function(req, res){
  let { callback } = req.query
  // 向前端发送js代码,让前端直接执行掉
  res.end(`${callback}('me too')`)
})
app.listen(3000)

前端代码
前端项目中直接打开或者使用live-server启动一个服务,目的就是前后端不同源,以便使用jsonp实现跨域获取数据


function jsonp({url, callback})
  return new Promise((resolve, reject) => {
    window[callback] = functioin(data) {
      resolve(data)
     }
    script.src = url +  '?callback' + '=' callback
    document.body.appendChild(script)
  })
 // jsonp成功实现跨域
  jsonp({
    url: 'http://localhost:3000/say'
    callback: 'show'
  }).then(data => {
      console.log(data) // me too 拿到数据
   })

相关文章

  • js跨域问题

    来源 javascript中实现跨域的方式总结 第一种方式:jsonp请求;jsonp的原理是利用 标签的跨域特性...

  • JSONP跨域

    JSONP原理及应用 之前的文章中简单介绍过前端可以实现的跨域方式,这次介绍一种更为常用的跨域方式,但这种跨域方式...

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

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

  • 遇到的面试题

    null instanceOf Object false jsonp跨域原理,优缺点,安全性因素 jsonp的实现...

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

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

  • 跨域方式实现原理之-jsonp

    什么是跨域首先说一下同源:同源就是规定多个web资源的url中的scheme(协议)、hostname(域名)、p...

  • 跨域的三种实现方法

    用JSONP实现跨域 原理: 利用 script 标签引用JS文件时不受是否跨域的影响,在后端支持的情况下,实现跨...

  • ajax跨域请求

    ajax跨域请求(jsonp) 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案JSONP jQue...

  • 跨域

    JSONP jsonp是一种跨域通信的手段,它的原理其实很简单: 首先是利用script标签的src属性来实现跨域...

  • 跨域

    解决跨域方法:jsonp,代理,cors jsonp实现原理:动态创建script标签 ,因为script中的sr...

网友评论

      本文标题:跨域方式实现原理之-jsonp

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