HTTP 与Web 请求
HTTP,超文本传输协定(HyperText Transfer Protocol),是一个Client端(使用者)和伺服器端(网站)之间请求和应答的标準。
使用URL要求 Web Page 的物件位址
流程:
(1)Server 开一个 TCP Port 80
(2)由HTTP Client端建立Socket 与远方的 Server指定埠(预设是80埠)进行TCP连线。
(3)Client端发出要资料的请求(request(containing URL)),HTTP伺服器则在那个埠监听Client端的请求。一旦收到请求,伺服器会向Client端回覆(response)并返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的Web Page 里面的档案、错误讯息、或者其它讯息,之后在Client 的浏览器里做美化与呈现。
(4)交换完资料,TCP 连线 closed
/*口诀:连,传,关/
=> Socket 是资源共享的,不会一直占用,因此会有 Set up 阶段 与 释放阶段。
HTTP小整理
目前多数使用 HTTP/1.1属于应用层的协定透过 TCP 或 TLS 来发送或接收资讯无状态(stateless)甚么是无状态 (stateless)?
就是Server 不用记得以前服务过谁。举一个简单的情境:透过 HTTP 请求成功登入服务后,想使用服务。无状态的特性会让服务器无法知道「使用服务的请求」跟「刚刚已成功登入服务的请求」是同一个使用者,也因此无状态在身分验证上会出现较多问题。
如果是状态化(state)就会比较複杂:例如收信与送信的app,他可能有帐密登入,记得你已经读过的信等,比较複杂。
持续连线(Persistent) V.S 多次连线(Non Persistent)
多次连线(Non Persistent)
at most one object
sent over a single TCP
connection
在HTTP1.0的时候使用多次连线(Non Persistent),TCP连线在每一次请求/回应对之后会关闭,就一直开开关关(有10个Object就重新连线10次)。
如图:
持续连线(Persistent)
multiple objects can
be sent over single
TCP connection
between client, server
现在使用的HTTP1.1使用 持续连线(Persistent),一个连接可以重複在多个请求/回应使用,大大减少等待时间。
如图:
RTT (run trip time):
一来一往经过的时间
time for a
small packet to travel from
client to server and back
Non Persistent 每次传一个物件都要两个RTT(1.要求Set up 与 2.资料往返)
参见:
超文本传输协议(HTTP)是什么?
简介 HTTP 协定
wikipedia HTTP