HTTP协议精讲

Http 1.0 与 Http 1.1的区别:

  • 1.0协议,客户端与web服务器建立连接后,只能获得一个web资源!

  • 1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源!

Http请求的工作流程:

SYN和ACK

  • SYN(synchronous):TCP/IP建立连接时使用的握手信号

  • ACK(Acknowledgement):确认字符,确认发来的数据已经接受无误

TCP/IP三次握手的概念:

1、客户端发送syn包(syn = j)到服务器,进入SYN_SEND状态,然后等待服务器确认

2、服务器收到syn包,确认客户的syn(ack = j + 1),同时在自己也发送一个SYN包(syn=k), 即SYN + ACK包,服务器进入SYN_RECV状态

3、客户端收到SYN + ACK包,想服务器发送确认包ACK(ack = k +1),发送完毕后,客户端与服务端 进入ESTABLISHED状态,完成三次握手,然后两者开始传送数据

TCP建立连接要进行3次握手,而断开连接要进行4次

1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求

2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1

3 由B 端再提出反方向的关闭请求,将FIN置1

4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.

TCP三次握手过程

1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,

主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.

2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:

我已经收到你的请求了,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我

3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了

这样3次握手就完成了,主机A和主机B 就可以传输数据了

"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。

一、HTTP关系密切的协议:IP、TCP和DNS

1、负责传输的IP协议

IP网际协议位于网络层。IP的作用的就是把各种数据包传送给对方。确保传送到随访的两个条件:IP地址和MAC地址

使用ARP协议凭借MAC地址进行通行。

2、确保可靠性的TCP协议

TCP位于传输层,提供可靠的字节流服务。

所谓字节流的服务,是为了方便传输,将大块数据分割成报文段为单位的数据包进行管理。

确保数据能到达目标

TCP协议采用了三次握手策略。握手过程中使用了TCP的标志---SYN(synchronize)和ACK(acknowledment)

发送端首先发送一个带SYN标志得瑟数据包给对方,接收端收到后,会传一个带有SYN/ACK标志的数据包以示传达确认信息,最后,发送端再传回一个带ACK标志的数据包,代表握手结束。

3、负责域名解析的DNS服务

DNS服务是和Http协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。

二、HTTP协议

1、HTTP协议用于客户端和服务器端之间的通信。

2、通过请求和响应的交换达成通信。

3、HTTP是不保存状态的协议。

HTTP可使用的方法

1、GET:获取资源

GET方法用来请求访问已被URI识别的的资源。

2、POST:传输实体主体

POST方法用来传输实体的主体。

3、PUT:传输文件

4、HEAD:获取报文首部

HEAD方法和GET方法一样,只是不返回报文主题部分。

5、DELETE:删除文件

6、OPTION:询问支持的方法。

7、TRACE:追踪路径

8、CONNECT:要求哟过隧道协议连接代理

CONNECT方法要求与代理服务器通信是建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接字)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

持久连接:

HTTP keep-alive:只要任意一端有明确提出断开连接,则保持TCP连接状态。

持久连接的好处在于减少TCP连接的重复建立和断开造成的额外开销,减少了服务器的负载。

在Http/1.1,所有的连接默认都是持久化连接。

管线化

持久连接使得多数请求以管线化方式发送成为可能。从前发送请求后序等待并得到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。

使用Cookie的状态管理

HTTP是无状态协议,它不对以前发生过的请求和响应的状态进行管理。

Cookie技术通过在请求和响应报文中写入coo kie信息来控制客户端的状态。

HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。请求端的HTTP报文叫做请求报文,相应端的叫做响应段的报文。

HTTP报文大致可以分为报文首部和报文主题两个主体。

请求报文和响应报文的首部内容有以下数据组成

1、请求行

包含用于请求的方法,请求URI和HTTP的版本

2、状态行

包含表明响应结果的状态码,原因短语和HTTP版本

3、首部字段

包含表示请求和响应的各种条件和属性的各类首部。

