乐闻世界logo
搜索文章和话题

计算机基础面试题手册

CDN 如何配置 HTTPS?有哪些 HTTPS 模式?

CDN HTTPS 配置的重要性HTTPS(Hypertext Transfer Protocol Secure)是 HTTP 的安全版本,通过 SSL/TLS 协议加密通信内容。在 CDN 上配置 HTTPS 不仅可以保护数据传输安全,还能提升 SEO 排名和用户信任度。CDN HTTPS 配置方式1. 自定义证书上传将自有 SSL 证书上传到 CDN:步骤:购买或申请 SSL 证书下载证书文件(.crt)和私钥文件(.key)在 CDN 控制台上传证书和私钥配置 HTTPS 监听端口(通常是 443)优点:完全控制证书支持通配符证书和 EV 证书适合企业级应用缺点:需要手动管理证书续期需要购买证书(部分 CDN 提供免费证书)2. CDN 提供的免费证书使用 CDN 服务商提供的免费 SSL 证书:特点:Let's Encrypt:大多数主流 CDN 支持自动续期:无需手动操作通配符支持:部分 CDN 支持 *.example.com配置示例(Cloudflare):# 通过 API 启用 Universal SSLcurl -X PATCH "https://api.cloudflare.com/client/v4/zones/{zone_id}/settings/ssl" \ -H "Authorization: Bearer {api_token}" \ -H "Content-Type: application/json" \ -d '{"value":"flexible"}'3. SNI(Server Name Indication)支持SNI 允许在同一 IP 地址上托管多个 HTTPS 网站:工作原理:客户端在 SSL 握手时发送目标域名服务器根据域名返回对应的证书CDN 自动处理 SNI 请求兼容性:现代浏览器完全支持旧版浏览器(如 IE6)不支持HTTPS 模式选择1. Flexible 模式流程:用户 → CDN(HTTPS)→ 源站(HTTP)优点:配置简单,源站无需 SSL 证书适合快速部署缺点:CDN 到源站不加密,存在安全风险不适合敏感数据传输适用场景:静态内容分发测试环境临时解决方案2. Full 模式流程:用户 → CDN(HTTPS)→ 源站(HTTPS)优点:端到端加密安全性高缺点:源站需要配置 SSL 证书证书必须与 CDN 配置匹配适用场景:生产环境敏感数据传输符合合规要求3. Full (Strict) 模式流程:用户 → CDN(HTTPS)→ 源站(HTTPS,严格验证)特点:验证源站证书的有效性检查证书链完整性验证证书与域名匹配优点:最高安全性防止中间人攻击缺点:配置复杂证书问题会导致连接失败适用场景:金融、医疗等高安全要求行业政府机构企业核心业务HTTPS 配置最佳实践1. 强制 HTTPS 重定向自动将 HTTP 请求重定向到 HTTPS:# 配置示例HTTP/1.1 301 Moved PermanentlyLocation: https://example.com$request_uri实现方式:CDN 页面规则源站配置HSTS(HTTP Strict Transport Security)2. HSTS 配置HSTS 强制浏览器使用 HTTPS:Strict-Transport-Security: max-age=31536000; includeSubDomains参数说明:max-age:HSTS 有效期(秒)includeSubDomains:包含所有子域名preload:加入 HSTS 预加载列表注意事项:一旦启用,短期内无法禁用确保所有子域名都支持 HTTPS3. 优化 SSL/TLS 配置选择合适的加密套件和协议:推荐的协议和加密套件:# 仅支持 TLS 1.2 和 TLS 1.3ssl_protocols TLSv1.2 TLSv1.3;# 优先使用强加密套件ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;# 启用会话复用ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;4. OCSP StaplingOCSP Stapling 提高 SSL 握手性能:ssl_stapling on;ssl_stapling_verify on;ssl_trusted_certificate /path/to/chain.pem;优点:减少 SSL 握手时间减轻 CA 服务器负载提高用户隐私保护5. 证书自动续期使用 Let's Encrypt 等自动续期服务:# 使用 certbot 自动续期certbot renew --quiet --post-hook "systemctl reload nginx"定时任务:# 每天凌晨 2 点检查证书续期0 2 * * * certbot renew --quiet --post-hook "systemctl reload nginx"HTTPS 性能优化1. 启用 HTTP/2HTTP/2 在 HTTPS 基础上提供性能提升:listen 443 ssl http2;优势:多路复用:减少连接数头部压缩:减少传输数据量服务器推送:主动推送资源2. 会话缓存和复用减少 SSL 握手次数:ssl_session_cache shared:SSL:50m;ssl_session_timeout 1d;ssl_session_tickets off;3. 优化证书链使用完整的证书链:主证书:域名证书中间证书:CA 中间证书根证书:CA 根证书(通常不需要)验证证书链:openssl s_client -connect example.com:443 -showcerts常见问题及解决方案问题 1:混合内容警告原因:HTTPS 页面包含 HTTP 资源解决方案:将所有资源改为 HTTPS使用相对路径使用 CSP(Content Security Policy)Content-Security-Policy: upgrade-insecure-requests问题 2:证书链不完整原因:缺少中间证书解决方案:上传完整的证书链使用正确的证书顺序证书链顺序:域名证书 → 中间证书 → 根证书问题 3:SSL 握手慢原因:未启用会话缓存未启用 OCSP Stapling使用了弱加密套件解决方案:启用会话缓存和复用启用 OCSP Stapling使用强加密套件问题 4:证书过期原因:忘记续期证书解决方案:使用自动续期工具设置过期提醒使用 CDN 的免费证书(自动续期)HTTPS 监控指标1. 证书状态证书有效期:距离过期时间证书链完整性:是否完整证书匹配度:是否与域名匹配2. SSL 握手性能握手时间:平均 SSL 握手耗时握手成功率:SSL 握手成功比例会话复用率:会话复用的比例3. 加密套件使用加密套件分布:各加密套件的使用比例协议版本分布:TLS 1.2 vs TLS 1.3弱加密套件:是否使用了弱加密套件面试要点回答这个问题时应该强调:了解不同的 HTTPS 配置方式及其优缺点能够根据业务需求选择合适的 HTTPS 模式掌握 HTTPS 配置的最佳实践了解 HTTPS 性能优化方法有实际配置和故障排查经验
阅读 0·2月21日 16:59

