Files
mkdocs/docs/android面试/网络编程/HTTP与HTTPS.md
2026-01-15 11:53:37 +08:00

5.6 KiB
Raw Blame History

HTTP与HTTPS

目录


HTTP协议

HTTP 简介

// HTTPHyperText Transfer Protocol
// 超文本传输协议
// 应用层协议
// 基于 TCP/IP

HTTP 特点

  1. 无状态:每次请求独立,不保存状态
  2. 请求-响应:客户端请求,服务器响应
  3. 明文传输数据不加密HTTPS 加密)

HTTP 请求格式

请求行:方法 路径 协议版本
请求头:键值对
空行
请求体:数据(可选)

示例:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0

HTTP 响应格式

状态行:协议版本 状态码 状态描述
响应头:键值对
空行
响应体:数据

示例:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234

<html>...</html>

HTTPS协议

HTTPS 简介

// HTTPSHTTP over SSL/TLS
// 安全的 HTTP 协议
// 使用 SSL/TLS 加密

HTTPS 工作原理

1. 客户端请求 HTTPS 连接
2. 服务器返回证书
3. 客户端验证证书
4. 客户端生成对称密钥,用服务器公钥加密
5. 服务器用私钥解密,获得对称密钥
6. 使用对称密钥加密通信

SSL/TLS 握手

// SSL/TLS 握手过程
// 1. Client Hello客户端发送支持的加密算法
// 2. Server Hello服务器选择加密算法返回证书
// 3. Client Key Exchange客户端生成密钥用服务器公钥加密
// 4. Change Cipher Spec切换到加密通信
// 5. Finished握手完成

HTTP/2

HTTP/2 特性

  1. 多路复用:一个连接可以处理多个请求
  2. 头部压缩:压缩请求头和响应头
  3. 服务器推送:服务器可以主动推送资源
  4. 二进制分帧:使用二进制格式

HTTP/2 vs HTTP/1.1

特性 HTTP/1.1 HTTP/2
连接 多个连接 单个连接
多路复用
头部压缩
服务器推送

HTTP/3

HTTP/3 特性

  1. 基于 UDP:使用 QUIC 协议
  2. 更快连接:减少握手时间
  3. 更好的拥塞控制
  4. 连接迁移:切换网络不断开连接

请求方法

GET

// GET获取资源
// 参数在 URL 中
// 幂等性:是
// 安全性:是(不修改资源)

GET /user?id=1 HTTP/1.1

POST

// POST创建资源
// 参数在请求体中
// 幂等性:否
// 安全性:否(修改资源)

POST /user HTTP/1.1
Content-Type: application/json

{"name": "John", "email": "john@example.com"}

PUT

// PUT更新资源完整更新
// 幂等性:是
// 安全性:否

PUT /user/1 HTTP/1.1
{"name": "Jane", "email": "jane@example.com"}

PATCH

// PATCH更新资源部分更新
// 幂等性:否
// 安全性:否

PATCH /user/1 HTTP/1.1
{"name": "Jane"}

DELETE

// DELETE删除资源
// 幂等性:是
// 安全性:否

DELETE /user/1 HTTP/1.1

状态码

2xx 成功

// 200 OK请求成功
// 201 Created创建成功
// 204 No Content成功但无内容

3xx 重定向

// 301 Moved Permanently永久重定向
// 302 Found临时重定向
// 304 Not Modified未修改使用缓存

4xx 客户端错误

// 400 Bad Request请求错误
// 401 Unauthorized未授权
// 403 Forbidden禁止访问
// 404 Not Found资源不存在

5xx 服务器错误

// 500 Internal Server Error服务器错误
// 502 Bad Gateway网关错误
// 503 Service Unavailable服务不可用

请求头与响应头

常用请求头

// Host服务器地址
Host: www.example.com

// User-Agent客户端信息
User-Agent: Mozilla/5.0

// Content-Type请求体类型
Content-Type: application/json

// Authorization认证信息
Authorization: Bearer token

// CookieCookie 信息
Cookie: session_id=123

常用响应头

// Content-Type响应体类型
Content-Type: application/json

// Content-Length响应体长度
Content-Length: 1234

// Set-Cookie设置 Cookie
Set-Cookie: session_id=123; Path=/

// Cache-Control缓存控制
Cache-Control: max-age=3600

// Location重定向地址
Location: https://www.example.com/new

安全机制

1. HTTPS

// 使用 HTTPS 加密传输
// 防止数据被窃听和篡改

2. 认证

// Basic 认证
Authorization: Basic base64(username:password)

// Bearer 认证Token
Authorization: Bearer token

// OAuth 2.0
Authorization: Bearer access_token

3. CORS

// 跨域资源共享
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type

面试常见问题

Q1: HTTP 和 HTTPS 的区别?

答案:

  • HTTP:明文传输,不加密
  • HTTPS:使用 SSL/TLS 加密传输,更安全

Q2: HTTP 请求方法?

答案:

  • GET获取资源
  • POST创建资源
  • PUT更新资源完整
  • PATCH更新资源部分
  • DELETE删除资源

Q3: HTTP 状态码?

答案:

  • 2xx成功
  • 3xx重定向
  • 4xx客户端错误
  • 5xx服务器错误

Q4: HTTP/2 的特性?

答案:

  1. 多路复用
  2. 头部压缩
  3. 服务器推送
  4. 二进制分帧

最后更新2024年