解决跨域问题

同源策略和跨域

  1. 同源策略:当发起一个http请求的时候,我们当前的网址和被请求的网址的-》 协议、域名、端口必须一致,如果有一个不同就产生了非同源 策略,也就是跨域了.
  2. 同源策略的目的是为了保护站点资源的安全性
  3. 同源策略只有浏览器有,其他的软件,系统没有的.

如果产生了非同源策略[跨域],如何解决?

  1. jsonp
    • 原理: 创建一个script标签,使用src属性请求,因为这个标签不受浏览器同源策略限制,所以可以跨域请求
    • 其他的
      1. img
      2. link
      3. iframe
  2. 借助后端语言完成请求代理
    • java
    • php
    • nodejs
  3. vue项目中使用vue.config.js里面配置跨域
    • vue.config.js 是vue脚手架的配置文件
    • vue@cli 创建vue项目
    • vue脚手架底层是基于webpack封装的
    • webpack不是给浏览器用的,必须使用nodejs来执行
    • nodejs是把浏览器的内核抽离了出来,安装到了电脑的全局环境中,让任何位置都可以允许js文件.nodejs是后端语言.
    • 代理请求的过程:vue.config.js => webpack => nodejs[后端程序代理请求]
  4. cors跨域
    • 后端做了请求的白名单处理 *
    • 只要前端的浏览器支持cors跨域就可以

封装自己的axios

axios

  • 目前是最火的前端请求库-工具,它是基于ajax和promise封装的,它强大的地方在于可以运行在浏览器端,也可以运行在nodejs端.
  • 安装使用和封装
  • 安装:npm i axios

 

第一个方法: 

在vue.config.js

devServer:{
    proxy:{
      "^/api":{//用‘/api’来拼接
        target:"接口"
      }
    }
  },

main.js

import axios from 'axios';

Vue.prototype.$http = axios;

//请求拦截器
axios.interceptors.request.use((config) => {
  return config
},
  function (error) {
    return Promise.reject(error)
  }
)

第二种:

在vue.config.js

 devServer: {
    proxy: {
      '^/ht': {//用‘/ht’来拼接
        target: '接口',
        pathRewrite: { '^/ht': '' }//调用完后删除'/ht'
      },
    }
  },

//在router
//进入电商页面时优先显示home页面
//redirect: "/home",

main.js

import axios from 'axios'
axios.interceptors.request.use((config)=>{
  return config
})
axios.defaults.baseURL='/ht/'
Vue.prototype.$http=axios

页面中正常调用接口


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值