深入理解Http协议

1. HTTP概述

HTTP是一种允许获取资源的协议,例如HTML文档。 它是Web上的任何数据交换和客户端 - 服务器协议的基础,这意味着请求由接收者(通常是Web浏览器)发起。 一个完整的文档是根据不同的子文档重新获得的,例如文本,布局描述,图像,视频,脚本等等。
通常我们通过http协议获取如下的内容.


image.png

客户和服务器通过交换单个消息进行通信(而不是数据流)。 客户端发送的消息(通常是Web浏览器)称为请求,服务器发送的消息作为答复称为响应。整个协议层次图如下.


image.png
2. 基于HTTP协议的系统的组件

HTTP是一种客户端 - 服务器协议:请求由一个实体,用户代理(或代表它的代理)发送。 大多数情况下,用户代理是一个Web浏览器,但它可以是任何东西,例如抓取Web以填充和维护搜索引擎索引的机器人。


image.png
  • Client: the user-agent
    用户代理是代表用户行事的任何工具。 这个角色主要由Web浏览器执行; 一些例外情况是工程师使用的程序和Web开发人员调试其应用程序。一般来说,浏览器始终是请求的开始.
  • Proxies
    在Web浏览器和服务器之间,许多计算机和机器都会转发HTTP消息。 由于Web堆栈的分层结构,其中大多数可以在传输层,网络层或物理层进行操作,在HTTP层变得透明,并可能对性能产生重大影响。 那些在应用层操作的通常称为代理。 这些可以是透明的,也可以不是(改变请求不通过它们),并且可以执行许多功能:
    (1) 缓存(缓存可以是公共或私人的,如浏览器缓存)
    (2) 过滤(如防病毒扫描,家长控制......)
    (3) 负载平衡(允许多个服务器为不同的请求提供服务)
    (4) 认证(控制对不同资源的访问)
    (5) 日志记录(允许存储历史信息)
  • Web server
    在通信通道的另一侧,是服务器,它按照客户的要求提供文档。 一台服务器虚拟出现的只是一台机器:这是因为它可能实际上是一组服务器,共享负载(负载平衡)或一个复杂的软件,询问其他计算机(如缓存,数据库服务器,电子商务服务器 ,...),完全或部分按需生成文档。
3. HTTP协议的基本特性
  • HTTP协议是简单的
    HTTP通常被设计为简单且可读的,HTTP消息可以被人阅读和理解,提供更简单的开发人员测试,并降低新手的复杂度。
  • HTTP是可拓展的
    在HTTP / 1.0中引入HTTP头使得该协议易于扩展和实验。 新功能甚至可以通过客户端和服务器之间关于新头的语义的简单协议来引入。
  • HTTP是无状态的,但不是无会话的
    HTTP是无状态的:两个请求之间没有连续的连接。 这对于尝试连贯地与某些页面进行交互的用户(例如,使用电子商务购物篮)来说可能会产生问题。 但HTTP本身的核心是无状态的,HTTP cookie允许使用有状态会话。 使用头可扩展性,HTTP Cookies被添加到工作流中,允许在每个HTTP请求上创建会话以共享相同的上下文或相同的状态。
  • HTTP 和连接
    连接在传输层进行控制,因此基本上超出了HTTP的范围。 虽然HTTP不需要基础传输协议是基于连接的; 只要求它是可靠的,或不会丢失消息(至少不出现错误)。 在互联网上最常见的两种传输协议中,TCP是可靠的,而UDP不是。 HTTP随后依赖基于连接的TCP标准,即使不总是需要连接。
    HTTP / 1.0为每个请求/响应交换打开了一个TCP连接,这有了两个主要缺陷:打开一个连接需要几次往返消息,因此速度较慢,但在发送多条消息时变得更高效,并定期发送:热连接 比冷的更有效率。
    为了减轻这些缺陷,HTTP / 1.1引入了Pipeline(难以实现)和持久连接:底层TCP连接可以使用Connection头部分控制(connection:keep-alive)。 HTTP / 2更进一步,通过在单个连接上复用消息(多路复用),使得更高效。
