首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >接入cdn以后访问https正常但访问http不正常

接入cdn以后访问https正常但访问http不正常

原创
作者头像
冰糕块块
修改于 2021-11-09 02:24:58
修改于 2021-11-09 02:24:58
1.5K0
举报
文章被收录于专栏:技术小生活技术小生活

背景:

CDN的作用是加速,访问CDN链接和源站链接应该有一样的访问功能效果。 有的客户在使用的时会发现接入cdn以后和源站的访问效果不一样, 比如有的在使用cdn的时候发现网站接入cdn以后输入账号密码点登陆无反应,但直接访问源站是可以正常访问的。有的接入cdn以后有时候访问正常,有的访问不正常,但源站都正常。这种情况下一般客户第一反应是不是CDN出故障了? 那么是不是真的CDN出故障了呢, 实际上不尽然, 让我们一起剖析一下下面的案例, 看看这里的原理和问题的本质原因。

问题描述:

某客户反馈网站接入cdn以后有时候访问正常有时候访问不正常,但直接访问源站是可以正常访问的。

原因分析:

首先让我们快速理清楚这个问题现象。

1) 复现case,确认问题-》确定用户所报问题,发现规律

拿到cdn访问正常和不正常的链接,接入CDN后确实访问http有问题。这里我们可以看到,当访问 https://xxxcdn.colasun.com/helloworld 时,正常返回200.但访问http协议的时候 http://xxxcdn.colasun.com/helloworld 返回423 locked。用浏览器访问该http资源不能正常的显示页面。

2) 检查源站,查看网站是否可以正常登录-》源站功能正常,排除源站功能问题

绑定源站直接访问的时候可以看到无论是http协议还是https协议的,都能正常返回对应的图片。 用curl命令查看,返回的头部如下:

我们可以看到,访问源站的https正常返回200, 访问http的时候,有一个301跳转。

那么源站这个301跳转和之前cdn返回的423locked 有没有什么关系呢?423错误码的意思是CDN 检测到有回环请,哪里造成了回环请求呢? 让我们来看下客户的配置。

3) 检查客户回源配置

发现客户同时开启

协议跟随回源

回源跟随301/302

结合上面源站测试结果,源站是做了http到https的强制跳转,把整个访问流程用下图描述并分析,我们的问题原因就逐渐清晰:

a.HTTPS访问场景

当用户用Https访问时, 协议跟随回源会用https回源访问, 这时源站正常响应https,CDN收到以后正常返回客户的200,完成一次正常回源请求。

b. HTTP访问场景

当用户用Http访问时, 协议跟随回源会用http回源访问,这是源站发现是http请求,301强制跳转成https location给cdn, 但因【回源跟随301/302配置】不支持https方式、会继续以http方式回源站,整过程简化为:http->https->http, 因此造成回环请求,CDN检测到回环请求以后返回给客户端423

从上述分析可以看到, 正式由于源站设置了https强制调整的同时, 又设置了回源跟随301/302和协议跟随回源,才造成了接入cdn以后用户用https访问正常, 用http访问不正常。

解决方案

对于此case,如果源站设置了https强制跳转,可以通过如下2种方法解决:

方法1:关闭回源跟随301/302

方法2:开启https回源

小结

