第三课:把一条 URL 拆开看,再做四个搜索框
这是第 3 课的作业。上半节课讲 URL 的结构,下半节课讲表单—— 当时最直接的想法就是「那我做几个搜索框吧」,于是把 B 站、Bing、CSDN、百度各接了一个。 现在回头看,这一页里藏着一个必须订正的知识错误(见下),另外表单的无障碍细节也补齐了。
一、URL 解剖图
先随便找一条 URL 来拆:
原始 URL:https://space.bilibili.com/164899878/dynamic?spm_id_from=444.41.my-info.face.click
-
协议https://
超文本传输协议(加密版)。它规定了浏览器和服务器怎么对话,末尾必须以
://收尾。 - 域名space.bilibili.com 主机名,会被 DNS 翻译成 IP 地址。它相当于「哪一台服务器」。
-
端口:443
紧跟在域名后面、用冒号隔开的一串数字,形如
example.com:8080。它相当于「服务器上的哪一扇门」;不写就用默认值 (https 是 443,http 是 80)。本例的 URL 里没有冒号数字,所以用的是默认端口。 -
路径/164899878/dynamic
从第一个斜杠开始,用
/分层的资源位置。/164899878和/dynamic各是一段路径段, 前者是这位 up 主的 UID,后者表示「动态」页面。 -
查询串?spm_id_from=444.41.my-info.face.click
以
?开头,内容是若干组key=value,多组之间用&连接。这里key是spm_id_from, 一般用来做来源统计。 -
锚点#hash
以
#开头,用来定位页面内的某个位置。 它只留在浏览器里,不会被发给服务器。本例没有锚点。
164899878 写成了「端口」,
这是错的。164899878 出现在第一个斜杠之后,位置在路径里,
所以它是一段路径段(B 站的用户 UID)。
怎么一眼分清?端口只有一个特征:紧贴在域名后面、由冒号引出,例如
https://example.com:8080/index.html 里的 8080。
一旦出现了斜杠 /,后面的东西就都属于路径了。
把「斜杠后的数字」当成端口,是很容易记错的坑——记错了,写接口地址时就会莫名其妙 404。
二、四个搜索窗口
下面四张卡片是这个作业的主体:每张都是一个真实可用的 <form>,
提交方式统一用 method="get",因为搜索的关键词本来就该出现在地址栏里。
每个输入框都配了 <label>(用 for 和 id 绑定)和
placeholder,点标签上的字也能聚焦输入框。
说明一下这里的 action:它们指向各家搜索引擎真实的搜索页,
因为「接一个真的能用的搜索框」正是这一课的练习目标——只有点下「查找」的时候才会跳出去,
页面本身不依赖任何人,平时打开、离线浏览都不会产生任何外部请求。
再加一个星座选择器
小结
这一页其实就把「URL 是什么」和「表单怎么把数据放进 URL」串起来了:表单提交后,
浏览器会把 name=value 拼成查询串接到 action 后面——
这正是第一张解剖图里那个 ?key=value 的来历。