Vue跨域方式

**

1.axios

**
1.在cmd窗口输入以下命令安装到项目目录
cd 项目目录
cnpm install axios -S

2.在项目的main.js中挂载

import axios from 'axios'
Vue.prototype.$http=axios;
//过载axios到vue的原型公共方法上
//所有的vue的实例都将拥有$http

3.get方式
get方式

this.$http.get(url?page=1)
this.$http.get(url,params:{page:2})  //params传参

4.post方式

this.$http.post(url,"k=v&k2=v2",{
	"Content-Type":"application/x-www.form-urlencoded"
})

4.file上传文件

<template>
	<div>
	<input type="file" ref ="file">
</div>
</template>
<script>
	export default {
	let file = this.$refs.file[0]; 
	let data = new FormData().append("file",file);
	 let configs = {
         headers:{'Content-Type':'multipart/form-data'}
      }
      this.$http({
        method:'post',
        url:'/ajax/file.php',
        data,
        configs
      })
}		
</script>

5.全局配置
在mane.js中

axios.defaults.baseURL = "http://xxx.com";
// 配置基础url
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// 配置post编码
// axios.defaults.withCredentials = true;
//跨域请求的全局凭证

全局配置完后

$http.get("htttp://www.xxx.com/list.php")
$http.get("/list.php")
效果一样

jsonp跨域

1.在需要使用的组件中导入jsonp

import jsonp from '../assets/js/jsonp'

2.使用
jsonp(“url”,{},
(err,data)=>{
…;
}
)

代理方式跨域

在项目根目录下创建vue.config.js,内容如下

module.exports = {
    devServer: {
        open: true, //浏览器自动打开页面
        host: "localhost", //本地服务器访问的路径
        port: 8080, //本地服务器访问的端口
        proxy: {
            '/BtCApi': {
                //你要跨域的域名(包含host、端口号,切记:一定要带上http头);
                //同一个域名只能设置一次跨域,否则重复报错!
                target: 'http://m.gjw.com',  //你要跨域的域名
                changeOrigin: true, //是否跨域,设置为true;(必须)
            },
            // 当用户去访问 http://localhost:8080/feiyan/xxx的时候
            // 咱们的本地服务器器就会去访问 https://iflow-api.uc.cn/feiyan/xxx
            // 让把拿到的数据返回给用户(ajax请求)
            //  这种方法让我们能在开发环境请求下,跨域访问数据。
        }
    },

    publicPath: './'
}
<think>嗯,用户想解决帆软报表和Vue项目之间的嵌套问题。首先,我需要回忆一下问题的常见原因和解决方案。根据他们提供的引用,通常是由于浏览器同源策略导致的,当iframe加载不同名的内容时,会被阻止访问。 首先,引用[1]提到帆软报表服务器和项目不在同一个,所以问题出现。解决方案可能涉及设置CORS头,比如Access-Control-Allow-Origin。然后引用[2]和[5]提到了使用postMessage方法进行Vue和iframe之间的通信,这应该是一个关键点,因为postMessage可以传递消息。需要详细说明如何在Vue中监听消息,以及帆软报表如何发送消息。 另外,引用[3]和[4]指出可能涉及X-Frame-Options或Nginx配置的问题。比如,X-Frame-Options设置为SAMEORIGIN会阻止iframe加载,所以需要检查服务器是否设置了这个头,并修改为ALLOW-FROM或者移除。同时,Nginx反向代理可能用来将不同名的请求代理到同一名下,从而避免。这需要配置Nginx的代理设置,比如添加CORS相关的响应头,或者代理帆软报表的请求到Vue项目的同一名下。 然后,可能的解决方案步骤应该是:1. 配置帆软服务器允许,设置CORS头;2. 使用postMessage进行通信;3. 调整X-Frame-Options;4. 使用Nginx反向代理统一名。另外,可能需要处理Cookie的SameSite属性,如果涉及认证的话,可能需要设置为None并Secure。 需要确保每一步都详细说明,比如如何设置响应头,如何编写Vue中的postMessage代码,如何配置Nginx等。还要注意引用对应的参考资料,比如引用[1]关于CORS设置,引用[2]和[5]关于postMessage的使用,引用[3]和[4]关于X-Frame-Options和Nginx配置。 可能还需要考虑安全性问题,比如确保postMessage的origin验证,避免恶意网站拦截消息。同时,Nginx配置的代理是否会影响现有服务,需要评估。此外,如果帆软报表服务器无法修改,可能需要反向代理作为解决方案。 总结下来,解决方案应该分步骤,涵盖服务器配置、前端通信、可能的代理设置,并且每个步骤都要有具体的操作方法,参考用户提供的引用内容,确保回答准确可靠。</think>### 分步解决方案:帆软与Vue嵌套问题 #### 1. **配置帆软服务器允许访问** - **添加CORS响应头** 在帆软报表服务器的配置中(如Tomcat或Nginx),添加以下响应头解决限制: ```nginx add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; ``` 若需限制特定名,将`*`替换为Vue项目名(如`http://localhost:8080`)[^1][^3]。 - **调整X-Frame-Options** 若页面提示`X-Frame-Options`阻止加载,需修改服务器配置: ```nginx add_header X-Frame-Options "ALLOW-FROM http://your-vue-domain.com"; # 或直接禁用(不推荐) # add_header X-Frame-Options ""; ``` 确保该配置与浏览器控制台报错一致[^4]。 #### 2. **Vue与帆软iframe间通信** - **使用`postMessage`传递数据** 在Vue中监听iframe消息并发送指令: ```javascript // Vue组件内监听消息 mounted() { window.addEventListener('message', (e) => { if (e.origin !== 'http://fanruan-server.com') return; // 验证来源 console.log('收到帆软数据:', e.data); }); }, methods: { sendToFanruan() { const iframe = document.getElementById('fanruan-iframe'); iframe.contentWindow.postMessage({ action: 'refresh' }, 'http://fanruan-server.com'); } } ``` 帆软报表页面需同步实现消息接收与响应逻辑[^2][^5]。 #### 3. **通过Nginx反向代理统一名** - **代理帆软请求至同名下** 修改Nginx配置,将帆软接口代理到Vue项目的名路径下: ```nginx location /fanruan/ { proxy_pass http://fanruan-server.com/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 可选:添加CORS头 add_header Access-Control-Allow-Origin $http_origin; } ``` 此时iframe的URL可改为同源路径(如`/fanruan/report123`)[^3]。 #### 4. **处理Cookie/Session问题** - **设置`SameSite`和`Secure`属性** 若涉及登录态,需修改Cookie属性: ```nginx # 帆软服务器配置 add_header Set-Cookie "sessionid=xxx; SameSite=None; Secure"; ``` 确保HTTPS环境且浏览器支持`SameSite=None`[^4]。 #### 5. **验证与调试** - 使用浏览器开发者工具检查: - 网络请求中`Response Headers`是否包含正确CORS头。 - 控制台是否报错`X-Frame-Options`或拦截。 - `postMessage`通信是否触发并安全过滤来源[^3]。 --- ### 相关问题 1. **如何避免`postMessage`通信被恶意网站劫持?** (需严格校验`event.origin`并限制操作权限) 2. **反向代理后帆软报表资源加载异常怎么办?** (检查代理路径是否完整,如静态资源路径需重写) 3. **HTTP与HTTPS混合环境如何适配?** (强制统一为HTTPS,避免协议不一致触发安全限制) --- ### 关键引用 - CORS配置与X-Frame-Options调整[^3] - `postMessage`实现通信[^2][^5] - Nginx反向代理与路径代理[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值