详解跨域及解决方式

createh51周前 (06-29)技术教程10

一、什么是跨域和同源策略

指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。有一点必须要注意:跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。之所以会跨域,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信。

同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域,如果是协议和端口造成的跨域问题“前台”是无能为力的。第二:在跨域问题上,域仅仅是通过“协议, 域名和端口必须匹配”来识别而不会根据域名对应的IP地址是否相同来判断。

同源策略限制从一个源加载的文档或者脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的关键的安全机制。cookie、localStorage和indexDB无法读取,DOM无法获得,AJAX请求不能发送。

二、处理跨域的两种方式

1、利用nginx解决跨域问题

从上一节的介绍我们可以知道跨域会产生问题,我们不跨越不就可以了

利用nginx监听80端口

nginx的配置,

##当用户发送localhost:80/时会被nginx转发到http://localhost:81服务;

##当界面请求接口数据时,只要以/a为开头,就会被nginx转发到后端接口服务器上;

总结:nginx实现跨域的原理,实际就是把前端项目和后端接口项目放到一个域中,这样就不存在跨域问题,然后根据请求地址去请求不同服务器(真正使用的服务器);

2、JSONP

JSONP的原理是利用script元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 数据。JSONP请求一定需要对方的服务器做支持才可以。

JSONP与Ajax一样都是从客户端向服务器发送请求,从服务器获取数据,Ajax属于同源策略,JSONP属于非同源策略(跨域)。

JSONP优点是兼容性好,可用于解决主流浏览器的跨域数据访问的问题。缺点是仅支持get方法具有局限性。

jQuery的JSONP形式

JSONP都是GET和异步请求的,不存在其他的请求方式和同步请求,且jQuery默认就会给JSONP的请求清除缓存。

$.ajax({

url:"http://www.wulj.club/article/12",

dataType:"jsonp",

type:"get",

jsonp:"jsonp",

success:function (data){

console.log(data);}

});

以上两种跨域解决方式是本人在实际项目应用中使用到的,可能还会有别的方式,因为我不熟,没有编写,如果您觉着有那种方式比较好,也可以发给我,我会在更新上去,请多多支持!!!

相关文章

nginx解码特殊字符引发400问题处理案例分享

问题背景和现象公司任务管理使用的是开源的redmine,以前是单机部署(bitnami_redmine),后来由于项目数量、人员数量和任务数量的增加,卡顿问题比较明显,于是改造为基于k8s的分布式集群...

如何实现 WebSocket 反向代理?

前言为什么要代理 WebSocket?是这样的,因为我们有个基于 electron 的桌面应用,他在本地提供 http 和 websocket 两个服务,客户端(浏览器)可以使用这些服务来完成一些核心...

百万级并发架构全解:LVS + Nginx + Keepalived架构图解!

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。百万级并发架构是大型架构经常涉及的,下面我重点来详解如何实现百万级并发架构@mikechen文章来源:mikech...

Nginx学习笔记(15) proxy_pass用法常见误区

两种常见用法# 带/和不带/用法区别 proxy_pass http://127.0.0.1:8090 proxy_pass http://127.0.0.1:8090/ ** 代理到上游服务器的UR...

nginx alias location 区别

Nginx 中的 alias 和 location 是两种不同的配置指令,用于实现不同的目的。location 指令用于定义 Nginx 的 URL 匹配规则,当请求的 URL 匹配某个 locati...

Helm 实战:用 Helm 部署一个 Nginx 应用

这一篇,我们将动手实战:用 Helm 从零部署一个 Nginx 应用,并掌握 Helm Chart 的结构和参数化技巧。一、准备环境在开始之前,你需要确保环境中具备以下工具:已部署的 Kubernet...