面试题答案
一键面试1. JSONP
- 原理:利用
<script>
标签没有跨域限制的特性,通过动态创建<script>
标签,将数据以回调函数参数的形式返回。服务端返回的数据格式形如callbackName(data)
,前端事先定义好callbackName
函数来处理数据。 - 适用场景:适用于简单的GET请求场景,主要用于前后端数据交互,比如获取第三方API数据,且只支持GET请求。
2. CORS(跨域资源共享)
- 原理:服务端设置响应头,允许特定来源的请求访问资源。例如设置
Access - Control - Allow - Origin
响应头指定允许访问的源,可以是具体的域名,也可以设为*
表示允许所有源访问。浏览器根据这些响应头信息判断是否允许跨域请求。 - 适用场景:现代浏览器普遍支持,适用于大多数复杂的跨域请求场景,包括各种HTTP请求方法(GET、POST等),常用于前后端分离项目,由后端进行配置。
3. 代理服务器
- 原理:在同源服务器上搭建一个代理服务,前端将跨域请求发送到代理服务器,代理服务器再将请求转发到目标服务器,并将响应返回给前端。这样对于浏览器来说,请求是在同源内进行的。
- 适用场景:适用于前后端都可控制的场景,例如在开发环境中,通过webpack-dev-server的代理功能实现跨域,方便开发调试。也适用于对安全性要求较高,不希望前端直接暴露给第三方服务的场景。