背景

前段时间在处理iOS端的HTTPDNS相关SDK,在接入和测试环节发现大家对HTTP的整体请求流程包括HTTP劫持原理以及HTTPDNS的工作原理并不是太清楚,所以写下这边文章帮助大家深入web请求过程:如何发起请求,HTTP协议解析,DNS域名解析。

HTTP发起一个请求过程

当我们在手机端请求一个@"www.baidu.com"的域名的时候

  • 1.请求到达运营商的DNS服务器并由其把这个域名解析成对应的IP地址。

  • 2.根据IP地址在互联网上找到对应的服务器,向这个服务器发起一个get\post请求。

  • 3.由这个服务器找到对应的资源原路返回给访问的用户。

这里只是一个大概的流程实际每一步都有复杂的结构和逻辑例如:服务器可能有很多台,到底指定哪台服务器来处理请求,需要一个负载均衡设备来平均分配所有用户的请求。请求的数据是存储在分布式缓存中还是一个静态文件中,或是在数据库里。当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如CSS、JS或者图片)时又会发起另外的HTTP请求,而这些请求很可能会在CDN上,那么CDN服务器上又会处理这个用户的请求。

HTTP劫持

我们使用HTTPDNS的主要目的就是解决HTTP劫持问题。HTTP的劫持分两种第一种是DNS劫持,第二种是内容劫持,后者是基于前者的基础上发展出来,是比较高级的劫持手段,目前无解,下面来分开讲解:

1:DNS劫持

  • 劫持流程
    DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。其实本质就是对DNS解析服务器做手脚,或者是使用伪造的DNS解析服务器可以通过下图来展示

                                                                                    DNS劫持原理

从图中可以看出红色的是劫持的流程,劫持后将你的请求转发到一个虚假的服务器。

  • 解决办法
    DNS的劫持过程是通过攻击运营商的解析服务器来达到目的。我们可以不用运营商的DNS解析而使用自己的解析服务器或者是提前在自己的App中将解析好的域名以IP的形式发出去就可以绕过运营商DNS解析,这样一来也避免了DNS劫持的问题。

2:内容劫持

  • 劫持流程
    内容劫持网上很少有提到,这也是在做httpDNS SDK所遇到的一个问题,其实内容劫持一开始的出发点是好的,是运营商为了加快用户的访问速度同时减少自己的流量损耗而做的一个缓存机制,用户在像服务器请求数据的时候运营商会把用户的请求转移到这个缓存池中,如果缓存中有就直接返回,没有的话再去像服务器请求然后拦截并缓存服务端给用户的回调数据,这样一来可以极大的降低运营商像服务器请求的次数,也能加快用户的访问,所以出发点是好,但是一些非法的商家对缓存池内部做一次些处理就是直接对返回的内容进行修改,这样一来我们就会接受到错误的数据

内容劫持黄色线条就是比较危险的了,因为回调的数据很可能已经被篡改过。

  • 解决办法:
    现在暂时没有发现办法,不过这样的劫持不是很多。

    DNS解析过程

    如果是iOS设备请直接跳到第三步骤

  • 1.系统会检查浏览器缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。浏览器缓存是受这个域名的失效时间和缓存的空间大小控制的。

  • 2.如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中即为本地的Host文件。

  • 3.如果本地Host文件中没有那么操作系统会把这个域名发送给这里设置的LocalDNS,也就是本地区的域名服务器。这个DNS通常都提供给你本地互联网接入的一个DNS解析服务。这个专门的域名解析服务器性能都会很好,它们一般都会缓存域名解析结果,当然缓存时间是受域名的失效时间控制的,一般缓存空间不是影响域名失效的主要因素。大约90%的域名解析都到这里就已经完成了,所以LDNS主要承担了域名的解析工作。

  • 4.如果LDNS仍然没有命中,就直接到Root Server域名服务器请求解析

  • 5.根域名服务器返回给本地域名服务器一个所查询的域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com,.cn、.org等。全球只有13台左右。

  • 6.本地域名服务器(Local DNS Server)再向上一步返回的gTLD服务器发送请求。

  • 7.接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成

  • 8.Name Server域名服务器会查询存储的域名和IP的映射关系表,正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器。

  • 9.返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。

  • 10.把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。
    以上的流程可以简化为下图

                                                                                      DNS解析

绿色的为非iOS设备的操作流程

CDN工作机制

CDN简介

CDN,全称Content Delivery Network,根本的作用是将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。他-有别于镜像,它比镜像更智能,可以这样做一个比喻:CDN=镜像(Mirror) + 缓存(cache) + 整体负载均衡(GSLB),因而,CDN可以明显提高Internet中信息流动的效率。目前CDN都以缓存网站中的静态数据为主,如CSS、JS、图片和静态网页等数据。用户在从主站服务器请求到动态内容后再从CDN上下载这些静态数据,从而加速网页数据内容的下载速度,如淘宝有90%以上的数据都是由CDN来提供的。这里引用一个网上比较形象的例子:A家的网速 100M的,但他只用了10M的速度,B家的网速是10M的,但是他需要15M的速度才行。怎么办呢。 C是一家CDN服务商,在A家有个节点(就像A是一个赞助商一样)B在C家买了CDN加速服务。当B的速度不够的时候,CDN加速就会选择有节余的节点来帮B,提高B的速度。这样B的速度就能达到或超过15M ,皆大欢喜。A没浪费,B速度有了,C赚了钱。 当C的节点在全国都有,非常多的时候。那么你用C家的CDN加速服务,你就会健步如飞了

