上一篇
http向服务器发请求
- 行业动态
- 2025-04-28
- 7
HTTP客户端通过TCP连接向服务器发送请求,包含请求行(方法/URL/版本)、头域和消息体,服务器解析请求,执行处理逻辑,返回状态行(状态码/版本)、响应头及数据,完成交互后
HTTP请求全流程解析
客户端发起请求
当用户在浏览器输入URL(如www.baidu.com
)并按下回车,客户端(浏览器)会执行以下步骤:
- DNS解析:将域名转换为服务器IP地址(如
125.114.144
)。 - 建立TCP连接:通过三次握手与服务器建立可靠的传输通道。
- 构造HTTP请求报文:包含请求行、请求头、请求体(如有)。
HTTP请求报文结构
部分 | 内容示例 |
---|---|
请求行 | GET /index.html HTTP/1.1 (方法+路径+协议版本) |
请求头 | Host: www.baidu.com User-Agent: Mozilla/5.0 (浏览器信息)Accept: text/html (支持的响应类型) |
请求体 | 仅POST/PUT等方法需要 如 username=admin&password=123 (表单数据) |
服务器处理请求
- 解析请求:读取请求行和头部,识别客户端需求。
- 路由处理:根据URL路径调用对应服务(如
/index.html
返回首页)。 - 生成响应:构造响应状态码、响应头、响应体(如HTML页面)。
服务器返回响应
部分 | 内容示例 |
---|---|
状态行 | HTTP/1.1 200 OK (协议+状态码+描述) |
响应头 | Content-Type: text/html (数据类型)Content-Length: 1024 (数据长度)Set-Cookie: sessionid=abc (设置Cookie) |
响应体 | 实际数据 如 <html>...</html> ) |
连接关闭(或保持)
- HTTP/1.0:默认关闭连接(需重复三次握手)。
- HTTP/1.1:默认持久连接(
Connection: keep-alive
),可复用TCP通道。 - HTTP/2:多路复用,大幅提升性能。
关键概念对比表
对比项 | GET | POST |
---|---|---|
用途 | 获取资源 | 提交数据(如表单) |
参数位置 | URL中(?key=value) | 请求体中 |
安全性 | 敏感信息暴露在URL | 相对安全 |
缓存 | 可被缓存 | 一般不缓存 |
常见问题与解答
问题1:HTTP和HTTPS有什么区别?
解答:
| 特性 | HTTP | HTTPS |
|—————-|————————-|————————-|
| 加密 | 明文传输(不安全) | SSL/TLS加密(防窃听) |
| 端口 | 默认80 | 默认443 |
| 证书 | 无需证书 | 需CA签发的SSL证书 |
| 性能 | 略快(少加密开销) | 略慢(加密解密耗时) |
问题2:POST请求中如何传递文件?
解答:
- 请求头:
Content-Type: multipart/form-data
- 请求体:
--boundary Content-Disposition: form-data; name="file"; filename="test.jpg" Content-Type: image/jpeg (二进制文件内容) --boundary--
- 原理:通过分隔符(
boundary
)区分多个字段,支持多