Web前端之路HTTPWeb 前端开发

HTTP概述

2017-02-04  本文已影响84人  蓝瘦额香菇

HTTP是一种能够获取如HTML这样网络资源的协议。它是Web上数据交换的基础,是一种client-server协议,也就是说请求通常是由浏览器这样的接受方发起的。一个完整的web文档是由不同的子文档重新组建而成的,像文本、样式、图片、视频、脚本等等。


Fetching_a_page.png

HTTP基本性质

HTTP是简单的

即便在HTTP/2中把HTTP消息封装到了frames中,HTTP大体上还是被设计成可读的而且简单的。HTTP的消息能够让人读懂且明白它的意思,还允许简单的测试,放低了门槛,更有利于新来者了解。

HTTP是可扩展的

在HTTP/1中就出现了,HTTP headers让协议扩展变得非常容易。只要服务端和客户端在新的headers上语义达成一致,新的功能就可以轻松地被加进来。

HTTP是无状态的,有会话的

HTTP是无状态的:在同一个连接中,两个成功执行的请求之间是没有关系的。这就带来一个问题,用户没办法在一个网站进行连续的交互。通过cookie的使用可以解决这个问题,让用户的每次请求都能共享相同的上下文信息,相同的状态,从而创建有状态的会话。

HTTP和连接

一个连接是由传输层来控制的,基本不属于HTTP的范围内。然而HTTP并不需要下面的传输层的协议是面向连接的,它只需要它是可靠的,就是说不能丢失消息(至少没有错误)。在因特网两个最常用的传输层协议中,TCP是可靠的,而UDP不是。因此,HTTP依赖于TCP进行消息传递,虽然TCP是面向连接的,但这并不是必须的。

HTTP/1.0曾经为每一个请求/回应交换都打开一个TCP连接,但是TCP主要有两种流:打开一个连接需要多次的消息往返因此很慢。但是当多个消息周期性的发送时,这就变得更加高效:暖连接比冷连接更高效。

为了减少这些负担,HTTP/1.1引入流水线的概念(已被证明很难实现)和持久连接的概念:下层的TCP连接可以通过Connection头部来被部分地控制。HTTP/2则发展的更多,通过一个连接多个消息的方式来让这个连接始终保持为暖连接。

为了更好的适合HTTP,设计一种更好的传输层协议就一直在进行中。Google就研发了一种以UDP为基础,能提供更可靠更有效的传输层协议。

HTTP的扩展性举例

一次HTTP请求过程

HTTP请求报文

下面是一个HTTP请求报文的例子。


http请求头.png

请求报文的元素由下面组成:

HTTP响应报文

下面是一个HTTP响应报文的例子。


http响应头.png

响应报文的元素由下面组成:

上一篇 下一篇

猜你喜欢

热点阅读