http协议之请求报文

什么是http请求报文?

请求报文是在HTTP协议中,客户端向服务器发送请求时所使用的数据格式。它包含了请求行、请求头部、空行、请求体4个部分。其中请全体可以没有。

  1. 请求行:请求行由请求方法、URI和协议版本组成,用于描述请求要求的操作和资源位置。

    • 请求方法:指示对资源执行的操作类型,如GET、POST、PUT、DELETE等。
    • URI:标识了要请求的资源的路径。
    • 协议版本:指示客户端使用的HTTP协议版本,如HTTP/1.1。
  2. 请求头部:请求头部包含了一系列的键值对,提供了关于请求的附加信息。

    • Host:指定请求的目标主机名和端口号。
    • User-Agent:标识发起请求的客户端应用程序或浏览器。
    • Content-Type:指定请求体中的数据类型,如application/json、multipart/form-data等。
    • Accept:指定客户端能够接受的响应内容类型。
    • Cookie:包含了来自服务器的Cookie信息等。
  3. 请求体:请求体包含了需要传递给服务器的数据。在某些请求方法(如POST和PUT)中,请求体用于传输表单数据、上传文件、JSON数据等。

请求报文的格式

<请求方法> <URL> <协议版本>
<请求头部1>: <值1>
<请求头部2>: <值2>
...
<空行>
<请求体>

get请求报文

GET /api/products HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json

1.请求报文:GET请求的请求行中包含了请求方法、URI和协议版本,请求头部可能会包含一些附加信息(参数和数据直接附加在URL的查询字符串中)。

2. 最佳实践:GET请求主要用于获取资源,不应该对服务器状态产生影响。在GET请求中,避免发送敏感信息以防止泄露。

 

每项数据之间使用:\r\n

 post请求报文

复制代码
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 69

{
  "name": "John Doe",
  "email": "johndoe@example.com"
}
复制代码

 

每项数据之间使用:\r\n

put请求报文

复制代码
PUT /api/products/12345 HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 58

{
  "name": "New Product Name",
  "price": 29.99
}
复制代码

DELETE请求报文

DELETE /api/users/45678 HTTP/1.1
Host: example.com

 

Content-Type

Content-Type是HTTP请求和响应头部字段之一,用于指示实体主体的媒体类型(即数据类型)。它告诉接收方如何解析和处理请求或响应中的数据。

Content-Type的值通常由两部分组成:媒体类型(MIME Type)和字符集编码(Charset)。它们以;分隔,例如text/html;charset=utf-8表示HTML文档类型,并使用UTF-8字符编码。

常见的字符集编码:

字符集编码:指定文本数据的字符编码方式。常见的字符集编码有:

  1. UTF-8:多字节编码,支持全球字符集。
  2. SO-8859-1:单字节编码,支持拉丁字母表。
  3. UTF-16:双字节编码,支持更广泛的字符集。

常见的媒体类型:

  1. text/plain:

    • 详解:指纯文本数据,没有特定格式或结构。
    • 示例:Content-Type: text/plain
  2. text/html:

    • 详解:指HTML文档,用于在Web浏览器中显示网页内容。
    • 示例:Content-Type: text/html
  3. application/json:

    • 详解:指JSON(JavaScript Object Notation)数据,一种轻量级的数据交换格式。
    • 示例:Content-Type: application/json
  4. application/xml:

    • 详解:指XML(eXtensible Markup Language)数据,一种描述性标记语言。
    • 示例:Content-Type: application/xml
  5. application/pdf:

    • 详解:指PDF(Portable Document Format)文档,用于传输可打印文件的格式。
    • 示例:Content-Type: application/pdf
  6. image/jpeg:

    • 详解:指JPEG(Joint Photographic Experts Group)图像,一种常见的图像格式。
    • 示例:Content-Type: image/jpeg
  7. audio/mpeg:

    • 详解:指MPEG(Moving Picture Experts Group)音频,一种常见的音频格式。
    • 示例:Content-Type: audio/mpeg
  8. video/mp4:

    • 详解:指MP4(MPEG-4 Part 14)视频,一种常见的视频容器格式。
    • 示例:Content-Type: video/mp4
  9. multipart/form-data:

    • 详解:指表单数据的一种编码方式,用于在HTTP请求中上传文件。
    • 示例:Content-Type: multipart/form-data; boundary=---------------------------1234567890
  10. application/x-www-form-urlencoded:

    • 详解:指表单数据的默认编码方式,常用于通过URL参数传递键值对。
    • 示例:Content-Type: application/x-www-form-urlencoded

 

最佳实践:

  • 正确设置Content-Type:在发送请求时,要根据实际情况设置正确的Content-Type,确保接收方能够正确解析请求的数据。例如,在发送JSON数据时,应将Content-Type设置为application/json
  • 使用合适的字符集编码:对于文本数据,应根据实际需要选择合适的字符集编码。通常推荐使用UTF-8编码,以支持更广泛的字符范围。
  • 与服务器端保持一致:客户端和服务器应该约定并保持一致的Content-Type设置,以确保正确解析请求和响应的数据。

示例:

1. 发送JSON数据请求:

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 43

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

2. 接收JSON数据响应:

HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
Content-Length: 63

{"id": 123, "name": "John Doe", "email": "johndoe@example.com"}

 

posted @   Allen_Hao  阅读(297)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示