如何优化 CDN 成本?有哪些成本优化策略?

CDN 成本优化的必要性随着业务增长,CDN 成本可能成为企业的重要开支。通过合理的成本优化策略,可以在保证服务质量的前提下,显著降低 CDN 使用成本。CDN 成本构成1. 流量费用计费方式:按流量计费:根据实际使用的流量计费按带宽计费:根据峰值带宽计费混合计费:结合流量和带宽计费计费周期:月度计费季度计费年度计费(通常有折扣)2. 请求数费用计费对象:HTTP 请求HTTPS 请求API 请求计费方式:按请求次数计费通常有免费额度3. 存储费用计费对象:边缘存储源站存储备份存储计费方式:按存储容量计费(GB/月)按存储类型计费(标准、低频、归档)4. 功能费用计费功能:HTTPS 证书WAF 防护DDoS 防护边缘计算视频处理5. 其他费用数据传输费(跨区域)技术支持费定制开发费成本优化策略1. 缓存优化提高缓存命中率目标:缓存命中率 >95%优化方法:1. 合理设置 TTL# 静态资源:长 TTLCache-Control: public, max-age=31536000, immutable# 动态内容:短 TTLCache-Control: public, max-age=60# 不缓存的内容Cache-Control: no-store2. 优化缓存键# 忽略不影响内容的查询参数proxy_cache_key "$scheme$request_method$host$uri";3. 使用版本控制# 不推荐:更新后需要清除缓存style.css# 推荐:更新时改变 URLstyle.v1.cssstyle.v2.css效果:减少回源流量降低源站负载节省带宽成本缓存预热策略:在内容发布前预热预热热门内容定期预热更新内容示例:# 预热多个 URLfor url in $(cat urls.txt); do curl -X POST "https://api.cdn.com/prefetch" \ -H "Content-Type: application/json" \ -d "{\"urls\": [\"$url\"]}"done2. 内容优化图片优化优化方法:1. 选择合适的格式JPEG:适合照片PNG:适合透明图片WebP:比 JPEG/PNG 小 30-50%AVIF:比 WebP 小 20-30%2. 压缩图片# 使用 ImageMagick 压缩convert input.jpg -quality 85 output.jpg# 使用 pngquant 压缩 PNGpngquant --quality=65-80 input.png3. 响应式图片<picture> <source srcset="image-800w.webp" type="image/webp" media="(max-width: 800px)"> <source srcset="image-1200w.webp" type="image/webp"> <img src="image-1200w.jpg" alt="Description"></picture>效果:减少 50-70% 的图片流量视频优化优化方法:1. 选择合适的编码格式H.264:兼容性好H.265/HEVC:比 H.264 小 50%VP9:开源,比 H.264 小 40%AV1:最新标准,比 H.264 小 60%2. 自适应码率(ABR){ "streams": [ {"bitrate": 500000, "resolution": "640x360"}, {"bitrate": 1000000, "resolution": "854x480"}, {"bitrate": 2000000, "resolution": "1280x720"}, {"bitrate": 4000000, "resolution": "1920x1080"} ]}3. 使用 CDN 视频处理// 使用 CDN 边缘处理视频const processedVideo = await cdn.processVideo({ input: 'original.mp4', output: 'compressed.mp4', codec: 'h265', bitrate: '2000k'})效果:减少 40-60% 的视频流量文本压缩启用压缩:# Gzip 压缩gzip on;gzip_types text/plain text/css application/json application/javascript;# Brotli 压缩(比 Gzip 小 20-30%)brotli on;brotli_types text/plain text/css application/json application/javascript;效果:文本内容减少 60-80%3. 流量优化减少不必要的请求方法:1. 合并资源<!-- 不推荐:多个 CSS 文件 --><link rel="stylesheet" href="style1.css"><link rel="stylesheet" href="style2.css"><link rel="stylesheet" href="style3.css"><!-- 推荐:合并为一个 CSS 文件 --><link rel="stylesheet" href="styles.css">2. 使用雪碧图.sprite { background-image: url('sprite.png'); background-repeat: no-repeat;}.icon1 { background-position: 0 0; width: 32px; height: 32px;}.icon2 { background-position: -32px 0; width: 32px; height: 32px;}3. 内联关键 CSS<style> /* 关键 CSS 内联 */ .critical { ... }</style>使用 HTTP/2 或 HTTP/3优势:多路复用:减少连接数头部压缩:减少传输数据量服务器推送:主动推送资源配置示例:listen 443 ssl http2;4. 智能路由优化地理位置路由策略:将用户路由到最近的节点配置示例:geo $geo { default default; 1.0.0.0/8 us-east; 2.0.0.0/8 us-west; 3.0.0.0/8 eu-west;}upstream cdn_us_east { server cdn-us-east-1.example.com;}upstream cdn_us_west { server cdn-us-west-1.example.com;}效果:减少跨区域流量成本成本优化路由策略:优先使用成本较低的节点实现:分析各节点的成本配置节点权重动态调整路由5. 预算和配额管理设置预算上限方法:设置月度预算上限配置超额告警自动降级策略配置示例:// 设置预算告警const budget = { monthly: 10000, // $10,000 alertThreshold: 0.8, // 80% 时告警 stopThreshold: 1.0 // 100% 时停止服务}function checkBudget(currentSpend) { const ratio = currentSpend / budget.monthly if (ratio >= budget.stopThreshold) { // 停止服务或降级 enableDegradationMode() } else if (ratio >= budget.alertThreshold) { // 发送告警 sendAlert(`Budget usage: ${ratio * 100}%`) }}使用预留实例策略:预留带宽或流量获得折扣价格适合稳定业务示例:# 购买预留实例aws cloudfront create-reserved-instance \ --reserved-instance-offering-id xxx \ --instance-count 10效果:节省 20-40% 的成本6. 多 CDN 策略使用多个 CDN 服务商优势:降低单一供应商风险利用各 CDN 的优势获得更好的价格实现方式:1. DNS 负载均衡# 配置多个 CDN 的 CNAMEexample.com. IN CNAME cdn1.example.comexample.com. IN CNAME cdn2.example.com2. 智能路由// 根据成本和性能选择 CDNfunction selectCDN(userLocation, content) { const cdns = [ { name: 'cdn1', cost: 0.01, performance: 0.8 }, { name: 'cdn2', cost: 0.015, performance: 0.9 }, { name: 'cdn3', cost: 0.008, performance: 0.7 } ] // 根据业务需求选择最优 CDN return cdns.reduce((best, cdn) => { const score = calculateScore(cdn, userLocation, content) return score > best.score ? { ...cdn, score } : best }, { score: 0 })}按内容类型分配 CDN策略:静态内容:使用低成本 CDN动态内容:使用高性能 CDN视频:使用视频优化 CDN示例:// 根据内容类型选择 CDNfunction selectCDNByContentType(contentType) { const cdnMapping = { 'image/jpeg': 'low-cost-cdn', 'video/mp4': 'video-optimized-cdn', 'application/json': 'high-performance-cdn' } return cdnMapping[contentType] || 'default-cdn'}成本监控和分析1. 成本分析工具CDN 自带分析Cloudflare Analytics:流量统计请求分析成本报告AWS Cost Explorer:成本趋势分析成本预测成本优化建议2. 自定义成本监控实现示例:// 记录 CDN 成本const costTracker = { traffic: 0, requests: 0, storage: 0, addTrafficCost(bytes) { this.traffic += bytes * 0.00001 // $0.01 per GB }, addRequestCost(count) { this.requests += count * 0.000001 // $0.001 per 1000 requests }, addStorageCost(gb) { this.storage += gb * 0.02 // $0.02 per GB per month }, getTotalCost() { return this.traffic + this.requests + this.storage }}// 使用示例costTracker.addTrafficCost(1024 * 1024 * 1024) // 1 GBcostTracker.addRequestCost(1000) // 1000 requestscostTracker.addStorageCost(100) // 100 GBconsole.log(`Total cost: $${costTracker.getTotalCost()}`)3. 成本优化建议基于数据分析的建议:1. 识别高成本内容-- 查询流量最大的内容SELECT url, SUM(bytes) as total_bytesFROM cdn_logsWHERE date >= '2026-02-01'GROUP BY urlORDER BY total_bytes DESCLIMIT 10;2. 分析缓存命中率-- 查询缓存命中率低的内容SELECT url, COUNT(*) as total_requests, SUM(CASE WHEN cache_status = 'HIT' THEN 1 ELSE 0 END) as hits, SUM(CASE WHEN cache_status = 'HIT' THEN 1 ELSE 0 END) / COUNT(*) * 100 as hit_rateFROM cdn_logsWHERE date >= '2026-02-01'GROUP BY urlHAVING hit_rate < 80ORDER BY hit_rate ASCLIMIT 10;3. 优化建议对高成本内容实施压缩对低缓存命中率内容优化缓存策略对不常访问的内容使用低成本存储成本优化最佳实践1. 定期审查成本审查内容:月度成本报告成本趋势分析优化机会识别2. A/B 测试测试不同策略:不同的缓存策略不同的压缩算法不同的 CDN 配置3. 持续优化优化流程:监控成本数据分析成本构成实施优化措施评估优化效果持续改进面试要点回答这个问题时应该强调:了解 CDN 成本的构成要素掌握多种成本优化策略有实际的成本优化经验能够分析和监控 CDN 成本理解成本与性能的平衡
阅读 0·2月21日 16:58

