浏览器的跨域问题

跨域

  1. 跨域  

    指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

  2. 同源策略  

    是指协议,域名,端口都要相同,其中有一个不同都会产生跨域,在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。

  3. 跨域问题怎么出现的  

    开发一些前后端分离的项目,比如使用 SpringBoot + Vue 开发时,后台代码在一台服务器上启动,前台代码在另外一台电脑上启动,此时就会出现问题。

请求HEADER的一些参数

 (1). Access-Control-Allow-Methods
 该字段的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法。注意,返回的是所有支持的方法,而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求。
 
 (2). Access-Control-Allow-Headers
 如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的。它也是一个逗号分隔的字符串,表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段。
 
 (3). Access-Control-Allow-Credentials
 它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。
 
 (4). Access-Control-Max-Age
 该字段用来指定本次预检请求的有效期,单位为秒。上面结果中,有效期是20天(1728000秒),即允许缓存该条回应1728000秒(即20天),在此期间,不用发出另一条预检请求。

配置前端

// [vue.config.js]
module.exports = { 
    devServer: { 
        proxy: { 
            '/api': { 
                target: 'https://www.baidu.com/', // 允许跨域 
                changeOrigin: true, 
                ws: true, 
                pathRewrite: {'^/api': ''} 
            }
        } 
    }
} 
// [main.js] 
import Axios from 'axios' 
Vue.prototype.$axios = Axios [App.vue] //经过 vue.config.js 配置文件的代理设置,会自动转为 https://www.baidu.com/,从而解决跨域问题
this.$axios.get('/').then(response => { 
    if (response.data) {
        console.log(response.data)
    } 
}).catch(err => {
    alert('请求失败')
})

配置后端

const express = require('express')
const app = express()
//允许跨域
app.use(require('cors')())
app.use('/json', express.static(__dirname + '/json'))
app.listen(3000, () => {
  console.log('http://localhost:3000')
})

参考链接: https://www.cnblogs.com/l-y-h/p/11815452.html

posted @ 2022-03-31 11:13  ~LemonWater  阅读(276)  评论(0编辑  收藏  举报