HTTP概述

HTTP(Hypertext Transfer Protocol超文本传输协议)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它主要是为Web 浏览器与 Web 服务器之间的通信。
HTTP 遵循经典的客户端-服务端(C/S)模型,客户端(Requests,如浏览器)打开一个连接以发出请求,然后等待直到收到服务器端(Responses)响应。

HTTP通信模型.png

参考文档

MDNHTTP菜鸟教程HTTP

客户端:user-agent

user-agent 就是任何能够为用户发起行为的工具。这个角色通常都是由浏览器移动应用等来扮演。浏览器来负责发送HTTP请求,并进一步解析HTTP返回的消息,以向用户提供明确的响应。

服务器端:Server

Server提供客户端所请求的文档、数据等。Server只是虚拟意义上代表一个机器:它可以是共享负载(负载均衡)的一组服务器组成的计算机集群,也可以是一种复杂的软件,通过向其他计算机(如缓存,数据库服务器,电子商务服务器 ...)发起请求来获取部分或全部资源。

代理:Proxies

在浏览器和服务器之间,有许多计算机和其他设备转发了HTTP消息。它们大多数在传输层、网路层、数据链路层和物理层上,对HTTP应用层是透明的【会影响应用层】。还有一部分是表现在应用层上的,被称为代理(Proxies)。代理(Proxies)既可以表现得透明,又可以不透明(“改变请求”会通过它们)。代理主要有如下几种作用:

  • 缓存(可以是公开的也可以是私有的,像浏览器的缓存)
  • 过滤(像反病毒扫描,家长控制...)
  • 负载均衡(让多个服务器服务不同的请求)
  • 认证(对不同资源进行权限管理)
  • 日志记录(允许存储历史信息)

HTTP的特点:

  • HTTP是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    如果我们需要保持长连接,可以使用websocket进行实现。

在客户端(通常指浏览器)与服务器能够交互(客户端发起请求,服务器返回响应)之前,必须在这两者间建立一个 TCP 连接,打开一个 TCP 连接需要多次往返交换消息(因此耗时)。HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接。HTTP/1.1 中TCP连接可以通过Connection头部来进行控制,即多个HTTP请求复用同一个TCP连接。 HTTP/2则发展得更远,通过在一个连接复用消息的方式来让这个连接始终保持为暖连接。
HTTP依赖面向连接的TCP进行消息传递。

  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

  • HTTP是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的。HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。

    【无状态的好处】
    1.每次连接传输的数据量小
    2.不需要前面之前的状态获取消息时,响应速度快
    3.如果需要状态保持,我们可以使用HTTP的头部扩展——HTTP Cookies解决无状态这个特征。把Cookies添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。

HTTP流

当http流水线启动时,后续请求都可以不用等待第一个请求的成功响应就能被发送。
第一步:打开或重用一个TCP连接【TCP连接被用来发送一条或多条请求,以及接受响应消息】
第二步:发送一个HTTP报文
第三步:读取服务端返回的报文信息
第四步:关闭TCP连接或为后续请求重用连接。

HTTP报文

HTTP/1.1以及更早的HTTP协议报文都是语义可读的。在HTTP/2中,对这些报文进行压缩,嵌入到了一个新的二进制结构,帧。
有两种HTTP报文类型:请求与响应,每种都有其特定的格式。

请求报文的格式

请求报文的格式.png

一、请求行:

内容 解释
请求方法 如GET、POST、PUT、DELETE、HEAD、OPTIONS
请求路径 获取资源的路径。该Path中没有protocol(http://)、domain(127.0.0.1)、port(80)
HTTP协议版本号 HTTP的协议版本号常用的HTTP/1.0、HTTP/1.1、HTTP/2

二、请求头:

内容 解释
HTTP headers 为服务端表达其他信息的header信息,如Host、content-type等信息

三、空行:

四、请求数据:

内容 解释
数据的格式 常见的数据格式有文本、json等

响应报文的格式

响应报文的格式.png

状态行:

内容 解释
HTTP协议版本 HTTP的协议版本号常用的HTTP/1.0、HTTP/1.1、HTTP/2
状态码 来告知对应请求执行成功或失败,以及失败的原因。常见的状态码有:200、304、404、500
状态信息 是对状态码的描述信息,可以由服务端自行设定。

消息报头:

内容 解释
HTTP headers 与请求类类似

空行:

响应数据:

内容 解释
数据的格式 常见的数据格式有文本、json、图片等

基于HTTP的APIs

客户端向服务端发起请求,服务端被动发送数据。

XMLHttpRequest

作用:XMLHttpRequest(XHR)对象可用于在user_agent和服务器之间交互数据。
介绍:通过XMLHttpRequest可以在不刷新页面的情况下请求特定的URL,获取数据。这允许页面在不影响用户操作的情况下,更新页面的局部内容。

Fetch API

作用:Fetch API提供了一个获取资源的接口(包括跨域请求)

服务端发送的事件,是一种单向服务。

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

推荐阅读更多精彩内容