Web 前端必备的各种跨域方式汇总

跨域方式汇总

同源策略

协议相同 + 域名相同 + 端口相同

https://www.xgqfrms.xyz/index.html

https://www.xgqfrms.xyz:80/index.html

协议是 https://

域名是 www.xgqfrms.xyz

端口是80(默认端口可以省略不写)

demos

https://www.xgqfrms.xyz/blogs/index.html

同源(URL path 不同)

http://www.xgqfrms.xyz/blogs/index.html

同源(URL protocol 不同)

https://cdn.xgqfrms.xyz/index.html

不同源(URL domain 不同)

https://www.xgqfrms.xyz:8090/index.html

不同源(URL port 不同)

https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

CORS请求

  1. 简单请求 (simple request)
  2. 非简单请求 (not-so-simple request)

简单请求

  1. 请求方法是以下三种方法之一:

HEAD

GET

POST

  1. HTTP的头信息不超出以下几种字段:

Accept

Accept-Language

Content-Language

Last-Event-ID

Content-Type:

application/x-www-form-urlencoded

multipart/form-data

text/plain

是这三个值之一

CORS 预检请求

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests

https://fetch.spec.whatwg.org/#cors-safelisted-request-header

CORS


SRI


CSP


Window.postMessage()

targetWindow.postMessage(message, targetOrigin, [transfer]);

https://caniuse.com/#feat=mdn-api_window_postmessage

https://caniuse.com/#search=postMessage

https://developer.mozilla.org/en-US/docs/Web/API/Client/postMessage

client.postMessage(message[, transfer]);
client.postMessage(message[, { transfer }]);

hash & hashchange


iframe


img


script


JSONP

JSONP 原理

JSONP (JSON with Padding)

  1. server using passed callback wrap the JSON data;

  2. client using script tag bypassed Cross-Origin limit;

  3. after script URL loaded, execute the global callback function

https://cdn.xgqfrms.xyz/jsonp/users.json?callback=jsonpGlobalCallback

// https://cdn.xgqfrms.xyz/jsonp/users.json?callback=jsonpGlobalCallback

jsonpGlobalCallback([
{
"key":1,
"uid": 1024,
"uname":"xgqfrms",
},
{
"key":2,
"uid": 2048,
"uname":"webggeeker",
}
]);

共享 cookies

规避同源政策

// 设置Cookie的时候,指定Cookie的所属域名为一级域名
Set-Cookie: key=value; domain=.example.com; path=/

WebSocket

Node.js middleware Proxy

中间件代理跨域

Nginx 反向代理

设置 proxy_cookie_domain

Canvas Image

canvas 图片getImageData 跨域???

应用场景

  1. 第三方接入

  2. 埋点

  3. 页面间通信

refs

http://www.ruanyifeng.com/blog/2016/04/cors.html

http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html

https://juejin.im/post/6844903767226351623

https://juejin.im/post/6856353219036217357

https://segmentfault.com/a/1190000015597029

https://segmentfault.com/a/1190000011145364

https://www.zhangxinxu.com/wordpress/2018/02/crossorigin-canvas-getimagedata-cors/

https://developer.mozilla.org/en-US/docs/Web



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


