主题
面试速答(先看这里)
**一句话结论:**跨域访问问题(Cross-Origin Resource Sharing,CORS)是由浏览器的同源策略引起的安全限制。
60秒标准回答:
跨域访问问题(Cross-Origin Resource Sharing,CORS)是由浏览器的同源策略引起的安全限制。同源策略是一种浏览器安全策略,它要求网页中的所有资源必须来自同一个域名、协议和端口,否则浏览器会阻止跨域的资源请求
所以,如果在浏览器访问过程中发现域名、端口或者协议不同的时候,就会出现跨域问题
解决跨域访问问题的方法有以下几种
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**所以,如果在浏览器访问过程中发现域名、端口或者协议不同的时候,就会出现跨域问题。
- **要点2:**浏览器实施了同源策略,即网页中的脚本只能访问与其来源相同的资源。
- **要点3:**www.hollischuang.com中获取 www.a.hollischuang.com中的资源,同样的规则适用。
**记忆锚点:**CORS → JSONP → script → https → http → wwwahollischuangcom
关键取舍:
- 跨域访问问题(Cross-Origin Resource Sharing,CORS)是由浏览器的同源策略引起的安全限制。
- 同源策略是一种浏览器安全策略,它要求网页中的所有资源必须来自同一个域名、协议和端口,否则浏览器会阻止跨域的资源请求。
- 域名不同:如从a.com的页面请求b.com的资源。
加分表达:
- 所以,如果在浏览器访问过程中发现域名、端口或者协议不同的时候,就会出现跨域问题。
- 代理服务器:可以通过在同源域名下设置一个代理服务器,实现跨域访问。
- 同源的定义包括协议(如http与https)、域名和端口号,如果这三者中有任何一个不同,就会被视为跨域请求。
追问准备:
- 围绕「CORS」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「JSONP」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「script」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
跨域访问问题(Cross-Origin Resource Sharing,CORS)是由浏览器的同源策略引起的安全限制。同源策略是一种浏览器安全策略,它要求网页中的所有资源必须来自同一个域名、协议和端口,否则浏览器会阻止跨域的资源请求。
所以,如果在浏览器访问过程中发现域名、端口或者协议不同的时候,就会出现跨域问题。
- 域名不同:如从a.com的页面请求b.com的资源。
- 协议不同:如从http的页面请求https的资源。
- 端口不同:当页面的端口与请求的资源的端口不一致时,同样会触发跨域问题。
解决跨域访问问题的方法有以下几种:
- CORS(推荐):CORS是一种机制,通过在服务器端设置相应的响应头来解决跨域问题。服务器在响应中添加Access-Control-Allow-Origin头,指定允许跨域访问的域名或通配符*,使得浏览器可以放行跨域请求。CORS是目前最常用的解决跨域问题的方式,支持现代浏览器。
java
@CrossOrigin(origins = "*")
public class HollisTestController {
}JSONP:JSONP是一种跨域通信的技术,它利用<script>标签可以跨域访问的特性,通过动态创建<script>标签来加载跨域资源,服务器返回一个包含回调函数的JavaScript脚本,客户端通过回调函数处理响应数据。不过JSONP只支持GET请求,且只能用于跨域请求JSON数据。
代理服务器:可以通过在同源域名下设置一个代理服务器,实现跨域访问。前端将请求发送给代理服务器,代理服务器再转发请求给目标服务器,并将响应返回给前端,从而绕过跨域限制。这种方式需要部署额外的代理服务器,适用于一些特殊情况。
扩展知识
二级域名跨域吗?
浏览器实施了同源策略,即网页中的脚本只能访问与其来源相同的资源。同源的定义包括协议(如http与https)、域名和端口号,如果这三者中有任何一个不同,就会被视为跨域请求。
www.hollischuang.com中获取 www.a.hollischuang.com中的资源,同样的规则适用。浏览器会将这两个视为不同的源,除非服务器在响应中配置了允许跨域访问的 CORS 头部。