前端小知识-01

【01】主子页面

1、用iframe嵌入子页面,主页面和子页面能共享cookie吗?

        不能。受到浏览器同源策略限制,不同域名的页面之间无法共享cookie,即使用iframe嵌入,也无法突破这个限制。

2、基于cookie实现的登录页面,通过iframe被嵌入到主页面后,子页面还能登录成功吗?

        若主子页面跨域,则由于同源策略限制,子页面不但无法访问主页面的cookie,同时也无法操作自己域名下的cookie。所以子页面无法通过cookie进行登录验证。若主子页面同域,那么两个页面之间可以共享cookie,子页面可以正常实现登录功能。

3、在基于cookie的登录技术中,cookie扮演什么角色?

        cookie用来存储用户登录信息。当用户在登录页面输入正确的用户名和密码后,服务器会生成一个包含用户身份信息的cookie,并将其发送给浏览器保存。

4、cookie会自动附加到每次的请求头中吗?

        是的。浏览器发送请求时会检查当前域名下是否存在对应的cookie,如果存在,则自动将cookie附加到请求头中发送给服务器。

        服务器接收到请求后,会从请求头中获取cookie,并进行解析,以获取相应的用户信息等数据,借此验证身份。因此,基于cookie实现的登录机制,可以在用户访问多个页面时自动保持用户登录状态,无需重复输入用户名和密码。

5、页面正准备登录,为什么还要获取cookie中的登录状态,明明正准备登录呢?

        页面登录时,需要获取cookie中的登录状态,是为了避免用户重复登录。如果用户已经在该网站登录过,并且浏览器中保存了该网站登录状态的cookie,那么再次登录时,就可以直接使用cookie中保存的登录状态了,而无需再次输入用户名和密码。

        通过获取cookie中的登录状态,可以判断当前用户是否处于登录状态,如果是,则可以直接跳转到已登录的页面,如果不是,则需要进行登录操作,这样可以提高用户体验,并避免用户重复登录带来的不便。

        因此,即使页面正准备登录,获取cookie中登录状态,仍是一个必不可少的步骤。

6、域名不同时,子页面无法操作自己域名下的cookie吗

        当子页面和主页面的域名不同时,会受到浏览器同源策略的限制,子页面无法直接访问主页面的cookie,也无法访问自己域名下的cookie。

7、子页面为什么要获取主页面的登录状态,获取自己的登录状态不就行了

        子页面是否需要获取主页面的登录状态,取决于主页面和子页面的关系及具体业务需求。有些场景下子页面只需要获取自己的登录状态即可,而有些场景下,则需要获取主页面的登录状态。

8、子页面基于cookie实现登录,若通过iframe被嵌入到主页面,子页面登录失败怎么解决

        方案1:将主子页面放在同一域名下,即可实现cookie共享。

        方案2:将登录功能放在主页面,通过postMessage将登录信息传递给子页面,子页面接收到消息后,可以将登录信息存储在localStorage或sessionStorage中,以便后续使用。

         localStorage是浏览器提供的一种存储数据的方式,是基于同源策略的。因此不同源的页面,无法共享同一个localStorage。即使两个页面都使用localStorage存储了同样的数据,但实际上是存储在不同的空间中,彼此之间互不干扰。

        方案3:常用方法:利用nginx反向代理,将主子页面设置为同域。使用nginx可以将两个不同域的页面设置为同域,具体实现方式是使用nginx的反向代理功能,将两个不同的页面都代理到同一域名下,这样两个页面就可以共享cookie了,从而实现同域访问。

        方案4:主子页面都设置CORS,即可实现跨域共享cookie。CORS是一个浏览器的安全策略,需要后端进行处理,主要通过在HTTP请求头中添加跨域资源共享相关信息来实现,因此只有后端服务器能控制HTTP响应头,才能够实现CORS。

9、除了cookie,还可以基于哪些技术实现身份验证

        可以通过token实现身份验证。如下步骤所示,可以在主子页面不同域的情况下,实现基于token的身份验证和登录功能。避免了因为cookie跨域问题导致的登录失败。

        备注:token的生成和验证需要在服务端进行,以保证安全性。

        备注:当子页面和主页面的域名不同时,子页面依旧可以访问自己的localStorage和sessionStorage,但是cookie不行。

1、在服务端生成cookie,并在响应中返回给客户端
2、将token存储在客户端的localStorage或sessionStorage中
3、子页面中读取localStorage或sessionStorage中的token,并将其作为身份验证信息发送给服务端
4、服务端接收请求后,验证token的有效性,并根据验证结果返回响应

【02】文件流和BLOB

        文件流本身不是BLOB类型,但是可以被存储为BLOB类型。从接口中返回的二进制文件流通常是BLOB类型。

        BLOB是一种数据类型,它代表二进制数据。

【03】postcss是什么

        postcss一种css编译工具, 类似babel对js的处理。

【04】Vue项目规范前端代码

        使用EditorConfig + Prettier + ESLint组合的。

- EditorConfig:跨编辑器和IDE编写代码,保持一致的简单编码风格
- Prettier:专注于代码格式化的工具,美化代码
- ESLint:专注于代码质量检测、编码风格约束等

        其它工具。

- Git Hooks:可以设置在Git生命周期的在某些事件下运行的脚本,这些事件包括提交的不同阶段,例如提交之前/之后
- Husky: 是一种工具,可以轻松的接入Git hooks, 并在需求的某些阶段运行脚本
- GitLab CI:是一套配合GitLab使用的集成系统
- GitLab-Runner:是配合GitLab CI进行使用的,是一个用来执行软件集成脚本的东西。

         一般GitLab里面每个工程都会定义一个属于这个工程的软件集成脚本,用来自动化的完成一些软件集成工作。当这个仓库的代码发生变动时,例如有人push代码,GitLab就会将这个变动通知GitLab-CI,此时GitLab-CI会找出与该工程相关的Runner,并通知Runner把代码更新到本地并执行预定于好的执行脚本。Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。

【05】谷歌浏览器查看FPS

        加载页面打开F12后,使用快捷键ctrl+shift+p,搜索FPS,左上角会显示实时FPS。

【06】4K分辨率有哪些

标准4K分辨率3840*2160, 16:9
4096* 2160(不多见), 16:10
3840*1632(不多见)

【07】带宽是什么

        带宽是指传输带宽,也称为网络带宽,是指在特定时间内,网络能够传输的最大数据量。它是衡量网络传输速度的重要指标,单位是比特每秒(bps)。

猜你喜欢

转载自blog.csdn.net/weixin_42472040/article/details/129635077