web前端跨域的一些解决方案

author author     2023-05-09     265

关键词:

参考技术A

没有归纳之前对跨域的一些说法是模糊的,什么jsonp啊,跨域原理啊,心里只有一个大概的说法,知道这个东西,然后用的时候直接百度Ctrl+C,后来闲下来决定整理一波这些知识点,需知其所以然。

那么,其实这是浏览器对我们的一种保护机制,把坏人挡在门外。那么,问题来了,我们怎么确定门外的人到底是好人还是坏人呢?浏览器关上了坏人的一扇门,留给了我们好人一扇窗。

JSONP跟JSON没有关系..就好像JavaScript和Java一样
浏览器对script、img(这些标签的请求方式都是 GET ,所以jsonp不支持 POST )这种标签没有限制,我们就可以这样干

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

服务器端对于CORS的支持,主要就是通过设置 Access-Control-Allow-Origin 来进行的。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。 更多有关跨域资源共享 CORS 的知识

浏览器中可以查看对应的响应头,举个例子,如下

服务端允许CORS,服务端需要针对接口设置的一系列响应头 (Response Headers)

1.简单请求
目前大多数情况都采用这种方式。简单请求只需要设置 Access-Control-Allow-Origin 即可。满足以下两个条件,就属于简单请求。

2.非简单请求
非简单请求会发出一次预检测请求,返回码是204,预检测通过才会真正发出请求,这才返回200。来看栗子:

非简单请求需要根据不同情况配置不同的响应头,一系列响应头配置项见上方

这个说法相信不陌生,我们依然使用前端域名请求,然后有一个 中介商---代理 把这个请求转发到真正的后端域名上,那也就不存在跨域问题了。
比较普遍的Nginx,简单的配置一下就可以了。了解更多的配置信息: nginx详解

然后前端这边的请求地址是 http://localhost:9099/api/xxx ,然后Nginx监听到地址是 localhost:9099/api 的请求,就帮我们转发到真正的服务端地址 http://baidu.com

CORS与JSONP的使用目的相同,但是比JSONP更强大。JSONP只支持GET请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及在服务端同意jsonp方式时,可以向不支持CORS的网站请求数据。Nginx可以说是最方便的,不过需要部署Nginx才行,需要对服务器有一定的理解,不太适合刚入门的同学,当然也可以请后台同学帮忙部署。

window.postMessage(data,origin) 是 HTML5 的一个接口,专注实现不同窗口不同页面的跨域通讯。

现在是这么一个情况,由于同源策略的限制下, a.html 不能操作iframe( b.html )里面的dom,那么使用postMessage就可以解决这一情况

然后 b.html 页面通过message事件监听并接受消息:

这种方式只适合主域名相同,但子域名不同的iframe跨域。
比如主域名是 http://baidu.com/:8888 ,子域名是 http://child.baidu.com/:8888 ,这种情况下给两个页面设置相同的document.domain即document.domain = baidu.com 就可以访问各自的window对象了。

前端跨域整理
不要再问我跨域的问题了

前端跨域的解决方式

前端与服务端数据交互时,涉及到跨域的一些问题。JavaScript出于安全的考虑,禁止了跨域调用其他页面的对象,也即同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式。什么是跨域?如... 查看详情

跨域的三种解决方式

跨域问题跨域问题对于WEB前端工程师来说是比较重要的一个问题,因为我们时常需要去解决这样的问题,在其他类型的前端开发来说,他们并没有跨域问题跨域问题的产生因为浏览器有同源策略:只有在同域名,同端口,同协议... 查看详情

前端-关于cors跨域的解决方案,面向服务端

最近自己在写后台管理系统的时候,并没有采用jsp、freemaker、叶子等模板技术,而是由后端提供数据api,前端通过AJAX和JQuery来动态操作页面上的一些div、table元素,从而实现报表的动态加载。因为本人并非专业前端,所以采用的... 查看详情

前端跨域的三种解决方案