4. HTTP可控的特性
  • Cache
    如何缓存文档可以通过HTTP进行控制。 服务器可以指示代理和客户端,缓存的内容和时间。 客户端可以指示中间缓存代理忽略存储的文档。
  • 放宽源的限制
    为防止窥探和其他隐私入侵,Web浏览器强制严格分开不同的网站。 只有来自同一来源的页面才能访问网页的所有信息。 虽然这样的约束对服务器来说是一种负担,但HTTP头可以放宽服务器端的严格分离,从而使文档成为来自不同域的信息的拼凑体(甚至可能存在与安全相关的原因)。
  • 认证
    某些页面可能受到保护,因此只有特定的用户才能访问它。 基本认证可以由HTTP提供,或者使用WWW-Authenticate和类似的头部,或者通过使用HTTP cookie设置特定的会话。
  • 代理和隧道
    代理服务器和隧道服务器和/或客户端通常位于内联网上并向其他人隐藏其真实IP地址。 HTTP请求然后通过代理来跨越这个网络障碍。 并非所有的代理都是HTTP代理。 例如,SOCKS协议的运行水平较低。 其他的,比如ftp,可以由这些代理来处理。
  • 会话
    使用HTTP cookies可以将请求与服务器的状态关联起来。 尽管基本HTTP是一种无状态协议,但这会创建会话。 这不仅适用于购物车,而且适用于允许用户配置输出的任何站点。
5. HTTP流动

当客户想要与服务器通信时,无论是最终服务器还是中间代理,它都会执行以下步骤:

  • 打开TCP连接:TCP连接将用于发送一个或多个请求并接收答案。 客户端可能会打开一个新的连接,重新使用现有的连接,或打开多个到服务器的TCP连接。
  • 发送HTTP消息:HTTP消息(在HTTP / 2之前)是可读的。 对于HTTP / 2,这些简单的消息被封装在frame中,使得它们不可能直接读取,但原理是一样的。


    image.png
  • 读取服务端发来的响应


    image.png
  • 关闭连接或者为下一次重用连接
    如果HTTP pipeline被激活,则可以发送多个请求而无需等待第一个响应被完全接收。 HTTP pipeline已被证明难以在现有网络中实现,在现有网络中,旧版软件与现代版本共存。 HTTP流水线已经在HTTP / 2中被一个帧中更强大的多路复用请求所取代。
6. HTTP消息

HTTP / 1.1和更早版本的HTTP消息是人类可读的。 在HTTP / 2中,这些消息被嵌入到一个新的二进制结构,一个框架中,允许优化压缩报头和复用。 即使在这个版本的HTTP中只发送了部分原始HTTP消息,每个消息的语义仍然保持不变,客户端重新构建(虚拟)原始的HTTP / 1.1请求。 因此,理解HTTP / 1.1格式的HTTP / 2消息很有用。

  • 请求消息


    image.png

    (1) 一种HTTP方法,通常是一种动词,如GET,POST或像OPTIONS或HEAD这样的名词,它定义客户想要执行的操作。 通常,客户想要获取资源(使用GET)或张贴HTML表单的值(使用POST),但在其他情况下可能需要更多的操作。
    (2) 要获取的资源的路径; 例如没有协议(http://),域(这里是developer.mozilla.org)或TCP端口(这里是80),从上下文中显而易见的元素中去除资源的URL。
    (3) HTTP协议的版本
    (4) 可选的头部字段为服务器提供更多可用的信息
    (5) 一个可选的请求体,对于一些像POST这样的方法,需要在请求体中添加参数

  • 响应消息


    image.png

    (1) HTTP版本号
    (2) 响应码

1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
(3) 响应消息码所代表的意思
(4) HTTP头部(与请求消息体一样)
(5) 可选的由服务器返回的资源

参考文档:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

延伸阅读(参考我的两篇文章)
HTTP/2 新特性总结
深入理解HTTPS协议

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,337评论 6 152
  • 我们一直畏首畏尾 不愿向前 只愿守住眼前的利益 不愿踏入未知 说着老生常谈的话 活着战战兢兢 你在怕什么 错了,又...
    小木木爱毛毛虫阅读 242评论 1 3
  • 文丨林下生风 西藏——一个神秘的地方,那里有世界上最高的山脉,那里是世界上最高的一片土地,那里有令人神往的佛教圣地...
    林下生风阅读 569评论 9 6
  • 2009-12-20 22:11:16 《漫步华尔街》这本书相当有名,国内出版也有些时日了(我看的版本是02年版的...
    大大花生阅读 229评论 0 2