专栏首页Java技术栈Web 协议的 7 个困惑,大佬带你全部解开!

Web 协议的 7 个困惑,大佬带你全部解开!

我发现大部分技术人,多多少少都会遇到 Web 协议的困惑,比如以下七个:

  1. AJAX 跨域访问时总被浏览器的同源策略阻止,其背后的原理及符合其设计思想的解决方案是什么?
  2. 缓存可以提升性能,但什么样的 HTTP 消息才会被浏览器或者代理服务器缓存呢?
  3. 抓包时收到 4xx 或者 5xx HTTP 响应码,这意味着服务器端发生了什么?
  4. 当我们维护 HTTPS 连接时,如果要优化TLS/SSL 的卸载性能,应该从哪里入手?
  5. 定位问题时,发现本地的 TCP 连接状态中出现了FIN_WAIT、CLOSE_WAIT 或者TIME_WAIT,都是什么原因引起的?应该如何解决?
  6. 想要提升 TCP 连接的传输速度,可服务器上相关的系统参数多达数十个,究竟该怎么调整?
  7. 时下逐渐普及的 IPv6 ,在报文上到底与 IPv4 协议有何差别?

你会发现,这些问题其实都和 Web 协议密切相关。我常常听到身边人抱怨“学不动了”,之所以会这样,大多是因为没有掌握好互联网体系中的底层知识。

这些知识点相对稳定,而其他时刻变化的知识点是构建在这些知识点之上的。一旦掌握好,就可以长久使用,并且保持快速学习的能力。

Web 协议就是其中非常重要的一个模块。虽然它常常要兼容 internet 中非常古老或者有着突破性创新的浏览器或者服务器,从而也在时刻进化,但只要我们抓住它设计时背后的指导原则,系统地将 Web 协议转化为我们头脑中的结构体知识,就可以对我们学习前后端开发框架、面向连接的编程语言、各种分布式组件、架构设计、微服务编程等都起到事半功倍的效果。

可以说,无论你是前后端工程师,还是运维测试,如果想面试更高的职位,或者要站在更高的角度去理解技术业务架构,并能在问题出现时快速、高效地解决问题,Web 协议一定是你绕不过去的一道坎。熟练掌握各种常用 Web 协议,可以帮你在工作中轻松应对各种网络难题。

  • 如果你是前端工程师,可以快速定位问题的根源在后端还是前端,对网页性能的提升会有更多的思路。
  • 如果你是后端工程师,可以更清晰地理解Web容器的工作原理,在网络层面快速缩小问题范围。
  • 如果你是运维工程师,可以更明确地规划硬件及网络资源,对于故障节点的恢复也会有更系统的解决方案。
  • 如果你是测试工程师,可以对压测工具的原理有更深入的理解,对RPC测试用例的构造也会更全面。
  • 如果你是架构师,将会对分布式系统下的高可用架构设计和性能优化等问题有更加体系化的认识。

可是,想要真正掌握 Web 协议,并没有想象中那么容易。我发现大部分人在学习时,都卡在下面这些问题上:

  • Web协议的体系庞大,大多概念过于抽象,导致初学者很容易从入门到放弃。
  • 很难快速上手,就算弄懂了复杂的概念,工作中一遇到复杂问题,还是一头雾水,不知道如何下手。
  • 网上有很多文章可以参考,但要不就是知识点零散,要不就是解释得蜻蜓点水,无法深入到底层。
  • 市面上相关的课程很少,要不就是仅仅讲述某一个协议,要不就是只从理论出发来讲解,实战性不强。

除此之外,很少有人会在文章或课程里通过抓包去把 Web 协议的各个细节呈现出来,然后掰开揉碎了讲给大家。

1. 深入理解常用 Web 协议

课程将基于应用场景深入介绍Web协议栈中最常用的HTTP/1.1、Websocket、HTTP/2.0、TLS/SSL、TCP、IP协议,这些协议处在 OSI 网络栈中的不同层级,每一层对上层协议封装、隐藏其下层协议的实现细节,而上层协议必须理解其相邻下层协议解决了什么问题,有哪些约束条件。陶辉老师会带你自上而下的学习这些协议的语法、应用场景,以建立起结构体的知识体系。