什么是CDN?CDN的工作原理是什么?

核心概念CDN(Content Delivery Network,内容分发网络)是一组分布在多个地理位置的服务器,它们共同工作以提供快速、高可用性和安全的互联网内容传输服务。CDN 的主要目标是通过将内容存储在靠近最终用户的边缘服务器上,来减少网络延迟和带宽消耗,从而提升用户体验。工作原理当用户访问使用 CDN 的网站时,CDN 会根据用户的地理位置、网络状况和服务器负载等因素,智能地将用户的请求路由到最近的边缘节点。这个过程包括:DNS 解析:用户访问网站时,DNS 服务器会返回 CDN 节点的 IP 地址内容缓存:CDN 边缘节点检查是否有缓存的内容回源请求:如果缓存未命中,边缘节点会向源站请求内容内容分发:获取内容后,边缘节点会缓存该内容并返回给用户后续请求:后续相同内容的请求直接从边缘节点返回关键技术缓存策略TTL(Time To Live):控制内容在 CDN 节点的缓存时间缓存键:根据 URL、请求头等生成唯一标识缓存层级:边缘缓存、区域缓存、源站缓存负载均衡地理位置路由:根据用户位置选择最近的节点健康检查:监控节点状态,自动剔除故障节点流量调度:根据节点负载动态分配流量安全机制DDoS 防护:分布式防御大规模攻击WAF(Web Application Firewall):过滤恶意请求HTTPS 支持:提供 SSL/TLS 加密传输优势降低延迟:用户从就近节点获取内容,减少传输距离减轻源站压力:大部分请求由 CDN 节点处理提高可用性:分布式架构提供冗余保障节省带宽成本:减少源站带宽消耗提升安全性:提供额外的安全防护层应用场景静态资源加速:图片、CSS、JavaScript 等静态文件视频流媒体:直播、点播等视频内容分发软件分发:应用下载、更新包分发API 加速:API 响应缓存和加速全站加速:动态和静态内容综合加速常见 CDN 服务商Cloudflare:全球覆盖,提供免费套餐Akamai:行业领先,企业级解决方案AWS CloudFront:与 AWS 服务集成紧密阿里云 CDN:国内覆盖广泛腾讯云 CDN:游戏加速优势明显面试要点在回答这个问题时,应该重点突出:CDN 的定义和核心目标工作原理的清晰描述关键技术点的理解实际应用场景的举例与传统直接访问的区别
阅读 0·2月21日 16:28

