上一篇
http向服务器请求数据
- 行业动态
- 2025-04-28
- 3516
HTTP通过客户端发送请求报文至服务器,服务器解析后返回响应报文,完成数据交互
HTTP请求数据核心流程
HTTP请求方法
方法 | 用途 | 特点 |
---|---|---|
GET | 获取资源 | 参数在URL中,安全但有长度限制(约2048字符) |
POST | 提交数据 | 参数在请求体,无长度限制,适合敏感数据 |
PUT | 更新资源 | 覆盖式更新,需配合资源ID |
DELETE | 删除资源 | 需配合资源ID |
HEAD | 获取元信息 | 只返回响应头,不返回正文 |
请求生命周期
建立连接
- 客户端通过DNS解析域名→TCP三次握手→SSL/TLS握手(HTTPS)
- 默认端口:HTTP(80)/HTTPS(443)
构造请求
GET /api/user?id=123 HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 Accept: application/json
发送请求
- 客户端将请求包发送到服务器
- 包含:请求行、请求头、可选的消息体
服务器处理
- 解析URL路由
- 执行业务逻辑(如查询数据库)
- 生成响应数据
接收响应
HTTP/1.1 200 OK Content-Type: application/json Date: Wed, 18 Oct 2023 08:00:00 GMT {"id":123,"name":"张三"}
关键响应状态码
类别 | 状态码 | 含义 |
---|---|---|
1xx | 101 | 协议切换成功(如切换为WebSocket) |
2xx | 200 | 请求成功 |
201 | 资源已创建 | |
3xx | 301 | 永久重定向 |
307 | 临时重定向(保持请求方法) | |
4xx | 400 | 坏请求(参数错误) |
401 | 未授权(需认证) | |
403 | 禁止访问(权限不足) | |
404 | 资源不存在 | |
5xx | 500 | 服务器内部错误 |
502 | 网关错误(服务器作为代理时) | |
503 | 服务不可用(如服务器过载) |
常见请求头配置
头部字段 | 作用 | 示例值 |
---|---|---|
Content-Type | 标识请求体格式 | application/json |
Accept | 期望响应格式 | text/html,application/xml |
Authorization | 身份认证(如Bearer Token) | Bearer abcd123 |
Cookie | 携带浏览器存储的Cookie | sessionid=abc |
If-None-Match | 实现ETag缓存验证 | W/"xyz123" |
异常处理策略
场景 | 解决方案 |
---|---|
网络超时 | 设置合理超时时间(如fetch 的timeout 选项),实现重试机制 |
跨域问题 | 服务器设置Access-Control-Allow-Origin 头,或使用JSONP/CORS代理方案 |
大文件下载中断 | 使用断点续传(Range 请求头),分片下载 |
数据格式不匹配 | 检查Content-Type /Accept 头,或增加数据转换逻辑(如JSON.parse) |
相关问题与解答
Q1:为什么POST请求比GET更安全?
A:
- 参数位置:GET参数暴露在URL中,会被浏览器历史记录、服务器日志记录;POST参数在请求体中,相对隐蔽
- 长度限制:GET受URL长度限制(约2048字符),POST无理论限制
- 缓存机制:GET请求可被缓存/收藏,POST通常不会被缓存
- 幂等性:GET应设计为幂等(多次请求效果相同),POST可能产生副作用(如重复扣款)
Q2:如何处理HTTP 401未授权错误?
A:
- 获取认证方式:检查响应头
WWW-Authenticate
字段(如Basic
、Bearer
) - 提供凭证:
- 基础认证:在头部添加
Authorization: Basic <base64(username:password)>
- Token认证:获取并携带
Bearer <token>
- 基础认证:在头部添加
- 重定向处理:若服务器返回307重定向到登录页,需自动跳转并携带原请求上下文
- 持久化存储:将有效凭证存入Cookie/Local