第 1 课:按下回车之后:一次请求与一次响应
本课目标:
- 说出一次 HTTP 交换中的两个主要角色。
- 解释 URL 的作用。
- 在一次简单的交换中识别请求和响应。
先修条件:无 | 下一篇 2 >>
网页看起来瞬间出现,背后其实是一段简短的对话
你在浏览器里输入 https://example.com,按下回车,页面就出现了。但在任何东西显示出来之前,两个素不相识的程序必须先约定一种共同语言。一个是你电脑上的浏览器;另一个是互联网上某处的服务器。它们说的语言就是 HTTP。
HTTP 是一种客户端-服务器协议(协议就是一套事先约定好的对话规则):浏览器(客户端)先发出请求,服务器再用响应作答12。浏览器使用的地址是 URL。URL 就是地址:它告诉浏览器要联系哪台服务器,以及要向它索取哪个页面或文件。
下面是整件事最简化的版本:
这张图的重点不在技术细节,而在箭头的方向:浏览器先开口,服务器再回复。
讲解
浏览器是客户端
浏览器是负责发问的程序。你按下回车后,它读取 URL,找到服务器,发出一个 HTTP 请求1。在服务器把页面发回来之前,它无法读到页面。
服务器是应答方
服务器负责监听请求。收到请求后,它决定要发回什么。那个回答就是 HTTP 响应。服务器可能是一台计算机,也可能是很多台,但在浏览器看来,它就是「服务器」1。
URL 是地址
像 https://example.com/index.html 这样的 URL 有两项职责:说明要联系哪台服务器(example.com),以及要索取哪个资源(/index.html)。浏览器会把这个 URL 变成一个服务器能理解的请求。
URL 由若干有名字的部件拼成,而每个部件是给不同角色读的3:
- scheme 是最前面、
://之前的那一段,指明要用哪个协议——通常是 HTTPS,或者它那个不加密的老前辈 HTTP3。 - authority 紧跟在
://之后,里面装着域名(要联系哪台服务器),还可以选择性地带上端口——服务器上那道带编号的「门」。端口平时都省略不写,因为 HTTP 的 80 和 HTTPS 的 443 是标准端口3。 - 路径指明这台服务器上的哪个资源3。
- 查询字符串是
?之后的全部内容,携带额外的键值参数,供服务器在返回资源之前使用3。 - fragment 是
#之后的全部内容,相当于资源内部的一个书签。有一点值得单独记住:fragment 从不发给服务器,只有浏览器自己看得到它3。
资源就是 URL 所指的那个东西:一个 HTML 页面、一张图片、一份样式表、一段 JSON 数据。拥有这个资源、并代表它作答的那台机器叫源服务器2。
请求和响应是一对
每一次 HTTP 交换都是一个请求跟着一个响应。这「去一趟回一趟」的一对合起来是一次往返;正因为往返有代价,一个页面发出多少条请求才成了值得关心的事4。如果响应丢失了,浏览器通常会再问一次。没有请求在先,就不会有响应25。
完整示例(跟着做)
假设你输入 https://example.com 并按下回车。
- 浏览器读取 URL,并做出判断:「我需要向 example.com 的服务器索取资源
/。」 - 浏览器发出一个 HTTP 请求,开头是:
- example.com 的服务器收到请求,发回一个响应:
- 浏览器读取响应体,把页面显示出来。
你来试试(填空示例)
把这次交换中的空补上:
- 你把一个 URL 输入进浏览器。
- 浏览器向服务器发出一个 HTTP 请求。
- 服务器发回一个 HTTP 响应。
- 浏览器显示出页面。
小结 + 下一步
这一课你认识了每次 HTTP 交换的四个组成部分:浏览器(客户端)、服务器、URL,以及请求/响应对。下一课,你将看进请求内部,了解浏览器究竟在信封上写了什么。
Footnotes
-
MDN: Overview of HTTP — https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Overview ↩ ↩2 ↩3
-
RFC 9110: HTTP Semantics — https://www.rfc-editor.org/rfc/rfc9110.html ↩ ↩2 ↩3
-
MDN: What is a URL? — https://developer.mozilla.org/en-US/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
MDN: Redirections in HTTP — https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Redirections ↩
-
MDN: HTTP messages — https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Messages ↩
Exercises
假设朋友说:「我一按回车,服务器就把页面发给我的浏览器。」解释这句话为什么不够准确,以及实际上先发生的是什么。
第 2 级(进阶)My note
Jot down thoughts, sticking points, things you didn't get. Written to this course's appendix only — the lesson file is never touched.