HTTP:请求与响应入门 · Lesson 1 of 6

第 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 变成一个服务器能理解的请求。

请求和响应是一对

每一次 HTTP 交换都是一个请求跟着一个响应。如果响应丢失了,浏览器通常会再问一次。没有请求在先,就不会有响应23

完整示例(跟着做)

假设你输入 https://example.com 并按下回车。

  1. 浏览器读取 URL,并做出判断:「我需要向 example.com 的服务器索取资源 /。」
  2. 浏览器发出一个 HTTP 请求,开头是:
http
GET / HTTP/1.1Host: example.com
  1. example.com 的服务器收到请求,发回一个响应:
http
HTTP/1.1 200 OKContent-Type: text/html
  1. 浏览器读取响应体,把页面显示出来。

你来试试(填空示例)

把这次交换中的空补上:

  1. 你把一个 URL 输入进浏览器
  2. 浏览器向服务器发出一个 HTTP 请求
  3. 服务器发回一个 HTTP 响应
  4. 浏览器显示出页面

小结 + 下一步

这一课你认识了每次 HTTP 交换的四个组成部分:浏览器(客户端)、服务器、URL,以及请求/响应对。下一课,你将看进请求内部,了解浏览器究竟在信封上写了什么。

Footnotes

  1. MDN: Overview of HTTP — https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Overview 2 3

  2. RFC 9110: HTTP Semantics — https://www.rfc-editor.org/rfc/rfc9110.html 2

  3. MDN: HTTP messages — https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Messages

Exercises

01

打开浏览器,访问任意一个网站。先不用开发者工具,用自己的话写下来:URL 是什么?服务器是谁?客户端是谁?

第 1 级(热身)
Done criteria · checked locally
02

假设朋友说:「我一按回车,服务器就把页面发给我的浏览器。」解释这句话为什么不够准确,以及实际上先发生的是什么。

第 2 级(进阶)
Done criteria · checked locally