跨域

浏览器访问非同源的网址时,会被限制访问,出现跨域问题.

解决方案:

1.response 添加 header(CORS)

2.JSONP 方式

3.全局对象+iframe

(1)document.domain+iframe的设置  (只有在主域相同的时候才能使用该方法):

设置document.domain值相同即可访问

(2)HTML5的postMessage(window.postMessage):

监听message事件,获取data

       (3)使用window.name来进行跨域:

源页面的数据赋值给window.name、修改src使其与为请求页面同源页(window.name不变)、请求页拿到同源页的window.name(数据)

4.代理(proxy)

原理

服务器访问服务器没有跨域问题.所以,我们的做法是利用中间的代理浏览器向目标浏览器发请求.

代理方式配置

1.http-proxy-middleware

如下:利用node.js里面的express框架创建了一个服务器,并向目标服务器发送请求

 1 // 引用依赖
2 var express = require('express');
3 var proxy = require('http-proxy-middleware');
4
5 // proxy 中间件的选择项
6 var options = {
7 target: 'http://www.example.org', // 目标服务器 host
8 changeOrigin: true, // 默认false,是否需要改变原始主机头为目标URL
9 ws: true, // 是否代理websockets
10 pathRewrite: {
11 '^/api/old-path' : '/api/new-path', // 重写请求,比如我们源访问的是api/old-path,那么请求会被解析为/api/new-path
12 '^/api/remove/path' : '/path' // 同上
13 },
14 router: {
15 // 如果请求主机 == 'dev.localhost:3000',
16 // 重写目标服务器 'http://www.example.org' 为 'http://localhost:8000'
17 'dev.localhost:3000' : 'http://localhost:8000'
18 }
19 };
20
21 // 创建代理
22 var exampleProxy = proxy(options);
23
24 // 使用代理
25 var app = express();
26 app.use('/api', exampleProxy);//注意,这里的"/api"不是必须写"/api"的,而是根据你请求的路径写的
27 app.listen(3000);

2.webpack或者vue-cli之类的devSever

同样是利用node.js创建一个本地服务器进行代理,只是配置方式有些微不同,更为简洁.以webpack.config.js的配置为例


devServer:{

proxyTable: {//高版本的是"proxy"
// 当你请求是以/api开头的接口,则我帮你代理访问到https://api.douban.com
'/api/*': {
target: 'https://api.douban.com', // 你接口的域名
secure: false, // 如果是https接口,需要配置这个参数
changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
        pathRewrite: {
'^/api/old-path' : '/api/new-path', // 重写请求,比如我们源访问的是api/old-path,那么请求会被解析为/api/new-path
'^/api/remove/path' : '/path' // 同上
}
  } }
}

  3.nginx代理

简而言之就是用c语言创建一个服务器,和上面两张方式不一样.

 

4.whistle等调试工具

也是基于node实现的,功能复杂,操作简单.

总结:

  代理跨域的主要方式是利用服务器请求服务器的方式避过跨域问题来实现的.大概的流程:浏览器===>代理服务器===>目标服务器.

主要手段两种:1.项目中的代码实现,利用node创建服务器.因为有代码在,所以就算不在本机上运行项目也可以实现跨域.

2.工具.以上提到的工具都是在本地手动创建一个服务器,然后再运行代码.所以当代码不在本地运行时还是会跨域,要重新配置.工具跨域更适合调试.

