博客
关于我
跨域是什么和跨域解决方案
阅读量:290 次
发布时间:2019-03-01

本文共 2403 字,大约阅读时间需要 8 分钟。

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;

下面我用express框架来进行演示:

server.js:

const express = require('express')const app = express()app.use(express.static(__dirname))app.listen(90)const app2 = express()//91端口的服务   返回数据app2.get("/",function(req,res){    res.send("你好")})app2.listen(91)

index.html:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title></head><body>    <h1>大家好</h1></body><script src="https://unpkg.com/axios/dist/axios.min.js"></script><script>    axios.get('http://localhost:91/').then(res=>console.log(res))</script></html>
90端口显示的是我们的index.html页面,91端口是我们的数据,现在我想通过axios从90端口拿到91端口的数据,结果浏览器告诉我们发生了跨域(端口不同)

kuayu
这时候我们要想解决办法:

CORS

修改响应头

浏览器告诉我们没有 Access-Control-Allow-Origin请求头,那么我们就加一个嘛。
const express = require("express");const app = express();app.use(express.static(__dirname));app.listen(90);const app2 = express();//91端口的服务   返回数据app2.get("/", function (req, res) {  res.header("Access-Control-Allow-Origin", "*");  res.send("你好");});app2.listen(91);

这样我们就可以拿到数据

jieguo

JSONP

想用jsonp,我们就要了解一个现象:我们通过href或者src去请求下来的脚本或者css文件或者image再或者视频文件等都不存在跨域问题,只有通过ajax请求下来的数据才会发生跨域问题
思路:把要发送的数据放在函数中,在客户端通过调用函数来获得数据。来看代码:

server.js

const express = require("express");const app = express();app.use(express.static(__dirname));app.listen(90);const app2 = express();//91端口的服务   返回数据app2.get("/", function (req, res) {   var name = req.query.callback;  res.send(name+'("hhh")');});app2.listen(91);

index.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title></head><body>    <h1>大家好</h1></body><script>    function f(data) {        console.log(data)    }</script><script src="http://localhost:91?callback=f"></script></html>

这里边 req.query.callback,req.query.内容,这个内容就是http://localhost:91? 后边的内容。比如我们在服务端传的是callback,那么我们接受时就用?callback=aa(这个名字就随便了)。TIPS:我们引入时src要在函数的下边。

nginx

这个是我做的uni-app项目部署到我的服务器上时,遇到的问题。我只想把前端放到我的服务器上,后端部署到了另外一个项目,这就涉及到了跨域。
// api请求前缀	// #ifdef H5	webUrl:'/api',

我使用了nginx来做代理:

  location /api {            proxy_pass https:/xxx.xxx.cn/api/v1;        }

当我们请求的路径为/api时,我们会让设置的https:/xxx.xxx.cn/api/v1来代替请求。

转载地址:http://eflo.baihongyu.com/

你可能感兴趣的文章
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
nginx配置全解
查看>>
Nginx配置参数中文说明
查看>>
Nginx配置后台网关映射路径
查看>>
nginx配置域名和ip同时访问、开放多端口
查看>>
Nginx配置多个不同端口服务共用80端口
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>