应用层基础

1. 用 curl / 浏览器调接口

1)浏览器在做什么

你在浏览器地址栏输入一个 URL,本质上是在发一个 HTTP/HTTPS 请求。

例如访问:

复制代码
https://example.com/api/user?id=1

浏览器会自动帮你做很多事:

  • 解析 URL

  • 建立连接

  • 发送请求头

  • 处理 Cookie

  • 渲染返回内容

所以浏览器更像一个"自动化客户端"。


2)curl 在做什么

curl 是命令行里的"手动客户端"。

它适合:

  • 调接口

  • 看返回头

  • 测试服务是否可用

  • 验证代理是否生效

  • 调试 API

例如:

复制代码
curl https://example.com

表示:

复制代码
向这个网址发一个 GET 请求

如果是接口请求,常见会写成:

复制代码
curl -X POST https://example.com/api/login \
  -H "Content-Type: application/json" \
  -d '{"user":"abc","password":"123"}'

这表示:

  • -X POST:请求方法是 POST

  • -H:加请求头

  • -d:发送请求体


3)HTTP 请求

一个 HTTP 请求至少要会看这几类信息:

请求部分

  • URL

  • 方法:GET / POST / PUT / DELETE

  • 请求头:Host、Authorization、Content-Type

  • 请求体:JSON、表单等

响应部分

  • 状态码:200、404、500

  • 响应头

  • 响应体


2. 理解"访问一个网站发生了什么"

这是应用层和下面几层连接起来的关键问题。

你访问一个网站,比如:

复制代码
https://www.example.com

背后通常发生了下面这些事。


1)解析域名

浏览器先要知道:

复制代码
www.example.com 对应哪个 IP

这一步通常通过 DNS 完成。

也就是:

复制代码
域名 → IP 地址

2)建立连接

如果是 HTTP 明文网站,通常建立 TCP 连接。

如果是 HTTPS,还会在 TCP 之上建立 TLS 安全连接。

所以你可以粗理解为:

复制代码
HTTP  = TCP + HTTP协议
HTTPS = TCP + TLS + HTTP协议

3)发送 HTTP 请求

浏览器会发类似这样的请求:

复制代码
GET / HTTP/1.1
Host: www.example.com
User-Agent: ...
Cookie: ...

也就是说:

复制代码
告诉服务器:我要首页内容,站点名是这个,我是谁,我带了哪些状态信息

4)服务器处理请求

服务器收到请求后,可能会:

  • 返回静态 HTML

  • 查数据库

  • 调后端接口

  • 做鉴权

  • 生成页面内容


5)返回响应

服务器返回:

  • 状态码

  • 响应头

  • 页面内容 / JSON / 图片 / CSS / JS

比如:

复制代码
200 OK
Content-Type: text/html

6)浏览器继续加载资源

一个网页通常不止一个文件。

HTML 里还可能引用:

  • CSS

  • JavaScript

  • 图片

  • 字体

  • 视频

  • 更多接口请求

于是浏览器会继续发更多请求。


7)整体理解

你要把"访问网站"理解成:

复制代码
域名解析
→ 建立连接
→ 发 HTTP 请求
→ 服务器处理
→ 返回响应
→ 浏览器继续加载和渲染

而不是简单地"点一下网页就出来了"。


3. 配置 SSH、代理、隧道

1)SSH

SSH 本质上是:

复制代码
安全的远程登录和远程通信协议

你常见的命令:

复制代码
ssh user@server

意思是:

复制代码
连接远程服务器,并以 user 身份登录

如果改端口:

复制代码
ssh -p 60000 user@server

就是连远程的 60000 端口。


2)代理

代理的本质是:

复制代码
我不直接访问目标,
而是先把请求交给中间人,由中间人替我访问

常见有:

  • HTTP 代理

  • SOCKS5 代理

例如:

复制代码
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890

表示很多程序访问 HTTP/HTTPS 时,会先走本地代理。

如果是 SOCKS5:

复制代码
export all_proxy=socks5h://127.0.0.1:7891

3)隧道

隧道的本质是:

复制代码
把一种连接"包"进另一种连接里传过去

最常见的就是 SSH 隧道。

本地转发

例如:

复制代码
ssh -L 8080:目标地址:80 user@server

意思是:

复制代码
你本地访问 8080
→ 通过 SSH
→ 转到远端再访问 目标地址:80

远程转发

例如:

复制代码
ssh -R 7890:127.0.0.1:7890 user@server

意思是:

复制代码
把服务器上的 7890 端口
转发到你本地的 7890

这就是你前面问的"把主机 VPN 能力转给服务器"时最常用的方法。


4. 公钥 / 私钥认证

这部分是 SSH 认证里最关键的安全机制。


1)最核心的一句话

复制代码
公钥可以公开,私钥必须自己保管

你可以把它类比成:

复制代码
公钥 = 锁
私钥 = 钥匙

服务器上放"锁",你手里拿"钥匙"。


2)SSH 里怎么用

本地

你会有一对密钥,比如:

复制代码
~/.ssh/id_rsa       私钥
~/.ssh/id_rsa.pub   公钥

服务器

服务器上会保存你的公钥,一般在:

复制代码
~/.ssh/authorized_keys

3)登录时发生了什么

当你用 SSH 登录时:

  1. 服务器说:证明你是合法用户

  2. 服务器发一个随机挑战

  3. 你用私钥对这个挑战做签名

  4. 服务器用公钥验证签名是否正确

  5. 正确就说明你确实持有对应私钥,于是允许登录

所以:

复制代码
服务器不需要知道你的私钥
只需要保存你的公钥

4)为什么比密码安全

密码登录的问题是:

  • 容易被爆破

  • 可能泄露

  • 经常需要手输

公钥认证的好处是:

复制代码
✔ 不需要把密码发给服务器
✔ 私钥不离开本机
✔ 更难暴力破解
✔ 适合自动化和免密登录
相关推荐
hahaha 1hhh4 小时前
中文乱码 ubuntu autodl
linux·运维·前端
计算机安禾4 小时前
【Linux从入门到精通】第37篇:NFS网络文件系统——无状态的数据共享
linux·网络·php
图码4 小时前
矩阵数据结构入门指南:声明、初始化与基本操作
运维·数据结构·线性代数·算法·矩阵
暴力求解4 小时前
Linux---保存信号
linux·运维·服务器·开发语言·操作系统
Name_NaN_None4 小时前
Android 手机投屏 iPad :公网+局域网免费方案
网络·计算机外设·电脑·远程工作
xian_wwq4 小时前
【学习笔记】储能系统的铁三角:BMS、PCS、EMS分别管啥
笔记·学习·储能系统
QiZhang | UESTC4 小时前
学习并复现minimind
学习
古城小栈4 小时前
rust 亿级并发模型,实践完成
开发语言·网络·rust
叶总没有会4 小时前
Docker:项目部署
运维·docker·容器