# 【🔥 跨域学习路线】
一、什么是跨域?
ajax请求地址 与 当前页面地址 出现 不同源 的现象,称之为跨域
1.1 ajax请求:跨域只会出现ajax请求
1.2 当前页面地址:location.href
1.3 不同源:协议名,IP地址,端口号只要有一个不相同,就是不同源
二、什么是同源?
同源策略是客户端脚本的重要的安全度量标准。其目的是防止某个文档或脚本从多个不同源装载。所谓同源指的是:协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。
简单来说就是协议名,端口号,IP地址 三者都要相同就称之为同源策略
三、浏览器为什么要有这种跨域限制?
浏览器为了保护用户安全,当用户ajax发送的地址 和 页面地址 不同源,浏览器会认为你向两个服务器发送了请求,所以会阻止这种行为
四、解决跨域有什么方案?
4.1 cors技术:后端的解决方案,不需要前端写任何代码
解决方案:服务器只需要设置一个允许跨域响应头即可
第一步:(后端的代码)
第二步:(后端的代码)
4.2 jsonp技术:以前前端写的方案,现在很少使用
4.2.1 jsonp技术解决跨域的核心核心原理:
利用script标签src属性来发送请求,因为跨域只对ajax生效
4.2.2 了解srcipt标签src属性做了什么事?
第一步:给服务器发送了请求
第二步:执行服务器响应返回的js代码
4.2.3 jsonp完整流程
第一步:浏览器:声明一个函数。用于接受服务器响应数据
第二步:浏览器: 写一个script标签, 路径是jsonp请求地址,添加一个额外参数callback=函数名
第三步:服务器: 处理完请求之后, 返回一个函数调用的js代码,格式res.send( '函数名(响应数据)' )
(函数名需要从参数callback获取) 后端的代码
第四步:浏览器就会执行script标签响应的js代码 的代码
JSONP缺点:它只支持GET请求,而不支持POST请求等其他类型的HTTP请求。
4.3 Nginx反向代理
总结:
其实跨域还有其他的解决的方案,有好多种,有想了解的可以自行去查找看看。如果有机会后续会继续写剩下的几种的解决方案的。