当前位置:首页 > 行业动态 > 正文

http协议网络编程

HTTP协议基于请求-响应模型,通过Socket实现客户端与服务器间的通信,依赖TCP/IP协议栈

HTTP协议网络编程详解

HTTP基础

HTTP(HyperText Transfer Protocol)是应用层协议,基于TCP/IP,用于客户端与服务器之间的超媒体传输,核心特点:

  • 无状态:每个请求独立,服务器不保存上下文。
  • 请求-响应模型:客户端发起请求,服务器返回响应。
  • 文本协议:报文为纯文本格式,可读性强。
  • 版本差异:HTTP/1.0(无持久连接)、HTTP/1.1(默认持久连接)、HTTP/2(多路复用)。

HTTP请求/响应报文结构

请求报文

组成部分 说明
请求行 方法 URL 版本(如:GET /index.html HTTP/1.1
请求头 键值对(如:Host: example.comUser-Agent: Chrome
空行 分隔头部与请求体(`
`)
请求体 携带数据(如:POST表单数据)

响应报文

组成部分 说明
状态行 版本 状态码 原因短语(如:HTTP/1.1 200 OK
响应头 键值对(如:Content-Type: text/html
空行 分隔头部与响应体(`
`)
响应体 返回的数据(如:HTML页面)

常用HTTP请求方法

方法 用途 是否安全 是否幂等
GET 获取资源 安全(无副作用) 是(多次执行结果相同)
POST 提交数据 非安全 否(会新增资源)
PUT 更新资源 非安全 是(覆盖资源)
DELETE 删除资源 非安全 是(多次删除结果相同)
HEAD 获取资源元信息 安全

HTTP状态码分类

类别 范围 含义 示例
1xx 100-199 信息响应 101 Switching Protocols
2xx 200-299 成功 200 OK、201 Created
3xx 300-399 重定向 301 Moved Permanently、302 Found
4xx 400-499 客户端错误 400 Bad Request、404 Not Found
5xx 500-599 服务器错误 500 Internal Server Error、503 Service Unavailable

HTTP头部字段

通用头部

字段 说明
Date 报文创建时间
Via 代理服务器信息
Cache-Control 缓存策略

请求头

字段 说明
Host 目标服务器域名(必需)
User-Agent 客户端信息
Accept 支持的响应内容类型
Content-Type 请求体MIME类型(POST时必需)

响应头

字段 说明
Content-Type 响应体MIME类型
Content-Length 响应体长度
Set-Cookie 设置Cookie

HTTP网络编程实践

Python示例(使用requests库)

import requests
# 发送GET请求
response = requests.get("https://example.com")
print(response.status_code)  # 输出状态码
print(response.text)         # 输出响应体
# 发送POST请求
data = {"username": "test", "password": "123"}
response = requests.post("https://example.com/login", data=data)
print(response.json())       # 解析JSON响应体

Java示例(使用HttpURLConnection

import java.net.HttpURLConnection;
import java.net.URL;
URL url = new URL("https://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
int responseCode = conn.getResponseCode(); // 获取状态码
String response = new String(conn.getInputStream().readAllBytes()); // 读取响应体

持久连接与管道化

  • HTTP/1.0:默认关闭连接,每次请求需重新建立TCP连接。

  • HTTP/1.1:默认持久连接(Connection: keep-alive),可复用同一连接发送多个请求。

  • 管道化(Pipelining):在持久连接中连续发送多个请求,无需等待前一个响应。

    GET /a HTTP/1.1
    Host: example.com
    GET /b HTTP/1.1
    Host: example.com

Cookie与Session管理

  • Cookie:服务器通过Set-Cookie头设置,客户端自动携带。
    • 例:Set-Cookie: sessionid=abc123; Expires=Wed, 01 Jan 2024 00:00:00 GMT
  • Session:通过Cookie或URL重写(如JSESSIONID)标识会话。
  • 常见属性
    • Expires/Max-Age:过期时间。
    • Secure:仅HTTPS传输。
    • HttpOnly:禁止JavaScript访问。

HTTPS与安全

  • HTTPS:HTTP + SSL/TLS加密,默认端口443。
  • 工作流程
    1. 客户端发送ClientHello请求证书。
    2. 服务器返回公钥证书。
    3. 客户端验证证书并生成对称密钥,用公钥加密后发送。
    4. 双方使用对称密钥加密通信。
  • 安全增强
    • HSTS:强制HTTPS连接。
    • CSP:限制资源加载来源。

相关问题与解答

问题1:GET和POST方法的核心区别是什么?

解答
| 对比项 | GET | POST |
|——————|—————————-|——————————|
| 参数位置 | URL中(?key=value) | 请求体中(body) |
| 安全性 | 敏感数据暴露在URL中 | 相对安全(但仍需加密) |
| 幂等性 | 是(多次执行结果相同) | 否(可能新增资源) |
| 缓存性 | 可缓存(浏览器可能缓存) | 通常不缓存 |
| 长度限制 | URL长度受限(约2048字符) | 无限制(依赖服务器配置) |


问题2:HTTP状态码301和302有什么区别?

解答
| 状态码 | 含义 | 行为 |
|————|——————————|——————————|
| 301 | 永久重定向 | 浏览器会跳转并缓存新地址,后续直接访问新地址。 |
| 302 | 临时重定向 | 浏览器仅跳转一次,仍使用原地址。 |

  • 示例
    • 301:网站永久迁移(如example.com → www.example.com)。
    • 302:临时活动跳转(如
0