上一篇
http请求服务器及回应请求
- 行业动态
- 2025-04-28
- 2077
客户端发请求至服务器, 服务器解析后处理并生成响应,含状态码、头信息及数据,返回给客户端完成交互
HTTP请求服务器及回应请求详解
HTTP请求的基本流程
客户端发起请求
- 用户通过浏览器或客户端向服务器发送HTTP请求。
- 请求包含:请求行(方法、URL、协议)、请求头(Headers)、请求体(Body,部分方法需要)。
GET /index.html HTTP/1.1
。
DNS解析与TCP连接
- 客户端通过DNS将域名解析为服务器IP地址。
- 与服务器建立TCP连接(三次握手),默认端口为80(HTTP)或443(HTTPS)。
服务器处理请求
- 服务器接收请求,解析URL、头信息和请求体。
- 根据资源路径定位文件或调用后端逻辑处理请求。
服务器返回响应
- 服务器生成HTTP响应,包含状态行、响应头、响应体。
- 通过TCP连接将响应发送给客户端。
连接关闭或持久化
- HTTP/1.0默认关闭连接,HTTP/1.1支持持久连接(
Connection: keep-alive
)。
- HTTP/1.0默认关闭连接,HTTP/1.1支持持久连接(
HTTP请求方法
方法 | 用途 | 是否安全 | 是否允许请求体 |
---|---|---|---|
GET | 获取资源 | 是 | 无 |
POST | 提交数据(如表单) | 否 | 有 |
PUT | 更新资源(如文件覆盖) | 否 | 有 |
DELETE | 删除资源 | 否 | 有 |
HEAD | 获取资源头信息(不返回body) | 是 | 无 |
OPTIONS | 查询支持的HTTP方法 | 是 | 无 |
示例:
GET /users?id=123
:获取用户ID为123的信息。POST /login
:提交用户名和密码登录。
HTTP响应结构
状态行
- 格式:
HTTP/版本 状态码 原因短语
- 示例:
HTTP/1.1 200 OK
。
- 格式:
响应头(Headers)
- 包含元信息,如内容类型、长度、编码等。
- 常见头字段:
Content-Type
:text/html; charset=utf-8
(告诉浏览器如何解析内容)。Content-Length
:1234
(响应体的字节长度)。Set-Cookie
:sessionId=abc123
(设置Cookie)。Location
:https://example.com/new-path
(重定向地址)。
响应体(Body)
实际返回的数据(如HTML、JSON、图片等)。
HTTP状态码分类
类别 | 状态码范围 | 示例 | 含义 |
---|---|---|---|
1xx | 100-199 | 101 | 信息响应(继续处理) |
2xx | 200-299 | 200, 201 | 成功(200:OK;201:已创建) |
3xx | 300-399 | 301, 302 | 重定向(301:永久;302:临时) |
4xx | 400-499 | 400, 401 | 客户端错误(404:未找到) |
5xx | 500-599 | 500, 502 | 服务器错误(503:服务不可用) |
常见请求头与响应头
头字段 | 作用 | 示例 |
---|---|---|
请求头 | ||
Host | 指定服务器域名/IP | Host: example.com |
User-Agent | 客户端信息(浏览器、版本等) | User-Agent: Mozilla/5.0 |
Content-Type | 请求体数据格式(POST/PUT) | Content-Type: application/json |
响应头 | ||
Date | 响应生成的时间 | Date: Tue, 19 Apr 2023 08:30:00 GMT |
Server | 服务器类型(可隐藏) | Server: nginx/1.18.0 |
Cache-Control | 缓存控制指令 | Cache-Control: no-cache |
相关问题与解答
问题1:GET和POST请求的区别是什么?
- GET:
- 用于获取资源,参数通过URL传递(
?key=value
)。 - 无请求体,数据暴露在URL中,安全性较低。
- 浏览器和服务器会对URL长度有限制(约2048字符)。
- 用于获取资源,参数通过URL传递(
- POST:
- 用于提交数据(如表单),参数在请求体中。
- 支持长数据(无明确长度限制),安全性较高。
- 可能修改服务器资源(非幂等操作)。
问题2:状态码301和302有什么区别?
- 301 Moved Permanently:
- 永久重定向,浏览器会缓存新地址,后续直接访问新URL。
- 示例:网站域名更换(如
example.com
→www.example.com
)。
- 302 Found:
- 临时重定向,浏览器不缓存新地址,下次仍请求原URL。
- 示例:未登录用户访问需认证的页面时重定向