Kodokon kodokon.com

localhost、端口,以及“在我这儿明明是好的”

在你自己的机器上跑一个服务器,并弄明白为什么别人都看不到它。

7 分钟 · 3 题

在 Kodokon 中打开本课

开发一个网站的时候,你不可能每改一次就把它发布到互联网上。你会在自己的电脑上跑一个服务器,然后用浏览器去访问它。你这台机器有一个专用的名字:localhost,字面意思就是“本地主机”。它还有一个保留的 IP 地址 127.0.0.1,在世界上任何一台机器上,它的含义都是“我自己”。

但一台电脑可以同时跑好几个服务器。怎么知道你在跟哪一个说话呢?靠端口。如果说 IP 地址是整栋楼的地址,那端口就是房间号:一个 1 到 65535 之间的数字,用来指明该由哪个程序来回应。有些端口是约定俗成的:80 端口给 http443https。开发的时候常用 3000、5173 或者 8000。端口写在名字后面,中间用冒号隔开:http://localhost:8000

BASH
cd my-site
python3 -m http.server 8000

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
一条命令就是一台真正的网页服务器。在 Windows 上请写 py -m http.server 8000。

让这个终端窗口一直开着:只要命令还在运行,服务器就会响应。现在在浏览器里打开 http://localhost:8000,你就会看到 my-site 文件夹里的文件。要停掉服务器,回到终端按 Ctrl + C

既然双击 index.html 也能打开页面,为什么还要这么麻烦?因为双击打开文件用的地址是 file:///C:/Users/...,而不是 http://。而网页的好几项功能,一旦离开 http 协议就干脆罢工:向服务器发请求、JavaScript 模块、某些字体。你会遇到一堆莫名其妙的错误,而只要改走 localhost,它们就像变魔术一样全消失了。

BASH
lsof -i :8000

COMMAND   PID   USER   FD   TYPE  NODE NAME
python3  4821  sarah    3u  IPv4   TCP *:8000 (LISTEN)
谁占着 8000 端口?在 Windows 上:netstat -ano | findstr :8000

知识检测

确认你已牢记本课的重点内容。

  1. 把这些命令重新排好顺序:先建一个文件夹,进到里面,再在其中启动一个本地服务器。
    mkdir site
    cd site
    python3 -m http.server 8000
  2. 为什么同事打开 http://localhost:3000 看不到你的网站?
    • 因为他那边的端口号写错了
    • 因为 localhost 指的是他自己的机器,不是你的
    • 因为应该用 https
  3. http://localhost:8000 里的端口号有什么用?
    • 指明这台机器上该由哪个程序来回应
    • 加密通信
    • 给网站的页面编号