网络请求避坑,2021新规范-私有网络请求(Private Network Access)

简介: 网络请求,大家肯定熟悉的不能再熟悉,网络请求失败,大家也肯定很熟悉。排查网络请求,也是我们必备的技能,对不,兄弟。我坦言,最怕两种网络请求失败。第一种:PC端模拟没有异常,到手机上 eruda, vconsole等网络请求信息空白。这种,就比较头大一点了,可能需要设置手机的网络代理 + 抓包工具 去排查。第二种: Provisional headers are shown这种也是比较头疼的,虽然网络有很多文章讲了排查之道,很多时候不太好使,这一回,也不生效。今天,出场的嘉宾比较特别:Private Network Access 翻译成中文,就是私有网络请求,开始正文

1.JPG


前言



网络请求,大家肯定熟悉的不能再熟悉,网络请求失败,大家也肯定很熟悉。排查网络请求,也是我们必备的技能,对不,兄弟。


我坦言,最怕两种网络请求失败。


  1. 第一种:PC端模拟没有异常,到手机上 eruda, vconsole等网络请求信息空白。
    这种,就比较头大一点了,可能需要设置手机的网络代理 + 抓包工具 去排查。


  1. 第二种: Provisional headers are shown
    这种也是比较头疼的,虽然网络有很多文章讲了排查之道,很多时候不太好使,这一回,也不生效。


今天,出场的嘉宾比较特别:Private Network Access 翻译成中文,就是私有网络请求,开始正文吧。


起因经过



看要点:


  1. 本地(个人电脑)开发
  2. 启动一个web项目,页面是http协议,类似 http://localhost:9093
  3. webview 打开 CDN(源站阿里OSS)的一个动页面
  4. 活动页面请求一个开启了cors的局域网接口
    类似: http://192.168.19.87:11606/como/flags


浏览器信息: chrome x64 95

2.JPG


获取如下结果信息,并且爆出异常


网络请求列表信息:


3.JPG


网络请求详情信息:


4.JPG


然后,我就一顿操作,最初怀疑 Referrer Policy 和这个所谓的 Provisional headers are shown, 经历下面得操作。


修改h5活动refer策略


<meta name="referrer" content="no-referrer">
复制代码


www.jianshu.com/p/265124755…

失败告终


关闭 chrome://flags/#site-isolation-trial-opt-out 等等


CAUTION: provisional headers are shown" in Chrome debugger

失败告终


其他尝试


  1. 给本地web项目配置域名(修改localhost)失败
  2. 用360浏览器打开web项目,网络请求成功 成功
  3. 把请求copy as fetch,放到控制台执行 成功
  4. 本地启动一个网站模拟活动页面,执行相同的网络请求 成功


到这里,我就有点迷糊了,本地启动一个页面,调用相同的接口能成功? CDN上不能成功,难不成和CDN的策略有关系?


这就难办了,内心另外一个声音响起,应该还是和这个cors有关系, 受到CAUTION: provisional headers are shown" in Chrome debugger 启发,应该还是和某个选项有关?


于是我打开 chrome://flags/ 面板,搜索 cors


意外的收获




发现一个选项, Block insecure private network requests, 第一句的意思是 防止非安全上下文向更私有的 IP 地址发出子资源请求, 哦,虽然还不太懂,感觉很有用的样子。

5.JPG6.JPG


办他,重启??

居然,好了,眼泪都要出来了,因为就这个事,放了好几天,近来觉得

心里这个坎过不去!

心里这个坎过不去!

心里这个坎过不去!

一个不小心过去了,没牵挂了,我要吃饭去了,别拦着我。


之前有提到,360浏览器并无此问题,那么chrome又是从哪个版本开始实现了这个特性。 经过查询google文献,最终确认是** 94**,也就是低于此版本的浏览器不会受到

影响。


发布于2021年8月的Private Network Access update: Introducing a deprecation trial


根本原因 Private Network Access(私有网络请求)



网络异常,图片无法展示
|


先完全翻一下这个特性的描述:

防止非安全上下文向更私有的 IP 地址发出子资源请求。如果1) ip1是本地主机,而 ip2不是,或者2) ip1是私有的,而 ip2是公共的,那么 IP 地址 ip1比 ip2更私有。这是全面实施 cors-rfc1918的第一步: wicg.github.io/cors-rfc191…


顿悟, 防止向更私有的ip地址发出资源请求。

活动页面在CDN,属于公网