2. 快速定位和解决网络疑难杂症

网络问题最为复杂,它涉及到多样化的客户端、技术相对封闭的网络设备、层层可能修改消息的代理服务器、快速迭代中的源服务器等,当客户端与服务器由于编程、配置错误造成系统故障时,相比在某一端使用经验式的排除法查错,从网络层面定位问题更为科学、快速而有效。

3. 掌握常见抓包工具及报文分析方法

对于HTTP报文的抓包实践,主要使用 Chrome 浏览器提供的开发者工具 Network 面板,同时也将使用到 curl、telnet 命令行来模拟 HTTP 请求的发送。Wireshark是这门课程的主要抓包工具,包括过滤器、各面板的使用、如何基于统计分析报文等。对于服务器端的抓包我们会使用 tcpdump工具,并配合 Wireshark 分析报文。

4. 熟悉 Web 协议的架构和设计原则

HTTP 最初用于解决人与机器的通讯,了解指导其设计原则的REST架构,就能理解在空间上它如何应对全球性的巨型分布式网络,在时间上如何应对数十年的技术变迁。

在分层架构下各层都有其待解决的核心问题,TLS/SSL协议面对的是如何使用非对称加密协商密钥及验证身份,TCP协议面对的则是可控流量下的可靠传输,IP协议则关注报文在主机间的可达性,带着这些需求及约束,便可从容应对变化。

本文分享自微信公众号 - Java技术栈(javastack)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 教你优雅地解密HTTPS流量

    Web 安全是一项系统工程,任何细微疏忽都可能导致整个安全堡垒土崩瓦解。拿 HTTPS 来说,它的「内容加密、数据完整性、身份认证」三大安全保证,也会受到非法根...

    黄泽杰
  • monit介绍和配置 原

        monit监控和管理进程、程序、文件、目录和Unix系统的文件的工具。可以进行自动维护和修理,在错误的情况下执行有意义的因果关系的行动。比如,某个进程没...

    拓荒者
  • 腾讯云服务器从搭建到应用上线全流程介绍

    云服务器是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其管理方式比物理服务器更简单高效。用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器。云服...

    tengxunyun8点com活动整理
  • Go 1.12 正式版发布

    Go 1.12 正式版发布了,距离上个正式发布版 Go 1.11 已经过去半年。跟往常一样,Go 1.12 保持了 Go 1 的兼容性承诺,预期所有 Go 程序...

    李海彬
  • Apache 提权漏洞(CVE-2019-0211)复现

    本月Apache被公布了一个提权的漏洞,并且前天在GitHub上公布出了利用脚本,这几天我负责漏洞应急这个漏洞。

    Seebug漏洞平台
  • 手动升级 Confluence 6 - 升级以后

    如果你的 Confluence 安装实例在 Windows 中是以服务来运行的话,你需要删除已经存在的 Windows 服务,然后重新安装 Windows 服务...

    HoneyMoose
  • 「docker实战篇」python的docker-破解中间人无法联网之ssl pining技术分析与xponsed安装(20)

    1.根据浏览器或者说是操作系统(android)自带的证书链 2.使用自签名证书 3.自签名证书加上SSL pinning特性

    IT故事会
  • 谈谈 HTTP/2 的协议协商机制

    在过去的几个月里,我写了很多有关 HTTP/2 的文章,也做过好几场相关分享。我在向大家介绍 HTTP/2 的过程中,有一些问题经常会被问到。例如要部署 HTT...

    黄泽杰
  • 宝塔面板一键快速安装Let's Encrypt免费SSL证书

    以前我们可能都清楚,如果是商业网站,或者是有交互用户的网站必须要使用HTTPS加密使得数据传输安全,且那时候SSL证书成本也是比较高的,个人肯定也没有必要或者成...

    老蒋
  • HTTP 2还没上手,HTTP 3已经箭在弦上

    去年的这个时候,国内的 web 网络环境开始普及和部署 HTTP/2. 时隔一年,HTTP/2 的普及程度有了显著提升,而各大CDN厂商普及的广度和速度一直走在...

    黄泽杰

扫码关注云+社区

领取腾讯云代金券