http 报文、编码格式Content-Type

一、http报文结构图

1、请求报文

┌───────────────────────────────────────────────┐
│ 请求行 (Request Line) │
│ 方法 (GET/POST/...) 路径 HTTP版本 │
│ 例如:GET /index.html HTTP/1.1 │
├───────────────────────────────────────────────┤
│ 请求头部 (Headers) │
│ Host: www.example.com │
│ User-Agent: Mozilla/5.0 │
│ Accept: text/html │
│ ... │
├───────────────────────────────────────────────┤
│ 空行 (CRLF) │
├───────────────────────────────────────────────┤
│ 请求体 (Body)(可选) │
│ 一般在 POST、PUT 请求中使用 │
│ username=abc&password=123 │
└───────────────────────────────────────────────┘

补充:

Content-Type 是一个请求头部字段(Header),即请求头部包含编码格式

通常在请求中有 请求体(Body) 时才需要加上,比如在 POSTPUT 请求中。它的作用是告诉服务器,请求体中的数据类型是什么,以便服务器正确解析。

2、http 响应报文

┌───────────────────────────────────────────────┐
│ 状态行 (Status Line) │
│ HTTP版本 状态码 状态描述 │
│ 例如:HTTP/1.1 200 OK │
├───────────────────────────────────────────────┤
│ 响应头部 (Headers) │
│ Content-Type: text/html │
│ Content-Length: 1234 │
│ Server: Apache │
│ ... │
├───────────────────────────────────────────────┤
│ 空行 (CRLF) │
├───────────────────────────────────────────────┤
│ 响应体 (Body)(可选) │
│ HTML、JSON 或其他内容 │
│ <html>...</html> 或 {"status": "ok"} │
└───────────────────────────────────────────────┘

3、图解说明:

  • 请求行 / 状态行 是报文的第一行,定义了请求类型或响应状态。

  • 头部字段(Headers) 提供了请求或响应的元数据(如主机、浏览器、内容类型等)。

  • 空行 是固定格式,用于分隔头部和正文。

  • 请求体/响应体 是可选内容,通常包含用户提交的数据或服务器返回的数据。

4、构造请求体

使用 curl 构造请求体:

# 发送 JSON
curl -X POST http://localhost/api \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "age": 25}'

# 发送表单
curl -X POST http://localhost/api \
-d "name=Alice&age=25"

# 上传文件
curl -X POST http://localhost/upload \
-F "file=@myfile.txt"

python request

# JSON 请求体
requests.post(url, json={"name": "Alice"})

# 表单请求体
requests.post(url, data={"name": "Alice"})

# 文件上传请求体
requests.post(url, files={"file": open("myfile.txt", "rb")})

二、请求头和响应头中的编码格式

1、什么是 Content-Type

Content-Type 是 HTTP 请求或响应中的一个头部字段用于说明正文内容(Body)的格式类型

        是 HTTP 中的“语言说明书”,告诉接收方正文的数据格式;正确设置它,能保证数据被正确解析与处理。

它的语法格式是:

Content-Type: 媒体类型/子类型

2、常见的七种 Content-Type 类型说明

类型说明典型用途或例子
application/json 表示数据是 JSON 格式 {"key": "value"}
application/x-www-form-urlencoded 表示表单数据被编码成键值对,类似 URL 查询参数 key1=value1&key2=value2(POST 表单默认)
multipart/form-data 表示多部分数据,常用于上传文件等复杂结构 表单上传文件(带有 boundary)
text/plain 纯文本格式 一般用于调试或简单文本传输
application/xml XML 格式 SOAP 接口或某些老系统 API
application/octet-stream 二进制流数据 上传文件或下载文件流
text/html HTML 文档 浏览器或爬虫获取网页内容

 

posted @ 2025-05-28 11:05  凡人半睁眼  阅读(41)  评论(0)    收藏  举报