proxy跨域的更多相关文章

  1. proxy 跨域配置, 针对有axios的baseURL

    1.首先主要的config文件下的index.js中的proxytable配置 proxyTable:{ '/proxy': { target:'http://192.168.2.141:8080', ...

  2. 前端本地proxy跨域代理配置

    等了好久的接口,总算拿到了,结果却发现用本地localhost:9712去请求接口的时候,出现了跨域错误,而这个时候我们就需要进行下跨域配置了. 首先,找到项目中名为webpack.config.js ...

  3. devServer之proxy跨域

    配置 注意:修改之后要重新运行一遍项目才行 devServer:{ contentBase:'./', proxy:{ // 当你请求是以/api开头的时候,则我帮你代理访问到http://local ...

  4. Webpack代理proxy配置,解决本地跨域调试问题,同时允许绑定host域名调试

    Webpack代理proxy配置,解决本地跨域调试问题,同时允许绑定host域名调试 会撸码的小马 关注 2018.05.29 17:30* 字数 212 阅读 1488评论 0喜欢 2 接到上一章, ...

  5. Webpack devServer中的 proxy 实现跨域

    Webpack dev server使用http-proxy解决跨域问题 文档资料 webpack关于webpack-dev-server开启proxy的官方介绍Vue-cli proxyTable ...

  6. vue cli+axios踩坑记录+拦截器使用,代理跨域proxy(更新)

    16319 1.首先axios不支持vue.use()方式声明使用,看了所有近乎相同的axios文档都没有提到这一点建议方式 在main.js中如下声明使用 import axios from 'ax ...

  7. vue cli+axios踩坑记录+拦截器使用,代理跨域proxy

    1.首先axios不支持vue.use()方式声明使用,看了所有近乎相同的axios文档都没有提到这一点 建议方式 在main.js中如下声明使用 import axios from 'axios'; ...

  8. axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器

    1.小小的提一下vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一道 ...

  9. 前后端分离跨域 关于前后端分离开发环境下的跨域访问问题(angular proxy=>nginx )

    前后端分离后遇到了跨域访问的问题: angular1中使用proxy很麻烦,最后还是失败结束:最后总结3种方法如下: 本人使用的第一种方法,只是开发环境下使用很方便! 1:禁掉谷歌的安全策略(Turn ...

随机推荐

  1. 力扣 - 剑指 Offer 12. 矩阵中的路径

    题目 剑指 Offer 12. 矩阵中的路径 思路1(回溯.DFS) 这题可以使用回溯+递归来解决,思路如下: 将二维数组的每一个元素都作为起点进行回溯查找 每次查找的时候,都有四个方向,但是上一个方 ...

  2. 第09章 MySQL子查询

    第09章 MySQL子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入. SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要 ...

  3. I.MX启动方式和头部

    1. 启动方式 2. 头部信息 编译好的bin文件烧写到SD卡中,需要加一些头部文件,才可以执行. Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息 ...

  4. CentOS7部署ceph

    CEPH 简介 不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph ...

  5. [Noip 2012]同余方程(线性同余方程)

    我们先放题面-- RT就是求一个线性同余方程ax≡1(mod b)的最小正整数解 我们可以将这个同于方程转换成这个方程比较好理解 ax=1+bn(n为整数 我们再进行一个移项变为ax-bn=1 我们设 ...

  6. Atcoder Beginner Contest 164 E Two Currencies(拆点+最短路)

    题目链接 题意:有 \(n\) 个城市,它们由 \(m\) 条双向道路连接,保证它们能够彼此到达.第 \(i\) 条道路连接 \(u_i,v_i\),需要花费 \(x_i\) 个银币,耗费 \(t_i ...

  7. 洛谷 P6788 - 「EZEC-3」四月樱花(整除分块)

    题面传送门 题意: 求 \[\prod\limits_{x=1}^n\prod\limits_{y|x}\frac{y^{d(y)}}{\prod\limits_{z|y}z+1} \pmod{p} ...

  8. Unique Path AGC 038 D

    Unique Path AGC 038 D 考虑如果两个点之间只能有一个边它们就把它们缩起来,那么最后缩起来的每一块都只能是一棵树. 如果两个点之间必须不止一个边,并且在一个连通块,显然无解. 首先把 ...

  9. 关于GCC编译

    GCC参数详解 gcc是gnu compiler collection 的简称,他包含了多种语言的编译器,如C, C++, Objective-C, Objective-C++, Java, Fort ...

  10. 短序列组装Sequence Assembly(转载)

    转载:http://blog.sina.com.cn/s/blog_4af3f0d20100fq5i.html 短序列组装(Sequence assembly)几乎是近年来next-generatio ...