面试题答案
一键面试使用代理解决跨域请求的原理
浏览器出于安全考虑,遵循同源策略,即只有协议、域名、端口都相同的情况下,才允许相互访问。跨域请求会被浏览器阻止。使用代理服务器可以绕开这一限制,原理如下:
- 代理服务器转发:前端代码向代理服务器发起请求,代理服务器和前端代码处于同源(通常是同一个域名或可信任的服务),所以不会有跨域问题。代理服务器接收到请求后,再将请求转发到目标后端接口,后端接口处理请求并返回响应给代理服务器,代理服务器最后将响应返回给前端。这样就巧妙地避开了浏览器的同源策略限制。
在Vue项目的vue.config.js文件中进行代理配置
在vue.config.js
文件中,可以使用devServer.proxy
选项来配置代理。以下是实现向http://api.example.com
这个后端接口跨域请求的配置示例:
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'http://api.example.com',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
}
};
上述配置解释如下:
/api
:这是一个匹配规则,当请求的URL路径以/api
开头时,会触发代理。target
:指定代理的目标地址,即后端接口http://api.example.com
。changeOrigin
:设置为true
,表示在转发请求时,修改请求头中的Origin
字段,让目标服务器认为请求来自代理服务器,而不是前端页面,避免一些因为Origin
不匹配导致的问题。pathRewrite
:用于重写请求路径,这里将/api
开头的路径重写为空字符串,这样实际转发到后端的请求路径就去掉了/api
前缀,符合后端接口的预期路径。例如,前端请求/api/users
,实际会转发到http://api.example.com/users
。