1.CORS跨域  前端不动 后端配合  像调用正常的接口一样调用接口,通过后端修改配置使得站点能够访问 2.JSONP跨域(github网址:https://github.com/webmodules/jsonp)  前端适配(安装jsonp插件) 后端配合 3.接口代理 ... 查看详情

依靠前端解决跨域问题的几种方式

首先我们先了解下跨域的概念:  出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建... 查看详情

前端面试题汇总

...前端开发者必会的34道Vue面试题系列Web开发中跨域的几种解决方案9种常见的前端跨域解决方案(详解)跨域资源共享CORS详解CORS跨域中的preflight请求彻底理解cookie,session,token 查看详情

cors跨域的限制与解决

...解析消息的将该条消息屏蔽同时在控制台报错。解决办法前端解决办法利用浏览器允许标签的跨域这一特性,例如JOSNP,但是JSONP只能使用get方法请求数据,jsonp的原理与实现后端解决办法添加允许跨域的 查看详情

解决跨域的方法

前端解决跨域的方法都是基于<script>标签可以跨域请求平时的ajax请求所经历的过程constxhr=newXMLHttpRequest()xhr.onreadystatechange=function()switch(xhr.readyState)case0://UNSENT(未打开)debuggerbreakcase1://OPENED(未发送)debuggerbreakc 查看详情

这次全了,8种超详细web跨域解决方案!

...跨域问题的能力。本文总结梳理了常见的跨域场景、跨域解决方案及其优缺点,希望可以作为大家解决跨域问题的参考。一、什么是跨域当a.qq.com域名下的页面或脚本试图去请求b.qq.com域名下的资源时,就是典型的跨域行... 查看详情

springboot解决跨域的四种姿势(代码片段)

简介跨域我就不多说了,我们今天开门见山直接解决跨域的几种姿势,那就上姿势姿势姿势一importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.CorsRegistry;importorg.springframework.web.s 查看详情

解决geoserver请求跨域的几种思路

...域问题是浏览器同源安全制引起的特别常见的问题。不同前端语言针对跨域解决方法有所区别。比如Flex语言做跨域请求时,如果中间件存有跨域文件(crossdomain.xml)则可以轻松实现跨域。   而JS开发的前端,针对GET请... 查看详情

跨域_解决浏览器跨域的方式

这里介绍的是--disable-web-security参数。这个参数可以降低chrome浏览器的安全性,禁用同源策略,利于开发人员本地调试。(1)新建一个chrome快捷方式,右键“属性”,“快捷方式”选项卡里选择“目标”,添加&... 查看详情

前端跨域问题各种解决方式及原理

跨域的各种解决方式及原理因为浏览器有某些安全级别的限制,例如,同源策略,所以在进行浏览器端的web应用开发的时候,经常会遇到跨域问题。同源策略:只有在同源的情况下(同域名,同协议,同端口)才能进行数据交互... 查看详情

前端跨域

声明:原文出自:http://blog.csdn.net/kongjiea/article/details/44201021 前言 受浏览器同源策略的限制,本域的js不能操作其他域的页面对象(比如DOM)。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。所以我们要... 查看详情

解决geoserver请求跨域的几种思路,第二种思路用过

...域问题是浏览器同源安全制引起的特别常见的问题。不同前端语言针对跨域解决方法有所区别。比如Flex语言做跨域请求时,如果中间件存有跨域文件(crossdomain.xml)则可以轻松实现跨域。   而JS开发的前端,针对GET请... 查看详情

前端跨域的那些事

这一节,我们来讲一讲,前端跨域的那些事,主要分成这样的几部分来讲解,一、为什么要跨域?二、常见的几种跨域与使用场景  2.1JSONP跨域  2.2iframe跨域  2.3window.name跨域  2.4document.domain跨域  2.5cookie跨域  2.6po... 查看详情

gulp解决跨域的配置文件

//引入插件vargulp=require(‘gulp‘);//varProxy=require(‘gulp-connect-proxy‘);varconnect=require(‘gulp-connect‘);varproxy=require(‘http-proxy-middleware‘);//使用connect启动一个Web服务器gulp.task(‘connect‘,function(){ 查看详情

解决geoserver请求跨域的几种思路

...域问题是浏览器同源安全制引起的特别常见的问题。不同前端语言针对跨域解决方法有所区别。比如Flex语言做跨域请求时,如果中间件存有跨域文件(crossdomain.xml)则可以轻松实现跨域。   查看详情