解决跨域的方法

前端解决跨域的方法都是基于<script>标签可以跨域请求

平时的ajax请求所经历的过程

const xhr = new XMLHttpRequest()

xhr.onreadystatechange = function () {
  switch (xhr.readyState) {
    case 0:
      // UNSENT (未打开)
      debugger
      break
    case 1:
      // OPENED  (未发送)
      debugger
      break
    case 2:
      // HEADERS_RECEIVED (已获取响应头)
      debugger
      break
    case 3:
      // LOADING (正在下载响应体)
      debugger
      break
    case 4:
      // DONE (请求完成)
      if (xhr.status === 200) {
        console.log(xhr.responseType)
        console.log(xhr.responseText)
        console.log(xhr.response)
      }
      break
  }
}

xhr.open(‘GET‘, ‘http://y.stuq.com:7001/json‘, true)
xhr.send(null)

  方法一:

/**
 * 方法1
 */
window.xxx = function (value) {
  console.log(value)
}

var script = document.createElement(‘script‘)
script.src = ‘http://x.stuq.com:7001/json?callback=xxx‘
document.body.appendChild(script)

/**
 * 方法2利用require.js
 */
// require([‘http://x.stuq.com:7001/json?callback=define‘], function (value) {
//   console.log(value)
// })

  方法二:

var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(JSON.parse(xhr.responseText).msg)
  }
}
// xhr.withCredentials = true
xhr.open(‘GET‘, ‘http://x.stuq.com:7001/cros‘)
xhr.send(null)

  方法三(利用iframe)

var iframe = document.createElement(‘iframe‘)
iframe.src = ‘http://x.stuq.com:7001/public/hash.html‘
document.body.appendChild(iframe)

window.onhashchange = function () {

  console.log(location.hash)
}

  方法四(利用iframe)

var iframe = document.createElement(‘iframe‘)
iframe.src = ‘http://x.stuq.com:7001/public/name.html‘
document.body.appendChild(iframe)

var times = 0
iframe.onload = function () {
    if (++times === 2) {
        console.log(JSON.parse(iframe.contentWindow.name))
    }
}

  方法五

var iframe = document.createElement(‘iframe‘)
iframe.src = ‘http://x.stuq.com:7001/public/post.html‘
document.body.appendChild(iframe)

window.addEventListener(‘message‘, function(e) {
  console.log(JSON.parse(e.data))
}, false);

  

原文地址:https://www.cnblogs.com/McLyfeng/p/8544949.html

时间: 2024-08-11 01:23:39

解决跨域的方法的相关文章

使用nginx解决跨域问题(flask为例)

背景 我们单位的架构是在api和js之间架构一个中间层(python编写),以实现后端渲染,登录状态判定,跨域转发api等功能.但是这样一个中间会使前端工程师的工作量乘上两倍,原本js可以直接ajax请求api,但是我们不得不ajax请求中间层,中间层再请求api.如图: 为了少敲代码,提高工作效率,我们当然希望将python中间层砍掉,但是如何解决以下三个问题,成为关键: 后端渲染 登录状态判定 跨域转发api 关于1,2我会在另外两篇博客中详细叙述,这篇文章主要解决3,也就是跨域问题.解决跨

后端CORS解决跨域问题

一 . 为什么会有跨域问题 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href 属性,a标签什么的都不拦截. 二 . 解决跨域的方法 解决跨域有两种方法 : JSONP CORS 三 . JSONP 简单说下JSONP,详细的在上一篇 JSONP时json用来跨域的一个东西,原理是通过script标签的跨域特性来绕过同源策略,(创建一个回调函数,然后在远程服务商调用这个函数并且将json数据形式作为参数传递,完成回调). 原文地址:https://

js解决跨域问题

JavaScript中的常见解决跨域的方法 1. 通过jsonp跨域 1.)原生实现: 2. document.domain + iframe跨域 此方案仅限主域相同,子域不同的跨域应用场景. 1.)父窗口:(http://www.domain.com/a.html) 2.)子窗口: (http://child.domain.com/b.html) 3. nginx代理跨域 4. nodejs中间件代理跨域 5. 后端在头部信息里面设置安全域名   原文地址:https://www.cnblog

什么是跨域及怎么解决跨域问题?

什么是跨域? 这篇博文解释的挺清楚,我直接引用 https://blog.csdn.net/lambert310/article/details/51683775 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加的安全限制. 所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域.不明白没关系,举个栗子: http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域) http:

用jsonp来解决跨域问题的三种简单的方法

jsonp实现跨域的方法 使用ajax方法获取数据不能跨域,为了解决这个问题,普遍使用jsonp来实现跨域,下面是对jsonp方法的简单总结: 例子:假如想获取京东的评论的数据,可以在京东的评论面板打开network找到和ajax请求相关的有回调函数callback的请求url, 如找到一个url, 如: 在响应里可以找到回调函数对应的方法: 这是在服务器上写入的方法用来传输数据. 例如获取到的url为 https://club.jd.com/comment/productPageComment

服务端Filter解决跨域方法

问题一.浏览器是先执行请求还是先判断跨域? 浏览器请求-->判断响应中是否有允许跨域-->发现不允许跨域,阻止跨域 说明:当执行跨域请求时,浏览器会提示当前接口不被允许,这说明浏览器已发出了当前请求,但是它的的响应内容被拦截:如果在Response header中的Access-Control-Allow-Origin设置的允许访问源不包含当前源,则拒绝数据返回给当前源. 问题二.判断当前请求是否是跨域请求? 通过查看当前请求的Request Headers 中是否存在Origin属性,当前属

vue开发环境和生产环境里面解决跨域的几种方法

  跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据.源指协议,端口,域名.只要这个3个中有一个不同就是跨域. 这里列举一个经典的列子: #协议跨域 http://a.baidu.com访问https://a.baidu.com: #端口跨域 http://a.baidu.com:8080访问http://a.baidu.com:80: #域名跨域 http://a.baidu.com访问http://b.baidu.com:   现在很多公司都是采用前后分离的方式开发.那么出现经常和会

跨域cors方法(jsonp,document.domain,document.name)及iframe性质

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对 http://store.company.com/dir/page.html 同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 1.通过jsonp跨域[解决ajax跨域] 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的

前端解决跨域问题的8种方案(最新最全)

原文:http://www.cnblogs.com/JChen666/p/3399951.html 1.同源策略如下: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.jshttp://www.a.com/script/b.js 同一域名下不同文件夹 允许 http://www.a.com:8000/a.jshttp://www.a.com/b.js 同一域名,不同端