HTTP 与 HTTPS

讲透篇里我们把"一个网址怎么变成一次实际访问"拆到了:域名翻译成 IP(找到小区)→ 端口(找到窗口)→ 进程(窗口后面的办事员)。那办事员接了单之后,浏览器和服务器之间到底在聊什么?这套对话的规矩,就是 HTTP(超文本传输协议)。

对话的基本套路:一问一答

HTTP 的对话非常"机械":浏览器发一个请求,服务器回一个响应,说完这轮就翻脸不认人(下一节讲这个"失忆"问题)。

请求大致长这样:我要什么(方法)+ 我要哪个资源(路径)+ 一些说明(请求头)+ 附加材料(请求体,可选)。方法常见就几个——GET 是"拿东西"(打开网页)、POST 是"交材料"(提交表单/登录)、PUT/DELETE 是"改"和"删"。

响应里最显眼的是状态码,相当于窗口办事员的一句话回复:

状态码 意思 你遇到过它的场景
200 办好了,东西给你 正常打开网页
301 / 302 这窗口搬走了,去新地址(永久/临时) http 跳 https、域名换了
304 你上次拿过一样的,用你手里的缓存吧 刷新页面秒开
403 保安不让进 没权限的目录、被封的访问
404 窗口里没你要这个东西 链接写错了、页面删了
500 窗口里面出事故了 服务器代码崩了

想亲眼看这套对话,两个办法:浏览器按 F12 打开开发者工具切到网络(Network)面板,每个请求的状态码、请求头、响应头全摆在那;或者用 curl -v 地址 在命令行里看原始来往。

HTTP 是明信片,HTTPS 是密封信封

纯 HTTP 有个要命的属性:全程明文。你和服务器之间的每一句话,路上经过的任何一个节点(查号台、路由器、同一条公共 WiFi 里的任何人)都能看、甚至能改——就像把密码写在明信片上寄出去。HTTPS 干的事就是给信封上锁:先和服务器验明正身 + 约定一把只有我俩知道的钥匙(TLS 握手),之后的对话全部加密。

那"验明正身"怎么验?浏览器不是直接信服务器,而是看它有没有**证书颁发机构(CA)**盖的章——相当于公证处确认"这窗口真的是银行开的,不是隔壁骗子装修的"。最常见的免费"盖章处"是 Let's Encrypt。

落到你实操过的场景里:

  • 快速建站:Nginx 监听 80 端口服务的是纯 HTTP;要上 HTTPS 就得给服务器配一张证书(宝塔面板有一键申请,背后就是 Let's Encrypt)。
  • Cloudflare Tunnel:流量走 Cloudflare 中转,证书是 Cloudflare 在它那一侧直接配好的——这也是为什么走隧道的服务"无需输入端口号"还自带 https,你基本不用自己操心证书这档事。

还有个容易踩的坑叫混合内容:HTTPS 页面里引用了 HTTP 的图片/脚本,浏览器会直接拦——因为密封信封里塞了一张明信片,锁等于白上。

失忆的对话怎么记住"你登录了"

HTTP 每次请求之间是互相不认识的(无状态),那网站怎么记住你登录了?靠 Cookie:登录成功后服务器发你一张"临时出入证"(存在浏览器里),之后每次请求自动出示这张证,服务器对着登记簿核对。所以别随手接受陌生网站的 Cookie,也别在公共电脑上登了号不清除——那张出入证还在。


⬅️ 校园网寝室WIFI 🏠 00-网络与项目 ➡️ DNS 记录与域名实战