Web 前端必备的各种跨域方式汇总的更多相关文章

  1. 前端最常用的跨域方式--jsonp

    jsonp通过动态创建script标签的方式来实现跨域通信.原理是浏览器允许html标签在不同的域名下加载资源. <script> var script = document.create ...

  2. Web Api之Cors跨域以及其他跨域方式(三)

    我们知道ajax不能跨域访问,但是有时我们确实需要跨域访问获取数据,所以JSONP就此诞生了,其本质使用的是Script标签,除JSONP以外还有另外实现跨域方式 一.手动实现JSONP跨域 1.首先 ...

  3. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十二 || 三种跨域方式比较,DTOs(数据传输对象)初探

    更新反馈 1.博友@落幕残情童鞋说到了,Nginx反向代理实现跨域,因为我目前还没有使用到,给忽略了,这次记录下,为下次补充.此坑已填 2.提示:跨域的姊妹篇——<三十三║ ⅖ 种方法实现完美跨 ...

  4. 基于JWT的web api身份验证及跨域调用实践

    随着多终端的出现,越来越多的站点通过web api restful的形式对外提供服务,很多网站也采用了前后端分离模式进行开发,因而在身份验证的方式上可能与传统的基于cookie的Session Id的 ...

  5. Api之Cors跨域以及其他跨域方式

    Web Api之Cors跨域以及其他跨域方式(三)   我们知道ajax不能跨域访问,但是有时我们确实需要跨域访问获取数据,所以JSONP就此诞生了,其本质使用的是Script标签,除JSONP以外还 ...

  6. Javascript几种跨域方式总结

    在客户端编程语言中如javascript,同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法.只有当两个域具有相同的协议,相同的主机,相同的端口时,我们就认定 ...

  7. 前后端分离框架前端react,后端springboot跨域问题分析

    前后端分离框架前端react,后端springboot跨域问题分析 为啥跨域了 前端react的设置 springboot后端设置 为啥跨域了 由于前后端不在一个端口上,也是属于跨域问题的一种,所以必 ...

  8. SpringBoot系列(八)分分钟学会Springboot多种解决跨域方式

    SpringBoot系列(八) 分分钟学会SpringBoot多种跨域解决方式 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 s ...

  9. Web Api 利用 cors 实现跨域

    一.安装 cors 二.修改 Web.config <appSettings> <add key="cors:allowedMethods" value=&quo ...

随机推荐

  1. a.default.ERROR.httpAjax is not a function

    原因1: 使用的是jQuery的slim构建,它删除了一些东西,ajax就是其中之一. 解决方法: 在此处下载常规(压缩或非压缩)版本的jQuery并将其包含在您的项目中. 原因2: 使用其他库引起了 ...

  2. (007)每日SQL学习:将字符和数字分离

    with aa as ( select 'sad10' as data from dual union all select 'datf20' as data from dual union all ...

  3. numpy、pandas学习二

    #numpy中arrary与pandas中series.DataFrame区别#arrary生成数组,无索引.列名:series有索引,且仅能创建一维数组:DataFrame有索引.列名import ...

  4. 分布式缓存 — Docker

    Docker 是一个开源项目,它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护. Doc ...

  5. Java——单例模式、多线程

    单例模式 单例模式练习 单例模式的分类 懒汉式 懒汉式相关练习 饿汉式 饿汉式相关练习 线程安全 使用双重检测机制实现线程安全的懒汉式 使用静态内部类实现线程安全的单例模式 多线程 多线程的三种方式 ...

  6. 深入理解java虚拟机,GC参考手册

    深入理解java虚拟机 一.<深入理解Java虚拟机> 1.第2章 Java内存区域与内存溢出异常 2.第3章 垃圾收集器与内存分配策略 3.第4章 虚拟机性能监控与故障处理工具 4.第5 ...

  7. sql 工具类function

    --判断是否为整数 create or replace function is_number(param VARCHAR2) return NUMBER is v_num NUMBER; begin ...

  8. Latex安装教程(附美赛论文latex模板)

    @ 目录 Latex简介 安装步骤 texlive下载 配置环境变量 配置Texsudio latex版本helloworld 美赛 latex模板 Latex简介 LaTeX(LATEX,音译&qu ...

  9. WPS Excel启用正则表达式

    WPS Excel启用正则表达式 新建一个空白表格文件 进入VB编辑器 插入模块 工具-引用-勾选正则表达式 (Microsoft VBScript Regular Express 5.5) 复制代码 ...

  10. CCF计算机软件能力认证试题练习:201912-5 魔数

    CCF计算机软件能力认证试题练习:201912-5 魔数 前置知识:BFS,线段树等 \(f(x) = (x\%A)\%B\) 这个函数值的和直接用线段树维护是不太行的(也可能是我不知道),后来想了很 ...