ASCII 码在编程中的常见应用场景

ASCII 码在编程中的常见应用场景:1. 字符验证:# 验证是否为字母def is_letter(char): return 'A' <= char <= 'Z' or 'a' <= char <= 'z'# 验证是否为数字def is_digit(char): return '0' <= char <= '9'# 验证是否为可打印字符def is_printable(char): return 32 <= ord(char) <= 1262. 字符转换:# 大小写转换def to_upper(char): if 'a' <= char <= 'z': return chr(ord(char) - 32) return chardef to_lower(char): if 'A' <= char <= 'Z': return chr(ord(char) + 32) return char3. 字符串处理:# 移除空白字符def trim_whitespace(s): return s.strip() # 移除空格(32)、制表符(9)、换行符(10/13)等# 统计字符类型def count_chars(s): letters = digits = others = 0 for c in s: if 'A' <= c <= 'Z' or 'a' <= c <= 'z': letters += 1 elif '0' <= c <= '9': digits += 1 else: others += 1 return letters, digits, others4. 数据编码:# Base64 编码(基于 ASCII)import base64encoded = base64.b64encode(b'Hello').decode('ascii')# URL 编码from urllib.parse import quoteencoded = quote('Hello World', safe='')5. 网络协议:HTTP 头部使用 ASCII 编码SMTP、FTP 等协议基于 ASCIIJSON 字符串使用 ASCII 字符6. 文件处理:# 读取 ASCII 文本文件with open('file.txt', 'r', encoding='ascii') as f: content = f.read()注意事项:处理非 ASCII 字符时使用 Unicode注意换行符差异(CRLF vs LF)验证输入字符的有效性
阅读 0·2月21日 16:18