(技术文章翻译)http 链接管理(一)

本贴最后更新于 3884 天前,其中的信息可能已经渤澥桑田

http规范把http报文解释的很清楚,但是对http链接却介绍的不是很多。http连接是http报文传输的关键通道。你如果是一个http应用程序员,你需要理解http连接并且学会使用它们。

http管理有点像是魔术,学习它们应当从实际工作中的经验与实践,而不仅仅是出版的文献中。通过本章可以了解到:

http是如何使用tcp连接的

tcp的延时,阻塞。以及存在的障碍。

http的优化,包括并行连接,keep-alive持久连接和管道化连接

管道连接应该做和不应该做的事情

tcp连接

世界上所有的http通信都是承载上tcp、ip上的。tcp/ip是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集。客户端程序一旦开启一个tcp/ip的连接,就可能连接到世界上任何地方打开的服务器应用程序。一旦连接建立起来。报文就可以在服务器和客户端之间进行交换。

并且不会丢失,损坏,失序。比如你想看某一个网页

http:www.oldcaptain.cc/index.html

浏览器收到这个url,浏览器将会执行如果4-1的步骤,服务器的ip地址,和端口号,将会从url中分离出来。和web服务器建立tcp连接发生在第四步,一个request的报文通过连接在第5步进行发送。response在第6步收到,在第7步关闭连接

http4-1

tcp的可靠数据管道

http连接实际上就是使用的tcp连接,已经tcp的一些规则。tcp连接是可靠的internet协议。要想正确,快速的发送数据,就需要了解tcp的一些基本知识。tcp为http提供了一个可靠的比特传送管道。tcp一端发送的数据,会从另一端按照原有的顺序发送出来。

  http4-2

tcp流逝分段的,由ip分组传送

tcp数据是通过名为ip分组(或ip数据报)的小数据块来发送的。这样的话如图4-3就是一个http-tcpoverip的协议栈,https就是在http与tcp中间插入tls或者ssl层

http4-3.png

当http想要传输消息时,会以流的形式包含数据然后打开一个tcp连接,tcp可以将其分割成小块的数据块。并且将数据再封装为ip包,请看图4-4,这副图展现了tcp、ip协议族的处理,http程序员看不到底层封装细节。

每个tcp包都有ip分组承载。从一个ip地址发送到另外一个ip地址每个ip分组都包括:

一个ip分组首部(包含20个字节)

一个tcp段首部(通常为20个字节)

一个tcp数据块(0个或多个字节)

ip首部包含了源和目的ip地址,长度和其他一些标记。tcp段的首部包含了tcp端口号,tcp控制标记,以及适用于数据排序和完整检查的一些数字

http4-4.PNG

  • HTTP
    75 引用 • 127 回帖 • 1 关注
  • 翻译
    57 引用 • 83 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    163 引用 • 1450 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 2 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖 • 1 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 192 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖 • 1 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 562 关注
  • V2Ray
    1 引用 • 15 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 454 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 93 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖 • 1 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    396 引用 • 3416 回帖
  • 笔记

    好记性不如烂笔头。

    303 引用 • 777 回帖 • 1 关注
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    15 引用 • 6 回帖 • 25 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 3 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 9 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 2 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 177 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 3 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 16 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 34 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 26 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    228 引用 • 1450 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    96 引用 • 330 回帖 • 1 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用