跨域

111 阅读2分钟

# 【🔥 跨域学习路线】

一、什么是跨域?

ajax请求地址 与 当前页面地址 出现 不同源 的现象,称之为跨域

1.1 ajax请求:跨域只会出现ajax请求

1.2 当前页面地址:location.href

1.3 不同源:协议名,IP地址,端口号只要有一个不相同,就是不同源

二、什么是同源?

同源策略是客户端脚本的重要的安全度量标准。其目的是防止某个文档或脚本从多个不同源装载。所谓同源指的是:协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。

简单来说就是协议名,端口号,IP地址 三者都要相同就称之为同源策略

三、浏览器为什么要有这种跨域限制?

浏览器为了保护用户安全,当用户ajax发送的地址 和 页面地址 不同源,浏览器会认为你向两个服务器发送了请求,所以会阻止这种行为

四、解决跨域有什么方案?

4.1 cors技术:后端的解决方案,不需要前端写任何代码

解决方案:服务器只需要设置一个允许跨域响应头即可

第一步:(后端的代码)

image.png 第二步:(后端的代码)

image.png

4.2 jsonp技术:以前前端写的方案,现在很少使用

4.2.1 jsonp技术解决跨域的核心核心原理:

利用script标签src属性来发送请求,因为跨域只对ajax生效

4.2.2 了解srcipt标签src属性做了什么事?

第一步:给服务器发送了请求

第二步:执行服务器响应返回的js代码

4.2.3 jsonp完整流程

第一步:浏览器:声明一个函数。用于接受服务器响应数据

image.png

第二步:浏览器: 写一个script标签, 路径是jsonp请求地址,添加一个额外参数callback=函数名

image.png 第三步:服务器: 处理完请求之后, 返回一个函数调用的js代码,格式res.send( '函数名(响应数据)' )

image.png

(函数名需要从参数callback获取) 后端的代码

第四步:浏览器就会执行script标签响应的js代码 的代码

JSONP缺点:它只支持GET请求,而不支持POST请求等其他类型的HTTP请求。

4.3 Nginx反向代理

总结:

其实跨域还有其他的解决的方案,有好多种,有想了解的可以自行去查找看看。如果有机会后续会继续写剩下的几种的解决方案的。