腾讯如何避免 CDN 为 PC 端缓存移动端页面

Posted 全栈成长之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯如何避免 CDN 为 PC 端缓存移动端页面相关的知识,希望对你有一定的参考价值。

奥林匹克国家公园中的可可西里雨林,华盛顿州
(© Jorge Romano/Offset by Shutterstock)

本题摘自于我 github 上的面试每日一题:https://github.com/shfshanyue/Daily-Question,并有大厂面经及内推信息,可「在左下角打开本题原文链接」

如果 PC 端和移动端是一套代码则不会出现这个问题。「这个问题出现在 PC 端和移动端是两套代码,却共用一个域名。」

使用 nginx 配置如下,根据 UA 判断是否移动端,而走不同的逻辑 (判断UA是否移动端容易出问题)

location / {
// 默认 PC 端
root /usr/local/website/web;

# 判断 UA,访问移动端
if ( $http_user_agent ~* "(android|webOS|iPhone|iPad|BlackBerry)" ){
root /usr/local/website/mobile;
}

index index.html index.htm;
}

解决方案通常使用 Vary 响应头,来控制 CDN 对不同请求头的缓存。

「此处可以使用 Vary: User-Agent ,代表如果 User-Agent 不一样,则重新发起请求,而非从缓存中读取页面」

Vary: User-Agent

当然,User-Agent 实在过多,此时缓存失效就会过多。

简答

使用 Vary: User-Agent,根据 UA 进行缓存。

Vary: User-Agent

但最好不要出现这种情况,PC 端和移动端如果是两套代码,建议用两个域名,理由如下

  1. nginx 判断是否移动端容易出错
  2. 对缓存不友好

更多面试

【字节-视频架构组-前端】头条架构组招人了内含自测题
【美团】什么是防抖和节流,他们的应用场景有哪些
【美团】如何获取一个进程的内存并监控

关注我

我是山月,正致力于「每天用五分钟能够看完的简短答案回答一个大厂高频面试题」。扫码添加我的微信,备注进群,加入高级前端进阶群.

加我微信拉你进入面试交流群
每天五分钟,半年大厂中

以上是关于腾讯如何避免 CDN 为 PC 端缓存移动端页面的主要内容,如果未能解决你的问题,请参考以下文章

vue的缓存机制

如何将pc端排版好的h5页面等比缩放到移动端

移动端Vue界面缓存处理

pc端页面在移动端显示问题

前端页面开发浅谈:PC 端设计如何“完美”迁移到移动端?

前端页面开发浅谈:PC 端设计如何“完美”迁移到移动端?