美文网首页技术贴
前端跨域问题

前端跨域问题

作者: zhudying | 来源:发表于2020-03-04 11:29 被阅读0次

什么是跨域?

只要协议、域名、端口有任何一个不同,都被当作是不同的域。

同源即指:协议、域名、端口

一个完整的URL包括:

协议部分、域名部分、端口部分、虚拟目录部分、文件名部分、参数部分、锚部分

以百度的URL为例:

http://www.baidu.com:8080/news/index.asp?boardID=5&ID=24618&page=1#r_70732412

http                         属于协议 (”HTTP”后面的"//"为分隔符)

www.baidu.com                属于域名(也可使用IP地址作为域名使用)

8080                         属于端口 (不是一个URL必须的部分,一般省略端口部分,采用默认端口。)

/news/                       属于虚拟目录 (从域名后的第一个“/”开始到最后一个“/”为止。虚拟目录不是一个URL必须的部分)

index.asp                    文件名(从域名后的最后一个“/”至“?”(或'#'或至结束)为止,是文件名部分。)

boardID=5&ID=24618&page=1    参数(从“?”开始到'#'(或至结束)为止之间的部分为参数部分,又称搜索部分、查询部分。参数间用“&”作为分隔符)

r_70732412                   锚(HTTP请求不包括锚部分,从'#'开始到最后,都是锚部分。)

http://www.baidu.com:8080/

'/' 前相同则不会产生跨域,'/' 前任意位置不同则跨域

跨域问题源于浏览器的 同源策略,是浏览器发出的拦截

项目中解决跨域的方法

一. 项目本地开发(前端解决跨域)

  1. 利用浏览器自身设置解决跨域 (一般不要用)

    chrome浏览器

    方法1:
    先关闭谷歌浏览器,然后再cmd里输入

    C:\Users\15379\AppData\Local\Google\Chrome\Application\Chrome.exe --disable-web-security --user-data-dir
    其中C:\Users\15379\AppData\Local\Google\Chrome\Application\Chrome.exe 为浏览器的安装路径。

    方法2:
    首先安装完谷歌浏览器 => 右键属性=> 创建快捷方式 => 创建谷歌浏览器的快捷方式 =>
    右键属性 => q切换到快捷方式页 => 在目标后面增加如下的启动参数:
    --user-data-dir="c:\ChromeDebug" --test-type --disable-web-security => 点击确定保存,大功告成

    注:

    1. 每个--前面都有一个空格。
    2. disable-web-security需要搭配user-data-dir参数一起设置。

    firefox火狐浏览器:

    打开一个空白页,在地址栏里输入about:config,勾选我以了解此风险

    搜索 security.fileuri.strict_origin_policy,将true改为false
    搜索 signed.applets.codebase_principal_support 将false改为true

    如果搜不到的话,可以新增,注意都是布尔类型的,随便在那一条上面右键就可以新
    增,完成后重启火狐浏览器,如果还不行就重启电脑就可以了

2. 在config文件的index中设置代理(模拟nginx反向代理)(常用)
// 1. 配置 baseURL
axios.defaults.baseURL = '/api'  或 在接口url前加 '/api'

//2. 配置 proxyTable
proxyTable: {
  '/api': {
        target: 'http://71.158.4.120:8080/',   //这里配置的是 请求接口的域名
        // secure: false,  // https时必加
        changeOrigin: true,   // 如果接口跨域,需要进行这个参数配置
        pathRewrite: {
        // 这里理解成用'/api'代替target里面的地址
          '^/api': '/' 
        }
    }
}

页面原接口:http://71.158.4.120:8080/login
页面解决跨域后:http://localhost:8080/api/login

  1. postMessage 跨域通讯(不常用)
//1.发送数据

Window.postMessage('data to send',targetOrigin)

//2.通讯触发的监听方法

window.addEventListener("message", (e) => {
    var origin = event.origin || event.originalEvent.origin; 
      if (origin !== "http://example.org:8080")
        return;
}
, false);

4.JSONP (只支持get请求)

5.iframe+form实现post请求跨域(知道就行吧)

6.WebSocket

二. 项目本地与线上跨域(后端解决跨域)

1.通过nginx反向代理解决 (常用)

2.CORS解决跨域 (常用)

后端修改请求头

header(‘Access-Control-Allow-Origin:*’)                  允许访问的网址

header(‘Access-Control-Allow-Method:POST,GET’)           允许访问的方式

相关文章

  • 跨域访问

    参考文献:jsonp解决跨域问题 . cors解决跨域问题 . (java+前端小白)第一次碰到跨域问题,小伙伴们...

  • 前端踩过的坑

    关于前端 跨域问题 大概问题 1,前端无须处理,需要在后台配置 niginx的配置 处理跨域的域名 关于布局上 ...

  • django跨域配置

    前言——跨域请求 前端对Cross-Origin Resource Sharing 问题(CORS,中文又称'跨域...

  • Day 100/100 Vue3.0 & Vue-cli4.5

    写在前端的话 除了后端解决跨域问题前端可以解决吗?答案是可以~~~ (一)问题 遇到了跨域问题,本地的URL是 h...

  • [mark]九种跨域方式实现原理

    前端如何使用proxyTable和nginx解决跨域问题 前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及...

  • 新增-后端跨域

    前端程序 后端程序 现在请求无法,到达需要解决跨域问题 每个servlet单独做跨域设置 跨域过滤器

  • webpack4基本使用(四)-跨域-环境变量

    16 wepack跨域问题 通过前端代理实现跨域 如果前端只是模拟数据时,我们可以使用devServer 自带的e...

  • 关于设置env等环境变量的思考

    1、如何处理跨域后台处理跨域前端处理跨域浏览器处理跨域 前端本地处理跨域:代理线上跨域的处理方式:Nginx反向代...

  • 跨域

    博客 说说跨域那些事儿 不要再问我跨域的问题了 前端常见跨域解决方案(全) 同源策略 JSONP(填充式JSON)...

  • Javascript跨域整理

    在前端的JS请求中,跨域的问题经常存在,根据不同的实现原理,常见的跨域的方法如下: 一:前端的方式 1:在前端页面...

网友评论

    本文标题:前端跨域问题

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