编码提升传输效率

1、压缩传输的内容编码(常用)

gzip

compress

deflate

identity

2、分割发送的分块传输编码

把主体分块的功能称为分块传输编码(chunked tranfer coding)

3、发送多种数据的多部分对象集合

多部分对象集合包含:

1、multipart/form-data

在web表单文件上传时使用

2、multipart/byteranges

状态码206响应报文包含了多个范围的内容时使用。


content-Type:mutipart/form-data;

获取部分内容的范围请求

指定范围发送风格的请求叫做范围请求(range request)


Range:bytes=5001-10000

另外多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。

内容协商返回最合适的内容

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源


Accept

Accept-Charset

Accept-Encoding

Accept-Language

Accept-Language

用单台虚拟主机实现多个域名

由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内容完整指定主机名或域名的URI

通信数据转发程序:代理,网关,隧道

1、代理

代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端。

缓存代理

代理转发响应,缓存代理回预先将资源的副本保存在代理服务器上。

当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前的缓存的资源作为响应返回。

缓存的有效期

即使存在缓存,也会因为客户端的要求,缓存的有效期等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器上获取资源。

客户端缓存

缓存不仅可以缓存在服务器中,还可以缓存在客户端浏览器。

2、隧道

隧道可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通行。隧道的目的是确保客户端与服务器进行安全的通信。

HTTP首部

HTTP请求报文

HTTP协议的请求和响应报文必定包含HTTP首部。

HTTP请求报文:方法,URI,HTTP版本,HTTP首部字段等部分构成

HTTP响应报文:

在响应中,HTTP报文由HTTP版本,状态码,HTTP首部字段3部分构成

HTTP首部字段结构

HTTP首部字段是由首部字段和字段值构成:

首部字段:字段值


Content-Type:text/html

keep-Alive:timeout=15,max=100

四种HTTP首部字段类型:

1、通用首部字段

请求报文和响应报文都会使用的首部

2、请求首部字段

3、响应首部字段

4、实体首部字段

通用首部字段

首部字段名 | 说明

---------------- | -------------------

Cache-Control | 控制缓存的行为

connection | 逐跳首部,连接的管理

Date |创建报文的日期时间

Pragma |报文指令

Transfer-Encoding|报文末端一览

Upgrade|升级为其他协议

Via|代理服务器的相关信息

Warning|错误通知

请求首部字段

首部字段名 | 说明

-------- | --------

Accept|用户代理可处理的媒体类型

Accept-Charset|优先的字符集

Accept-Encoding|优先的内容编码

Accept-Language|优先的语言

Authorization|Web认证信息

Expect|期待服务器的特定行为

From|用户的电子邮箱地址

Host|请求资源所在的服务器

if-Match|比较实体标记

if-Modified-Since|比较资源的更新时间

if-none-Match|比较实体标记

if-Range|资源未更新时间发送实体Byte的范围请求

if-Unmodified-Since|比较资源的更新时间

Range|实体的范围请求

Referer|对请求中URI的原始获取方

User-Agent|HTTP客户端程序的信息

响应首部字段

首部字段名 | 说明

---------|-----------

Accept-Ranges|是否接受字节范围的请求

Age|推算资源创建经过时间

ETag|资源的匹配信息

Location|令客户端重定向至指定URI

实体首部字段

首部字段名 | 说明

---------|-----------

Allow|资源可支持的HTTP方法

Content-Encoding|实体主体适用的编码方式

Content-Language|实体主体的自然语言

Content-Length|实体主体的大小

Content-Location|替代资源的URI

Content-Range|实体主体范围

Content-Type|实体主体的媒体类型

Expires|实体主体过期的日期时间

Last-Modified|资源的最后修改时间

Cache-Control指令简要讲

缓存请求指令

指令 |说明

------|------

no-cache|强制向源服务器再次验证

no-store|不缓存请求或响应的任何内容

max-age=「秒」|响应的最大age值

缓存响应指令

指令|说明

-------|------