这里我们可以看到,CDN加速网站输入账号密码点登陆无反应这种类似的案例一般也可以先检查一下是否有类似的设置。如果接入CDN以后,出现访问不符合预期,但源站访问正常时,未必一定是CDN的故障。大家分析产品设计的原理, 看下使用方式是否正常或是否可以优化。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++23:ranges::iota、ranges::shift_left和ranges::shift_right详解
C++23作为C++编程语言的一个重要版本,为开发者带来了许多新的特性和改进。其中,ranges::iota、ranges::shift_left与ranges::shift_right这三个无约束算法的范围化版本(P2440R1)为处理序列数据提供了更加便捷和高效的方式。本文将详细介绍这三个算法的定义、功能、使用场景以及代码示例。
码事漫谈
2025/05/16
1940
C++23:ranges::iota、ranges::shift_left和ranges::shift_right详解
C++ vector越界问题完全解决方案:从基础防护到现代C++新特性
在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选。然而,数组越界访问始终是威胁程序稳定性的隐形杀手——它可能导致数据损坏、程序崩溃,甚至成为安全漏洞的入口。本文将从越界危害的底层原理出发,系统梳理从基础防护到现代C++新特性的全方位解决方案,帮助开发者构建安全、健壮的vector使用范式。
码事漫谈
2025/08/14
1250
C++ vector越界问题完全解决方案:从基础防护到现代C++新特性
深入理解C++11 std::iota:从原理到实践
std::iota是C++11标准库中引入的一个实用算法,定义在<numeric>头文件中。它的名字源于APL语言中的ι函数,用于生成连续递增的序列。相较于手动编写循环赋值,std::iota提供了更简洁、更具可读性的方式来初始化容器,是STL中不可或缺的工具函数之一。本文将从函数原型、工作原理、简化实现、使用示例到高级应用,全面解析std::iota的方方面面。
码事漫谈
2025/07/15
1300
深入理解C++11 std::iota:从原理到实践
C++20的四个模块新特性应用
它彻底改变了C++源码的组织方式,在项目的编写过程中,我们不必再区分.cpp和.h文件
zhqnb
2022/04/01
1K0
C++20的四个模块新特性应用
C++23 新视角:使用 std::views::as_const 提升范围的常量正确性
C++20 引入的范围库 (Ranges) 彻底改变了我们处理序列数据的方式,提供了更富有表现力、更易组合的抽象。然而,在处理范围的常量正确性 (const-correctness) 时,尤其是当视图 (views) 返回代理对象 (proxy objects) 或底层范围的常量迭代行为不尽如人意时,开发者们遇到了一些微妙的挑战。
码事漫谈
2025/05/07
1110
C++23 新视角:使用 std::views::as_const 提升范围的常量正确性
C++23 ranges::to:范围转换函数 (P1206R7)
在C++的发展历程中,每一个新版本都会带来一系列令人期待的新特性,C++23也不例外。其中,ranges::to 范围转换函数(P1206R7)的引入,为数据转换提供了更加便捷、高效的解决方案。本文将深入探讨 ranges::to 的定义、功能、使用场景以及其在实际编程中的优势。
码事漫谈
2025/05/14
1100
C++23 ranges::to:范围转换函数 (P1206R7)
解读C++即将迎来的重大更新(一):C++20的四大新特性
C++20 有很多更新,上图展示了 C++20 更新的概况。下面作者首先介绍 了 C++20 的编译器支持情况,然后介绍 The Big Four(四大新特性)以及核心语言方面的新特性。
机器之心
2020/02/12
1.8K0
解读C++即将迎来的重大更新(一):C++20的四大新特性
C++23 views::repeat (P2474R2) 深入解析
在C++的发展历程中,每一个新版本都会带来一系列令人期待的新特性,这些特性不仅提升了语言的性能和表达能力,还为开发者提供了更加便捷和高效的编程方式。C++23作为C++标准的一个重要版本,引入了许多实用的特性,其中views::repeat(提案编号P2474R2)就是一个非常有价值的特性,它与C++20引入的Ranges库紧密相关,为处理范围数据提供了新的视角和方法。
码事漫谈
2025/05/11
1140
C++23 views::repeat (P2474R2) 深入解析
C++一分钟之-范围基础:views与ranges
在现代C++中,ranges和views是C++20引入的重要特性,它们极大地丰富了标准库,并为编写更简洁、高效且易于理解的代码提供了强大的工具。本文将深入浅出地探讨ranges与views的基础概念、常见问题、易错点及避免策略,并通过代码示例加以说明。
Jimaks
2024/06/28
4630
探索 C++ 编程语言的深度魅力:语法、特性与实战
C++ 是一门横跨数十年的强大编程语言,融合了过程式和面向对象编程范式,在现代软件工程中仍扮演着重要角色。它被广泛应用于系统软件、嵌入式设备、游戏引擎、图形处理、数据库系统等高性能领域。相比 Python、Java 等现代语言,C++ 更加贴近硬件,掌控力强,适合对性能要求极高的系统开发。
用户11690575
2025/06/06
1400
STL算法(排序)简介mergesortrandom_shufflereverse
对指定范围内的元素随机调整次序 srand(time(0)); //设置随机种子
用户2929716
2018/08/23
3230
STL算法(排序)简介mergesortrandom_shufflereverse
C++23 新增的查找算法详解:ranges::find_last 系列函数
在 C++ 的发展历程中,每一个新版本都会带来一系列令人期待的新特性,C++23 也不例外。其中,ranges 库进一步增强,支持更多的范围操作,ranges::find_last、ranges::find_last_if 和 ranges::find_last_if_not 就是 ranges 库中新增的非常实用的算法。这些算法为开发者提供了更加便捷、高效的方式来查找序列中的元素,尤其是在需要从后往前查找元素的场景中。本文将详细介绍这三个算法的定义、功能、使用场景以及使用示例。
码事漫谈
2025/05/15
1590
C++23 新增的查找算法详解:ranges::find_last 系列函数
C++23 中的 views::chunk:深入探索与应用
C++23 标准引入了许多令人兴奋的新特性,其中 views::chunk 是一个非常实用的范围适配器(range adapter)。它允许我们将一个范围划分为多个固定大小的子范围(块),这在处理大量数据时非常有用,可以显著提高代码的可读性和效率。本文将深入探讨 views::chunk 的实现原理、使用场景以及与其他范围适配器的组合应用。
码事漫谈
2025/05/09
1140
C++23 中的 views::chunk:深入探索与应用
C/C++从0到1系统精讲 项目开发综合基础课
从零开始学习C/C++并进行项目综合开发是一个系统性的过程,涉及多个方面的知识和技能。以下是一个详细的指南,帮助你从基础到高级逐步掌握C/C++编程,并最终完成一个综合项目。
瘦瘦itazs和fun
2025/02/09
1260
C++20 范围库:开启现代 C++ 编程的新篇章
C++20 的发布为现代 C++ 编程带来了诸多革新,其中范围库(Ranges Library)的引入无疑是浓墨重彩的一笔。范围库是对算法和迭代器库的扩展与泛化,它通过提供更强大、更易用且不易出错的接口,极大地提升了 C++ 在处理序列数据时的表达能力和灵活性。本文将深入探讨 C++20 范围库的核心特性、使用方法以及它为开发者带来的实际好处。
码事漫谈
2025/04/07
2480
C++20 范围库:开启现代 C++ 编程的新篇章
C++23 views::chunk_by (P2443R1) 详解
在C++的发展历程中,每一个新版本都会带来一些令人期待的特性和改进。C++23作为C++20的增量更新,聚焦于简化代码、增强类型安全和填补功能缺口。其中,std::views::chunk_by 作为范围适配器的新成员,为我们处理数据序列提供了更加便捷和高效的方式。本文将详细介绍 std::views::chunk_by 的基本概念、特性、使用场景以及示例代码。
码事漫谈
2025/05/09
1310
C++23 views::chunk_by (P2443R1) 详解
C++23:修正常量迭代器、哨兵和范围
在C++的发展历程中,每一个新版本都带来了一系列令人期待的新特性,这些特性不仅提升了语言的性能和表达能力,还为开发者提供了更加便捷和高效的编程方式。C++23作为C++标准的一个重要版本,在很多方面进行了完善和优化。其中,对常量迭代器、哨兵和范围的修正,特别是ranges::cbegin和其他类似实用程序的改进,是值得关注的一个点。本文将深入探讨C++23在这方面的改进,以及提案P2278R4所带来的变化。
码事漫谈
2025/05/18
1190
C++23:修正常量迭代器、哨兵和范围
C++23 views::as_rvalue (P2446R2) 深入解析
在C++的发展历程中,每一个新版本都会带来一系列令人期待的新特性,这些特性不仅提升了语言的性能和表达能力,还为开发者提供了更加便捷和高效的编程方式。C++23作为C++标准的一个重要版本,也不例外。其中,views::as_rvalue(提案编号P2446R2)就是C++23引入的一个非常实用的特性,它与C++20引入的Ranges库紧密相关,为处理范围数据提供了新的视角和方法。
码事漫谈
2025/05/08
1110
C++23 views::as_rvalue (P2446R2) 深入解析
C++23 中的 ranges::fold_left:范围折叠算法
随着 C++23 的到来,标准库引入了一系列新的范围折叠算法,其中 ranges::fold_left 是一个非常强大的工具,用于对范围内的元素进行累积操作。它类似于 std::accumulate,但提供了更灵活的使用方式和更广泛的适用性。
码事漫谈
2025/05/16
1130
C++23 中的 ranges::fold_left:范围折叠算法
C++23 范围迭代器作为非范围算法的输入 (P2408R5)
在C++的发展历程中,每一个新版本都会带来一系列令人期待的新特性,这些特性不仅提升了语言的性能和表达能力,还为开发者提供了更加便捷和高效的编程方式。C++23作为C++标准的一个重要版本,引入了许多实用的特性,其中范围迭代器作为非范围算法的输入(P2408R5提案)就是一个非常有价值的特性,它为处理范围数据提供了新的视角和方法。
码事漫谈
2025/05/18
900
C++23 范围迭代器作为非范围算法的输入 (P2408R5)
推荐阅读
相关推荐
C++23:ranges::iota、ranges::shift_left和ranges::shift_right详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档