seegongsik
我的单词本
网络

收发网页,HTTP

在地址栏敲个地址,那页面怎么就出现在屏幕上了?看不见的地方,有一段短短的对话来回。浏览器说“把这个给我”,服务器就递过来“给你”。这一问一递的一对,就是驱动网络的约定,HTTP。

01

把这个给我,给你

前面靠着 TCP,
我们看到数据一片不丢地到达。
可用那些数据
要进行什么对话呢?
网络上的对话很简单。
浏览器对服务器说
“把这页给我”,
服务器就递过来“给你”。
问的叫请求,递的叫响应。

浏览器
GET 请求
>
<
响应 200
服务器
点一下浏览器发出请求

点一下浏览器,向服务器发请求。服务器回一个响应,一对就完成了。

一个请求,一个响应。
网络就靠这简单的一对运转。
浏览器先开口,
服务器只回那一句请求。
服务器从不先开口。
总有一个问的,一个答的。
可除了“把这个给我”,
请求还有别的种类。
接下来看看那些动作。

02

请求里带的动作

每个请求都带一个动作,
说明它想做什么。
最常见的是 GET。
意思是“请把这个给我”,把东西取回来。
每次打开页面用的就是 GET。
另一边是 POST。
意思是“请收下这个”,把东西发出去。
像写评论或发登录信息那样。
取回来用 GET,发出去用 POST。

点一下 GET 和 POST 来选

点一下动作来选。GET 取回来,POST 发出去。箭头显示每个动作朝哪个方向。

光是 GET 和 POST 两个,
就能说清网上做的大部分事。
打开页面来读是 GET,
写点东西发出去是 POST。
除了动作,响应还会带一个短短的标记。
顺利就是 200,
没有那个页面就是 404 之类的数字。
一眼就告诉你成功还是失败。
细节现在不懂也没关系。

03

每次都像头回见的客人

这里有 HTTP 一个奇怪的性格。
HTTP 记性差得很。
一个请求一结束,
它就把刚才谁问了什么忘得一干二净。
就算同一个人来两次,
HTTP 每次都把他当头回见的客人。
没有“您刚才来过吧?”这样的记忆。
这种不保留过去的性质,
叫做没有状态,也就是 stateless。

第 1 次到访
同一个人>服务器
第 2 次到访
同一个人>服务器
用同一个人发请求

用同一个人发两次请求。第二次服务器还是像头回见那样打招呼。HTTP 记不住过去。

来两次每次都像头回打招呼,
看着是有点别扭。
可这是故意做成这样的。
服务器对谁都一样、都轻装相待,
才能同时接住成千上万的客人。
代价是,要记住“刚才那个人”,
就得另外发一张票给他。
那张票就是下一讲要见的
会话和 cookie。

04

把碎片凑成一页

一个页面不是一次请求
就全来的。
先用 GET 把文字的骨架取回来。
一看里面,说还要图片、还要样式。
于是浏览器又问,
把图给我,把样式给我。
来回多次请求-响应,
一片一片把碎片凑齐,
才成为一个完整的页面。

一片一片点着去请求

一片一片点着去请求。文字、图片、样式作为响应回来,页面一步步填满。

碎片全凑齐了,
空着的地方就满了。
在我们眼里像是一下子蹦出来的,
其实是好多请求-响应凑起来的结果。
一个骨架、一张图、一点样式。
各自分开请求、分开取回来。
多亏网快,
这一切眨眼就完成,
我们就只觉得页面出现了。

05

来理一理

归成一句话,是这样。
网络靠请求和响应一对运转。
请求带着动作,比如 GET(请给我)、POST(请收下)。
一个页面靠多次请求-响应把碎片凑起来做成。
而且 HTTP 记性差得很,
每次请求都当头回见的客人对待。
多亏这份简单和健忘,
网络才轻巧、谁都好用。
这就是 HTTP 的约定。

依次点这一讲给的东西来收尾

依次点要点回顾一下。(请求和响应 → GET·POST 动作 → 记性差得很 → 把碎片凑成页面)

现在你知道网页
怎么来回了。
可 HTTP 的健忘
留下了一道作业。
购物车里放的东西,
或者登录的状态,怎么记住呢?
要是每次都是头回见的客人,
那要怎么接得上呢?
那个秘密,下一讲
会话和 cookie 里来解开。

一句话总结网络靠请求和响应一对一对地运转。浏览器说“把这个给我”(请求),服务器就回一句“给你”(响应)递过来。每个请求带着一个动作,比如 GET(请给我)或 POST(请收下),告诉它想做什么。一个页面通常要来回多次请求-响应,把文字和图片的碎片凑齐拼起来。而且 HTTP 记性差得很。它把每次请求都当成头回见的客人,所以它自己记不住刚才谁做了什么。怎么补这个弱点,下一讲见。
网络
如果有帮助,请支持我们