public|可向任意的提供响应的缓存

private|仅向特定的用户返回响应

no-cache|缓存前必须先确定其有效性

no-store|不缓存请求和响应的任何内容

使用no-cache指令的目的是为了防止从缓存中返回过期的资源

Connection字段

1、控制不在转发给代理的首部字段

2、管理持久连接


控制不在转发给代理的首部字段(代理服务器)

GET /HTTP/1.1

Upgrage:HTTP/1.1

Connection:Upgrade

Connection:close

不持续连接

Pragma指令

是HTTP/1.1之前版本的历史遗留字段:等同于Cache-Control

Transfer-Encoding指令

HTTP/1.1的传输编码方式仅对分块传输编码有效。


Transfer-Encoding:chunked

Via指令

使用首部字段Via是为了追踪客户端与服务器端之间的请求和响应报文的传输路径

请求首部字段

Host指令

首部字段Host会告诉服务器,请求的资源所处的互联网主机名和端口号(必须)

if-Match指令

形如if-xxx这种样式的请求首部字段,都可称为条件强求

if-Match:”hansheng“

只有当if-match的字段值更ETag值匹配一致时,服务器才会接受请求

if-Modified-Since:Thu 10 Apr 2016 00:00:00 GET

只要是2016年4月10号之后更新过的资源,所以可以接受

Range指令

只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的制定范围

Referer指令

首部字段Referer会告知服务器请求的原始资源的URI

User-Agent指令

首部字段User-Agent将创建请求的浏览器和用户代理告诉服务器

响应首部字段

Accept-Ranges指令

首部字段Accept-Range是用来告知客户端服务器是否能处理范围请求,以指定获取服务器某个部分的资源

ETag

首部字段ETag能告知客户端实体表识,资源更新时,有统一的算法规则。

Location

使用首部字段Location可以将响应接收方引导至某个与请求URI位置不同的资源。

确保Web安全的 HTTPS

HTTP的缺点

  • 通信使用明文(不加密),内容可能会被窃听;

  • 不验证通信方的身份,因此可能遭遇伪装;

  • 无法证明报文的完整性,所以可能已遭篡改。

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

HTTPS并非是应用层的一种新协议。只是普通HTTP通信接口部分用SSL和TLS协议替代而已。

SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。所以说SSL是当今世界上应用最为广泛的网络安全技术。

  • 由于HTTPS需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源;

  • 和HTTP相比,SSL通信部分消耗网络资源。而SSL通信部分,又因为要对通信进行处理,所以时间上有延迟了;

  • 和HTTP相比,网络负载和速度上会变慢2~100倍。

  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

HTTP状态码

1、100~199 : 成功接受请求,客户端需提交下一次请求才能完成整个处理过程

2、200: OK,客户端请求成功

3、300~399:请求资源已移到新的地址(302,307,304)

4、401:请求未授权,改状态代码需与WWW-Authenticate报头域一起使用

5、403:Forbidden,服务器收到请求,但是拒绝提供服务

6、404:Not Found,请求资源不存在,这个就不用说啦

7、500:Internal Server Error,服务器发生不可预期的错误

8、503:Server Unavailable,服务器当前不能处理客户端请求,一段时间后可能恢复正常

HTTP的功能追加协议

HTTP的瓶颈

  • 一条连接上只能发送一个请求;

  • 请求只能从客户端开始,客户端不可以接收除响应以外的指令;

  • 请求/响应首部未经压缩就发送,首部信息越多延迟越大;

  • 发送冗长的首部,每次互相发送相同的首部造成的浪费较多;

  • 可任意选择数据压缩格式,非强制压缩发送。

SPDY

SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作。同时,考虑到安全问题,SDPY规定通信中使用SSL。

  • 多路复用流;

  • 赋予请求优先级;

  • 压缩HTTP首部;

  • 推送功能;

  • 服务器提示功能。

下章讲解:TCP/IP协议精讲,敬请期待。。。。。。

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

推荐阅读更多精彩内容