关于跨域,你应该知道的

首先得了解什么是跨域以及为什么会导致跨域?

跨域是由浏览器的同源策略造成的,是一种针对浏览器的安全限制,即不同源的页面之间不能相互访问。

同源策略是指请求双方的协议、域名、端口都要相同,有一个不同就会产生跨域。同时,跨域只针对请求方式为xhr类型的请求。

了解了跨域产生的根本原因我们才能给出针对性的解决方案

方案一:

既然跨域是由浏览器的同源策略造成的,所以我们可以选择取消浏览器的同源策略...方案虽然可行但不现实。

方案二:

也就是大家都知道的JSONP,JSONP的原理其实是通过改变请求方式为script实现的,但这种方案的一个很大缺点是只支持get请求。

方案三:

CORS(跨域资源共享Cross-origin resource sharing),该方案需要在服务端响应头设置Access-Control-Allow-Origin属性值,当然也可以在服务容器tomcat或nginx配置文件进行设置。

这种方案应该是目前应用最多的。

方案四:

代理proxy,既然跨域是由浏览器的同源策略造成的,只要请求不是从浏览器发出的就不存在跨域问题了,所以客户端借助代理服务器和后台进行请求交互,然后再由代理把响应结果回传给客户端就OK。

以上只是针对跨域的简单说明,各种解决方案的具体应用可以自行了解~

原文地址:https://www.cnblogs.com/fengyuexuan/p/12552994.html

时间: 2024-09-29 06:02:41

关于跨域,你应该知道的的相关文章

网站开发人员应该知道的61件事

    作者 Hoogle, 火龙果软件 发布于:2014-01-23   有人在Stack Overflow上发问,动手开发网站之前,需要知道哪些事情? 不出意料地,他得到了一大堆回答. 通常情况下,你需要把所有人的发言从头到尾读一遍.但是,Stack Overflow有一个很贴心的设计,它允许在问题下方开设一个wiki区,让所有人共同编辑一个最佳答案.于是,就有了下面这篇文章,一共总结出六个方面共计61条"网站开发须知". 我发现,这种概述性的问题,最适合这种集合群智.头脑风暴式的

跨域请求解决方案

在前端开发过程中,难免和服务端产生数据交互.一般情况我们的请求分为这么几种情况: 只关注发送,不关注接收 不仅要发送,还要关注服务端返回的信息 同域请求 跨域请求 上面提到了一个概念,我们这里简单做一下讲解.什么叫做跨域?一般情况下,跨域分为三种情况:跨协议.跨子域.跨域名.下面距离梳理一下这三种情况. 跨协议:比如说我现在的域名地址是http://www.12306.cn,有一些请求需要发送到https://www.12306.cn,此时这个请求相对与http://www.12306.cn来说

[转载]网站开发人员应该知道的61件事

http://news.cnblogs.com/n/82363/ 网站开发人员应该知道的61件事 原文网址:http://stackoverflow.com/questions/72394 译者:阮一峰 一.界面和用户体验(Interface and User Experience) 1.1 知道各大浏览器执行Web标准的情况,保证你的站点在主要浏览器上都能正常运行.你至少要测试以下引擎:Gecko(用于Firefox).Webkit(用于Safari.Chrome和一些手机浏览器).IE(你可

StackExchange:Web开发中你需要知道的事

在StackExchange上有人问了这样一个问题:What should every programmer know about web development?(关于Web开发,什么是所有程序员需要知道的?)里面给出的答案非常不错,所以,我翻译转载过来. 顺便说一下,StackExchange真是非常好,大家可以对同一个答案做贡献和修订,看看这个问题的修订过程你就知道了——专业的问答网站应该怎么去做.这就是我在这篇文章中也说过真正的用户体验是什么样的. 好了,下面是正文(我对原文做了一些批注

.net core 2.2跨域session

不说废话,直奔主题! 使用场景:微服务.前后端已经跨域.又不得不使用session 使用session的好处:此处省略若干字...... 做法: 客户端:该怎么写就怎么写. 服务端: Startup类 ConfigureServices 添加代码: services.AddSession(options => { options.Cookie.Domain = appSettings.Cookie.Domain;//localhost:8080 options.Cookie.Name = app

用Nginx代理请求,处理前后端跨域

自从前端spa框架出现后,都是前后端分离开发了.我们在开发的时候难免会遇到跨域的问题.跨域这种问题解决的方法基本都是在服务端实现的.以java为例,我知道的有3种方法处理跨域: 1.使用 @CrossOrigin 注解对每一个接口进行跨域处理,缺点是比较麻烦 @CrossOrigin(origins ="*") @RequestMapping(value = "/test", method = RequestMethod.GET) public String tes

spring mvc 图片上传,图片压缩、跨域解决、 按天生成目录 ,删除,限制为图片代码等相关配置

spring mvc 图片上传,跨域解决 按天生成目录 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ #fs.domains=182=http://172.16.100.182:18080,localhost=http://localhost:8080 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE be

AJAX的跨域与JSONP

AJAX的跨域与JSONP 什么是AJAX的跨域请求 出于安全的考虑,如果你要从www.a.com通过Ajax来请求另外一个网站www.b.com的内容,浏览器是不允许你这样做的(不理解这里的安全是指什么?想想如果没有这个限制的话,黑客可以做些什么).那什么样的情况下算是跨域?域名不同那当然算是跨域了,例如a.com向b.com发送请求,这当然就是跨域了,不允许的.不过子域名不同(例如sub.a.com向www.a.com发送请求)甚至是同域名不同端口(例如a.com:80向a.com:8080

JavaScript中的跨域

跨域是什么 跨域就是指从一个域名的网页去请求另一个域名的资源,因为JavaScript同源策略的限制,资源无法获取.比如从www.baidu.com 页面去请求 www.google.com 的资源,这是就要用到跨域请求了.严格一点来说就是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域.详情如下: 特别注意两点: 第一,如果是协议和端口造成的跨域问题“前台”是无能为力的, 第二:在跨域问题上,域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip地址对应着两个域或两个域是否在同一