CDN工作流程

一个用户访问某个静态文件(如CSS),这个静态文件的域名假如是www.baidu.com,而这个域名最终会被指向CDN全局中CDN负载均衡服务器,再由这个负载均衡服务器来最终分配是哪个地方的访问用户,返回给离这个访问用户最近的CDN节点。之后用户就直接去这个CDN节点访问这个静态文件了,如果这个节点中请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。

负载均衡

负载均衡就是对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器等,共同完成工作任务。它可以提高服务器响应速度及利用效率,避免软件或者硬件模块出现单点失效,解决网络拥塞问题,实现地理位置无关性,为用户提供较一致的访问质量。
CDN整体的工作流程可以大概归为下图:

深入理解Http请求、DNS劫持与解析相关推荐

  1. 恋与制作人 服务器错误,恋与制作人登陆不了怎么办 登录失败无法登录DNS劫持全解析...

    恋与制作人登陆不了.进不去游戏怎么办?游戏更新后登陆失败进不去了是什么情况呢?针对恋与制作人登录失败.无法登陆的问题,官方近日特给出了各种情况详细说明,并发现有DNS劫持的情况.遇到登录失败的朋友,大 ...

  2. 第33篇:DNS劫持攻击原理讲解及溯源分析的常规步骤

     Part1 前言  在世界杯举办期间,DNS劫持事件估计会和链路劫持事件一样,风险提升很多.上期分享了一篇<第32篇:某运营商链路劫持(被挂博彩页)溯源异常路由节点(上篇)>,本期就讲一 ...

  3. DNS劫持DNSmasq详细解析及详细配置

    2019独角兽企业重金招聘Python工程师标准>>> 常用于测试使用,安装环境为MacOS 一.Dnsmasq介绍 Dnsmasq 提供 DNS 缓存和 DHCP 服务功能.作为域 ...

  4. 什么是 DNS 劫持、投毒、解析?看这文就懂了!

    作者 | 寒食君 [CSDN编者按]对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑.手机.电视这些设备到底是如何被"连接"起来的.本文通过"我",一个普 ...

  5. ios开发防止App被抓包(一句话实现iOS应用底层所有网络请求拦截(如ajax请求拦截),包含http-dns解决方法,有效防止DNS劫持,用于分析http,https请求,禁用/允许代理,防抓包)

    ZXRequestBlock 安装 通过CocoaPods安装 pod 'ZXRequestBlock' 手动导入 将ZXRequestBlock拖入项目中. 导入头文件 #import " ...

  6. 详解DNS服务、DNS解析、DNS劫持和污染

    简介 DNS(全称:Domain Name System,中文:域名系统)是互联网的一项服务.它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.1 前言 要想弄清楚 D ...

  7. 深入理解WEB请求过程

    随着web2.0时代的到来,互联网的网络架构已经从传统的C/S架构转变成更加方便快捷的B/S架构,B/S架构大大简化了用户使用网络应用的难度,带来了以下两方面的好处: 1.客户端使用统一的浏览器.由于 ...

  8. 清除dns缓存命令行_怎么防止移动dns劫持,防止移动dns劫持要先了解什么是dns劫持...

    本人以网络技术出身,近两年接触CDN网络,处理了一些CDN方面的网络问题,大多数以运营商丢包,延迟抖动为主,也处理一些硬件故障,比如机械硬盘的读写io测试,内存条兼容性测试,服务器IPMI规划等.这篇 ...

  9. Windows实验——DNS劫持演练

    一.实验环境 钓鱼网站:虚拟机Windows Server 2008的缺省网站     IP:192.168.43.44 攻击者:物理机Win 10                          ...

最新文章

  1. usaco Fence Loops
  2. 实现Ant Design 自定义表单组件
  3. jsp验证身份证号并自动计算年龄和出生日期
  4. linux文件指令 例子,Linux 命令:文件目录操作与实例
  5. 守护进程和inetd超级服务器
  6. Rust: match 与ref
  7. 非负矩阵分解小白入门
  8. Python配置清华镜像源
  9. 【中级】2017项目集成管理工程师备考第五章-立项管理(上)
  10. vue实现一个类似浏览器搜索功能(ctrl + f)
  11. media在HTML中作用,web前端:关于css中@media的一些基本使用
  12. 通达信公式-接近均线
  13. 万门大学MySQL特训班_如何评价万门大学「理论物理一月特训班」?
  14. js网页3D雪花特效插件(导入直接使用,参数齐全)
  15. 信捷pLC C语言错误格式,信捷PLC常见问题及处理方法大全
  16. 大数据风控---Credit Kama商业模式分析
  17. HIVE学习系列——Hive操作
  18. 慕课网视频中的代码---3-4 Minst手写体识别
  19. 读书笔记:《启示录》
  20. Python-14:爬虫之正则表达式1

热门文章

  1. xftp无法连接到虚拟机
  2. 利用 Python 进行数据分析 (一):IPython 及 Jupyter notebook
  3. Windows上安装Linux
  4. arthas 热更新
  5. android 添加 iconv 支持
  6. android简单实现表格布局,Android开发中TableLayout表格布局
  7. 计算机二级Python真题(七)
  8. 外网电脑配置8G运行内存,运行Android Studio,速度很轻松
  9. 鸿蒙系统运行内存为啥只有8g,为什么手机运存是8G的,但是可用却只有5G?
  10. 2019阿里巴巴技术面试题集锦!(附答案)