当前位置: 首页 > news >正文

跨域

跨域的简单小demo

这是一个关于跨域的简单demo集合,在demo里面会加上自己的理解并添加相应的注释,尽量以简单的demo介绍跨域的方法,适合入门学习跨域的。所有demo都是使用基于nodeJs的Web开发框架Express,需要一点点nodeJS的知识,如果不会nodeJS也没关系,注释里面会详细解释说明。

如果还有其他没提及的跨域方法,欢迎PR,谢谢! 如果要收藏的话,欢迎star。 不定期更新教程,欢迎follow订阅。

demo介绍

用node的web框架express在3000端口和3001端口分别开启一个静态服务器,在两个端口间进行跨域传输数据。
配置文件解释

.gitattributes配置文件,可以改变这个github项目的语言标签
.gitignore配置文件,设置使用git上传时忽略哪些文件
package.json配置文件,主要是为了npm install而存在,安装express等模块
readme.md配置文件,在github上面展示说明项目,也就是现在正在看的文档

Set Up

运行环境

node.js 全局安装
npm 全局安装

运行步骤

git clone git@github.com:FatDong1/cross-domain
cross-domain目录下npm install,下载项目所需的依赖
进入对应的demo目录,①node serverRes.js ②重新开一个dos窗口 ③node serverReq.js
或者在对应的demo目录下,dos窗口输入run.bat,直接一步完成上面的①②③
  1. CORS跨域

项目运行起来之后,

请求数据页面地址: http://localhost:3000
查看数据: http://localhost:3001
  1. JSONP跨域

项目运行起来后,

请求页面: http://localhost:3000
响应页面为 http://localhost:3001
  1. postMessage跨域

这是html5的新API,适用于不同窗口iframe之间的跨域

项目运行地址: http://localhost:3000
  1. window.name跨域

在 http://localhost:3000/a.html 使用js动态生成一个隐藏的iframe,设置src属性为' http://localhost:3001/c.html ',等这个iframe加载完之后,重新设置src属性为同源的地址' http://localhost:3000/b.html '(b.html是一个空的html文件),现在iframe与a.html同源,那就可以访问window.name属性,而name值没有变化,因为window.name属性在不同的页面(甚至不同域名)加载后依旧存在。

项目运行地址: http://localhost:3000/a.html
  1. location.hash跨域

在 http://localhost:3000/a.html 使用js动态生成一个隐藏的iframe,设置src属性为' http://localhost:3001/c.html#getdata ',在c.html判断hash值是否为'#getdata',如果为'#getdata',则在当前的iframe(c.html)中再生成一个隐藏的iframe,其src属性指向' http://localhost:3000/b.html ',因为a.html和b.html同源,所以可以在b.html里面修改a.html的hash值,这样a.html就可以通过获取自身的hash值得到数据

项目运行地址: http://localhost:3000/a.html
  1. document.domain跨域

document.domain设置成自身或更高一级的父域,且主域必须相同。
注意!!

这是挂在我自己腾讯云域名(xuhaodong.cn)上的demo,所以抱歉这个demo无法在本地运行。不过我只是把demo放到了云服务器上,代码还是一样的,没有修改过。

线上访问地址: http://a.xuhaodong.cn/a.html

如果要在本地运行的话,需要搭建一个本地web服务器, 参考链接:https://github.com/web2hack/p...

  1. 后端设置代理proxy跨域

因为JS同源策略是浏览器的安全策略,所以在浏览器客户端不能跨域访问,而服务器端调用HTTP接口只是使用HTTP协议,不会执行JS脚本,不需要同源策略,也就没有跨越问题。简单地说,就是浏览器不能跨域,后台服务器可以跨域。

demo1 通过使用http-proxy-middleware插件设置后端的代理,在 http://localhost:3000 运行

demo2 不使用插件配置代理,直接使用http模块发出请求, 在 http://localhost:3000 运行
  1. WebSocket跨域

WebSocket是一种通信协议,使用ws://(非加密)和wss://(加密)作为协议前缀。该协议不实行同源政策,只要服务器支持,就可以通过它进行跨源通信。

项目运行地址: http://localhost:3000/a.html


摘自 Github FatDong1(https://github.com/FatDong1/c...)

相关文章:

  • [转载] 考试经验——2011下半年信息系统项目管理师论文52分者谈论文写作经验...
  • 『TensorFlow』TFR数据预处理探究以及框架搭建
  • shell开发基础:准备100万条测试数据在MYSQL中
  • 十个生成模型(GANs)的最佳案例和原理 | 代码+论文
  • Linux中如何让进程(或正在运行的程序)到后台运行?[zz]
  • Spring Boot快速入门(一):Hello Spring Boot
  • 一致性hash
  • LabView和DLL中的参数问题
  • Oracle高级复制
  • 浅谈回归(二)——Regression 之历史错误翻译
  • JS判断浏览器类型和屏幕分辨率来调用不同的CSS样式
  • CentOS 6.7 如何启用中文输入法
  • Citrix XenDesktop 引发的学案(四)-与“您的虚拟桌面”之间的连接失败,状态(1030)...
  • 云计算成朝阳产业,未来发展已成趋势
  • js去掉html标签和去掉字符串文本的所有的空格
  • [译] React v16.8: 含有Hooks的版本
  • Elasticsearch 参考指南(升级前重新索引)
  • JAVA 学习IO流
  • Java超时控制的实现
  • Java基本数据类型之Number
  • k8s如何管理Pod
  • PV统计优化设计
  • select2 取值 遍历 设置默认值
  • vue 个人积累(使用工具,组件)
  • 服务器之间,相同帐号,实现免密钥登录
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于List、List?、ListObject的区别
  • 回顾 Swift 多平台移植进度 #2
  • 京东美团研发面经
  • 推荐一个React的管理后台框架
  • 微信小程序:实现悬浮返回和分享按钮
  • ​Python 3 新特性:类型注解
  • ​渐进式Web应用PWA的未来
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2015)JS ES6 必知的十个 特性
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (SpringBoot)第二章:Spring创建和使用
  • (二)Linux——Linux常用指令
  • (力扣题库)跳跃游戏II(c++)
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)setTimeout 和 setInterval 的区别
  • (转)关于pipe()的详细解析
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *1 计算机基础和操作系统基础及几大协议
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net 调用php,php 调用.net com组件 --
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET开发人员必知的八个网站
  • .NET面试题(二)
  • .NET项目中存在多个web.config文件时的加载顺序
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [.NET 即时通信SignalR] 认识SignalR (一)