面试官:你是如何解决跨域的?

简介: 面试官:你是如何解决跨域的?

在近期的面试中,面试官针对我的项目,问到了 如何解决跨域? 没答好,我想通过这篇文章,巩固一下这方面的知识,分享一下我对于这个问题的理解,希望也能对大家有所帮助。

我的回答
跨域我们需要从浏览器聊起,我们知道浏览器有一个同源策略,协议号-域名-端口号都相同才能叫同源,它的目的是确保数据安全。如果不是同源,那么后端返回给浏览器的数据被浏览器拦截下来,这就是跨域。
解决跨域的方式有很多种,在项目中我是通过 Cors 解决的。Cors 应该是目前比较常用的方式之一,它的原理是通过在响应头中添加一些额外的字段,如 Access-Control-Allow-Origin 字段,添加允许跨域的源,类似于设置白名单之类的操作。
还有一些其他的解决办法:

Jsonp 主要是借助了

点击获取数据,控制台会报错,提示跨域。

Cors
跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。
实现
在后端响应头添加access-control-allow-origin字段提示允许这些源跨域。
js 代码解读复制代码const http = require('http');

const server = http.createServer((req, res) => {
res.writeHead(200,{
// 'access-control-allow-origin':'*'//允许所有源
'access-control-allow-origin':'http://127.0.0.1:5501'//自己的前端
})
let data ={
msg:'Hello world'
}
res.end(JSON.stringify(data));
});

server.listen(3000,()=>{
console.log('Server is running on port 3000');)}

相关文章
|
2月前
|
JavaScript 安全 前端开发
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
这篇文章介绍了Vue项目中解决跨域问题的方法,包括使用CORS设置HTTP头、通过Proxy代理服务器进行请求转发,以及在vue.config.js中配置代理对象的策略。
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
|
2月前
|
前端开发 应用服务中间件 API
"揭秘!面试官必问:你是如何巧妙绕过跨域难题的?前端代理VS服务器端CORS,哪个才是你的秘密武器?"
【8月更文挑战第21天】在软件开发中,尤其前后端分离架构下,跨域资源共享(CORS)是常见的挑战。主要解决方案有两种:一是服务器端配置CORS策略,通过设置响应头控制跨域访问权限,无需改动前端代码,增强安全性;二是前端代理转发,如使用Nginx或Webpack DevServer在开发环境中转发请求绕过同源策略,简化开发流程但不适用于生产环境。生产环境下应采用服务器端CORS策略以确保安全稳定。
34 0
|
前端开发 安全 应用服务中间件
前端经典面试题 | 浏览器跨域
前端经典面试题 | 浏览器跨域
|
5月前
|
负载均衡 前端开发 Java
字节后端面试题(前端发送请求到后端的过程(MVC),网关gateway作用,怎么解决跨域,各微服务组件作用)
字节后端面试题(前端发送请求到后端的过程(MVC),网关gateway作用,怎么解决跨域,各微服务组件作用)
376 0
|
5月前
|
JavaScript 前端开发 安全
Vue面试题之跨域问题的解决
Vue面试题之跨域问题的解决
82 0
|
12月前
|
JavaScript 安全 前端开发
「Vue面试题」在项目中你是如何解决跨域的?
「Vue面试题」在项目中你是如何解决跨域的?
77 0
|
Java Spring
【java常见的面试题】Spring Boot 中如何解决跨域问题 ?
Java基础的面试题【SpringBoot&SpringCloud篇】
109 0
|
JSON 前端开发 Java
Java 最常见的面试题:如何实现跨域?
Java 最常见的面试题:如何实现跨域?
176 0
|
JSON 前端开发 安全
面试突击81:什么是跨域问题?如何解决?
面试突击81:什么是跨域问题?如何解决?
186 0
|
2月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。