前端经典面试题 | 浏览器跨域

简介: 前端经典面试题 | 浏览器跨域

一、回答点

       CORS Nginx反向代理 同源策略

       跨域的问题源自于浏览器为了请求的安全,从而引入的基于 同源策略的安全特性.当页面和请求的协议、主机名或域名不同时,浏览器会判定两者不为同源,即为跨域请求.(跨域只是浏览器限制,服务端无影响.当产生跨域时,我们可以通过CORS JSONP Nginx反向代理 等方式解决)

二、深入回答

为什么有跨域问题

      跨域问题是浏览器对于请求的⼀种安全限制:⼀个⻚⾯发起的ajax请求,只能是于当前⻚同域名的 路径,这能有效的阻⽌跨站攻击。 因此:跨域问题 是针对发送请求的⼀种限制。 但是这却给我们的开发带来了不便.

判断是否为跨域

e9a9faaac203464f9c9dd8b8969fb1cb.png

       如上图:一个origin由协议(https:)、主机名(csdn)、端口(默认8080)组成 上图没有端口号,只有当 协议 主机名 端口都相同时 才会判定都是同源关系,如不符合即为跨域.

跨域的解决方案

       工作当中遇到最多的方案为 CORS 跟 Nginx反向代理


      Nginx反向代理:


               利用nginx反向代理把跨域改为不跨域,支持各种请求方式


               缺点:需要对nginx进行额外的配置


       CORS规范化跨域请求:


               优点:在服务端进行控制是否允许跨域,可以自定义规则 支持各种请求方式


               缺点:CORS需要IE10以上

实现方式

       反向代理:


               在页面同域下配置一套反向代理服务,页面请求同域的服务端,服务端请求上游的实际的服务端,然后将结果返回给前端.


       CORS:


               CORS 将请求分为单请求需预检请求


      简单请求:不会触发预检请求的称为简单请求。


      预检请求:当一个请求不满足以上简单请求的条件时,浏览器会自动向服务端发送一个 OPTIONS 请求,通过服务端返回的 Access-Control-Allow * 判定请求是否被允许

相关文章
|
16天前
|
存储 前端开发 JavaScript
前端面试题23-34
通过对 Promise 和 ECMAScript6 的深入理解,可以更好地应对现代 JavaScript 开发中的复杂异步操作和新特性,提升代码质量和开发效率。
16 2
|
7天前
|
前端开发 安全 UED
【项目实战】从终端到浏览器:实现 ANSI 字体在前端页面的彩色展示
在学习和工作中,我们经常需要使用日志来记录程序的运行状态和调试信息。而为了更好地区分不同的日志等级,我们可以使用不同的颜色来呈现,使其更加醒目和易于阅读。 在下图运行结果中,我们使用了 colorlog 库来实现彩色日志输出。通过定义不同日志等级对应的颜色,我们可以在控制台中以彩色的方式显示日志信息。例如,DEBUG 级别的日志使用白色,INFO 级别的日志使用绿色,WARNING 级别的日志使用黄色,ERROR 级别的日志使用红色,CRITICAL 级别的日志使用蓝色。
|
30天前
|
前端开发 JavaScript Java
2024高频前端面试题合集(一)
JavaScript Bridge 是一种在 JavaScript 和其他语言(如 Java、Objective-C 等)间建立通信的技术,常用于混合应用开发,允许调用原生功能、获取数据、事件通知及优化性能。SSR(服务器端渲染)的单机 QPS 取决于服务器性能、应用复杂度、网络条件等因素。Egg.js 是基于 Node.js 的企业级框架,通过目录结构约定、启动流程、插件机制和核心组件来初始化应用。前端错误捕获可通过 try-catch、window.onerror、Promise.catch 和 unhandledrejection 事件等方式实现。
|
10天前
|
存储 缓存 监控
2024春招小红书前端面试题分享
2024春招小红书前端面试题分享
34 3
|
16天前
|
前端开发 JavaScript 虚拟化
前端面试题12-22
ES6(ECMAScript 2015)是 JavaScript 的重要版本,引入了许多新特性和语法,提升了语言的功能和可用性。ES6 的主要特性包括箭头函数、类、模板字符串、解构赋值、默认参数、Promise、模块化、Generator 函数、async 函数、Proxy 和 Reflect 等。这些特性不仅简化了代码的编写和维护,还为开发者提供了更多的编程范式和工具。了解和掌握 ES6 的特性是现代 JavaScript 开发的必备技能。
7 1
|
16天前
|
JSON 前端开发 JavaScript
前端面试题01-11
Map是ES6引入的一种新的键值对集合数据结构,类似于对象,但键的范围不限于字符串,还可以是任何类型的值。Map保持键值对的插入顺序,提供更灵活的键值对操作方法,如`set()`、`get()`、`delete()`、`has()`等。
11 1
|
1天前
|
安全 前端开发 JavaScript
CORS是W3C标准,解决浏览器同源策略限制的跨域数据访问。
【6月更文挑战第27天】CORS是W3C标准,解决浏览器同源策略限制的跨域数据访问。它通过服务器在HTTP响应头添加`Access-Control-Allow-*`字段允许特定源请求。简单请求无需预检,非简单请求会发OPTIONS预检请求。服务器配置CORS策略,客户端正常请求,浏览器自动处理。若未正确配置,浏览器将阻止响应,保障安全。
5 0
|
10天前
|
算法 前端开发 安全
面试官:前端加密怎么做?这,这,这不是后端的活儿吗?
前端加密技术概述: 前端加密主要用来保护数据在传输过程中的安全,但因浏览器环境开放性,仅能提供有限的安全性,真正安全策略需结合服务器端加密和安全协议。
|
1月前
|
JavaScript 前端开发
前端面试02(JS)
本文是前端面试系列的第二篇,主要涵盖了JavaScript的基础知识,包括JS的组成(ECMAScript、DOM、BOM)、内置对象(如String、Array、Math、Date等)、数组操作方法、数据类型检测方法(typeof、instanceof、constructor、Object.prototype.toString.call)、闭包的概念及其特点、前端内存泄漏的原因和类型、事件委托的优势、基本数据类型与引用数据类型的差异、原型链的工作原理以及JS实现继承的多种方式(原型链、构造函数、组合继承等)。文章结尾鼓励读者点赞和支持作者。
14 1
|
22天前
|
JSON 前端开发 JavaScript
前端如何实现跨域
前端如何实现跨域