跨域

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

解决方案:

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. 使用nacos作为配置中心统一管理配置

    基础环境 引入所需依赖包 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>s ...

  2. PAT A1024题解——高精度大数相加模板

    PAT:A1024 Palindromic Number A number that will be the same when it is written forwards or backwards ...

  3. elasticsearch学习(1)

    下载解压,elasticsearch.bat启动 elasticsearch目录: bin 启动文件config 配置文件 log4j2 日志配置文件 jvm.options java虚拟机相关的配置 ...

  4. 最难忘的一次bug:谢谢实习时候爱学习的自己

    前言 时间的车轮一直向前不停,试图在时光洪流中碾碎一些久远的记忆.虽然记忆中的人离我越来越远,但是故事却越来越深刻. 当在博客园看到这次的正文题目是"最难忘的bug",脑海里瞬间浮 ...

  5. 自助分析工具Power BI的简介和应用

    作为一名资深的IT技术人,特别喜欢学习和尝试新技术,也勇于接受挑战,勇于创新,不仅能发现问题,更要解决实际的疑难杂症,闲暇时光也乐于分享一些技术干货.记得2017年的时候,华章出版社的编辑通过网上找到 ...

  6. 深入浅出KMP

    前言:曾经有次在阿里的面试中遇到这个基础的问题,当时知道有这么回事,可是时间久了便 想不起来,可能是不怎么用到,基本调用库什么的,还有个是理解不深刻,不能得到show me the code 的程度, ...

  7. PDFium 渲染

    PDFium 是 Chromium 的 PDF 渲染引擎,许可协议为 BSD 3-Clause.不同于 Mozilla 基于 HTML5 的 PDF.js,PDFium 是基于 Foxit Softw ...

  8. 巩固javaweb第八天

    巩固内容: HTML 段落 HTML 可以将文档分割为若干段落. HTML 段落 段落是通过 <p> 标签定义的. 实例 <p>这是一个段落 </p> <p& ...

  9. Shell $()、${}、$[]、$(())

    目录 Shell中的 $().${}.$[].$(()) $().${} 替换 ${} 变量内容的替换.删除.取代 数组 $[].$(()) 运算符 Shell中的 $().${}.$[].$(()) ...

  10. 日常Java测试第二段 2021/11/12

    第二阶段 package word_show; import java.io.*;import java.util.*;import java.util.Map.Entry; public class ...