博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web前端_跨域问题方法总结
阅读量:4681 次
发布时间:2019-06-09

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

文章内容基于个人总结,如有问题欢迎评论。

1.何为跨域

关于网站的跨域问题,简单的说就是不同协议(如http|https)不同域名(如www.a.com|www.b.com|a.b.com)或者不同端口号(:3000|3001)之间的请求访问,都会产生同源限制导致请求失败。

2.解决方案

下面展示5种解决方案(包含代码及部分思路)

 1) jsonp 根据script标签请求不会产生同源限制的原理 (局限在于只能发送get请求,及请求长度有限制)

客户端:

View Code

服务器端:

router.all('/jsonp', function(req, res, next) {    var callback = req.query.jsonp;    var obj = {name: 'tom', hobby: [1,2,3]};    res.send(callback ? callback + '(' + JSON.stringify(obj) + ')' : 'jsonp response');});
View Code

思路: 在客户端先定义好callback方法,将方法作为url参数传到服务器端,服务器端返回方法调用并回传参数让客户端方法处理。

 2) cors跨域 设置Access-Control-Allow-[Origin|Methods|Headers]等参数开启跨域许可

客户端:

View Code

服务器端:

router.all('/cors', function(req, res, next) {  res.header("Access-Control-Allow-Origin", "*");  // 最简设置  res.json('cors response');});
View Code

  3) iframe + window.name

客户端:

View Code

服务器端:

router.all('/', function (req, res, next) {    res.json('api response');});
View Code

思路: 比较重要的一步是iframe页和请求页需要设置相同的domain, 即代码中执行的document.domain = 'localhost'这一段。

 4) iframe + postMessage

客户端:

View Code

思路: 这里win.postMessage是给iframe发送消息,直接的postMessage是给自己发送消息。如果在iframe页面想给本页面发消息,则需要用window.parent.postMessage发送消息。

 5) nginx反向代理

 这个方式的实现就是修改下nginx配置,如

server {    listen 3001;    server_name localhost;    location /api {        proxy_pass http://127.0.0.1:3000/api;    }}
View Code

 通过这种设置就把本地3001端口的请求映射到3000端口去,然后就可以正常的发送之前同源限制的api接口了, 如客户端代码:

View Code

3. 总结

基本的几种方式就是这样,当然都是一些抛砖引玉的小实现思路,具体问题还是得具体分析的。然后,一些代码用到了像es6语法或者fetch api,有看不懂的。。还是补补课吧,毕竟还是比较通用流行的了。

转载于:https://www.cnblogs.com/easyToCode/p/4978735.html

你可能感兴趣的文章
20145302张薇《Java程序设计》第八周学习总结
查看>>
WebApi2官网学习记录---单元测试
查看>>
Backbone.js源码分析(珍藏版)
查看>>
完全背包问题
查看>>
滴水穿石-09多线程
查看>>
[树形dp] Jzoj P1162 贪吃的九头龙
查看>>
Jquery 相关笔记
查看>>
利用表单发送邮件
查看>>
计算机一族必喝的四杯茶
查看>>
linux 下的ssh免密登陆设置
查看>>
【Hibernate 7】浅谈Hibernate的缓存机制
查看>>
润乾报表 动态控制文本的显示
查看>>
[oracle] 如何使用myBatis在数据库中插入数据并返回主键
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
UML-画类图与交互图的顺序
查看>>
杭电1060
查看>>