首先要理解的一点就是跨站和跨域是不同的。同站(same-site)/ 跨站(cross-site)和第一方(first-party)/ 第三方(third-party)是等价的。但是与浏览器同源策略(SOP)中的「同源(same-origin)/ 跨域(cross-origin)」是完全不同的概念。
同源策略的同源是指两个 URL 的协议/主机名/端口一致。例如, https://www.taobao.com/pages/... ,它的协议是 https,主机名是 www.taobao.com ,端口是 443。
同源策略作为浏览器的安全基石,其「同源」判断是比较严格的,相对而言,Cookie 中的「同站」判断就比较宽松:只要两个 URL 的 eTLD+1 相同即可,不需要考虑协议和端口。其中,eTLD 表示有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public Suffix List)中,例如,.com、.co.uk、.github.io 等。eTLD+1 则表示,有效顶级域名+二级域名,例如 taobao.com 等。
举几个例子,www.taobao.com 和 www.baidu.com 是跨站,www.a.taobao.com 和 www.b.taobao.com 是同站,a.github.io 和 b.github.io 是跨站(注意是跨站)。

https://www.cdsy.xyz/computer/programme/html_div_css/251018/cd74843.html
https://www.cdsy.xyz/computer/programme/html_div_css/251101/cd74886.html
1、 通过 jsonp 跨域(only get 请求;类似 eval 原理;兼容性好)
2、 document.domain + iframe 跨域
3、 location.hash + iframe
4、 window.name + iframe 跨域
5、 postMessage 跨域
6、 跨域资源共享(CORS)
7、 nginx 代理跨域
8、 nodejs 中间件代理跨域
9、 WebSocket 协议跨域
Web 前端事先定义一个用于获取跨域响应数据的回调函数,并通过没有同源策略限制的 script 标签发起一个 get 请求(将回调函数的名称放到这个请求的 query 参数里),然后服务端返回这个回调函数的执行(类似 eval 函数),并将需要响应的数据放到回调函数的参数里,前端的 script 标签请求到这个执行的回调函数后会立马执行,于是就拿到了执行的响应数据。
以下是具体解释:
总结:JSONP 的设计初衷就是利用 <script> 标签的特性来绕过同源策略,而 <script> 标签只支持 GET 请求,因此 JSONP 无法支持 POST 方法。 在现代 Web 开发中,应该优先考虑使用 CORS 来解决跨域问题,而不是使用 JSONP。
<img src="">
<link href="">
<script src="">
<iframe src="">
<from>
// 客户端请求
const result = await axios.get('http://119.23.247.30:8081/test-get');
// 服务器代码
app.get('/test-get', function (req, res) {
console.log('get req')
res.send('Hello World');
})
服务器显示

浏览器显示


假设有两个子项目,他们需要共用同一个用户体系如何保证关掉页面之后打开另一个项目用户还是登录状态?
两个子项目,肯定不能是同域名
参考链接
https://www.cdsy.xyz/computer/programme/html_div_css/251101/cd74886.html
https://www.cdsy.xyz/computer/programme/html_div_css/251018/cd74843.html