网络请求http://192.168.19.87:11606/como/flags, 属于局域网

公网向局域网请求,就是向私有的网络请求, 所以被 ban 了。


打开特性说明中的链接, 跳转到协议地址: wicg.github.io/private-net…


再补充一些知识 ,网络大致上我们分为

  1. local (本机)
  2. private(私有网络)
  3. public (公网)


私有程度 local > private > public


一图胜千文:

7.JPG


当然,更多相关知识,请参见 Private Network Access


三个问题



  1. 被 Private Network Access 策略拦截导致的请求,有没有发送到服务端
  2. 局域网向本地机器发送网络请求,能不能成功
  3. 除了关闭chrome的Block insecure private network requests特性外,还有没有别的方式解决此问题

小结



8.JPG 这个协议,是2021年6月份起草的,不得不说chrome你是真的牛X。


这也就能解释,为什么 360浏览器能网络求情能够成功。


私有网络请求,确实从一定程度保护了安全。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云专有网络VPC使用教程
专有网络VPC可以帮助您基于阿里云构建出一个隔离的网络环境,并可以自定义IP 地址范围、网段、路由表和网关等;此外,也可以通过专线/VPN/GRE等连接方式实现云上VPC与传统IDC的互联,构建混合云业务。 产品详情:https://www.aliyun.com/product/vpc
相关文章
|
2月前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【7月更文挑战第31天】互联网的发展使网络编程成为软件开发的关键部分. Python以简洁、功能强大著称, 在此领域尤显突出. `urllib`作为标准库, 自Python初期便支持URL处理, 如读取URL (`urllib.request`) 和解析 (`urllib.parse`). 尽管API底层, 但奠定了网络编程基础.
39 4
|
3天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
21 7
|
7天前
|
存储 JSON Ubuntu
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
|
14天前
|
Java API UED
【实战秘籍】Spring Boot开发者的福音:掌握网络防抖动,告别无效请求,提升用户体验!
【8月更文挑战第29天】网络防抖动技术能有效处理频繁触发的事件或请求,避免资源浪费,提升系统响应速度与用户体验。本文介绍如何在Spring Boot中实现防抖动,并提供代码示例。通过使用ScheduledExecutorService,可轻松实现延迟执行功能,确保仅在用户停止输入后才触发操作,大幅减少服务器负载。此外,还可利用`@Async`注解简化异步处理逻辑。防抖动是优化应用性能的关键策略,有助于打造高效稳定的软件系统。
29 2
|
26天前
|
JSON API 数据格式
Python网络编程:HTTP请求(requests模块)
在现代编程中,HTTP请求几乎无处不在。无论是数据抓取、API调用还是与远程服务器进行交互,HTTP请求都是不可或缺的一部分。在Python中,requests模块被广泛认为是发送HTTP请求的最简便和强大的工具之一。本文将详细介绍requests模块的功能,并通过一个综合示例展示其应用。
|
20天前
|
网络协议 安全 前端开发
【应用服务 App Service】Azure 应用服务测试网络访问其他域名及请求超时限制(4分钟 ≈ 230秒)
【应用服务 App Service】Azure 应用服务测试网络访问其他域名及请求超时限制(4分钟 ≈ 230秒)
|
11天前
|
测试技术 持续交付 开发者
Xamarin 高效移动应用测试最佳实践大揭秘,从框架选择到持续集成,让你的应用质量无敌!
【8月更文挑战第31天】竞争激烈的移动应用市场,Xamarin 作为一款优秀的跨平台开发工具,提供了包括单元测试、集成测试及 UI 测试在内的全面测试方案。借助 Xamarin.UITest 框架,开发者能便捷地用 C# 编写测试案例,如登录功能测试;通过 Xamarin 模拟框架,则可在无需真实设备的情况下模拟各种环境测试应用表现;Xamarin.TestCloud 则支持在真实设备上执行自动化测试,确保应用兼容性。结合持续集成与部署策略,进一步提升测试效率与应用质量。掌握 Xamarin 的测试最佳实践,对确保应用稳定性和优化用户体验至关重要。
24 0
|
18天前
|
存储 Linux 网络安全
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
|
18天前
|
网络协议 Linux Shell
【Azure 应用服务】App Service For Linux 中安装paping, 用于验证从App Service向外请求的网络连通性
【Azure 应用服务】App Service For Linux 中安装paping, 用于验证从App Service向外请求的网络连通性