在计算机网络中,HTTP请求由客户端向服务器发送,用于获取或提交数据。Request(请求)是指客户端发出的HTTP请求消息,通常由以下三部分组成:
1、请求行:请求行包含请求方法、请求URL和HTTP协议的版本号。
METHOD PATH PROTOCOL\r\n
示例:
GET /index.html HTTP/1.1\r\n
2、请求头部:请求头部是一组键值对,用于描述请求的特定属性,如浏览器类型、接收的数据类型、授权信息等。由多个键值对组成,每一个键值对用冒号分隔,每个键值对独占一行,最后以空行结束。常见的请求头有 User-Agent、Host、Accept、Content-Type 等等。
下面是一些常见的HTTP请求头:
- User-Agent:客户端使用的浏览器名称和版本号,可以用来确定浏览器兼容性。
- Accept:客户端接受的内容类型(MIME类型),用逗号分隔。例如:“text/html, application/xhtml+xml, application/xml”。
- Accept-Language:客户端接受的语言,用逗号分隔。
- Accept-Encoding:客户端接受的编码格式,例如:“gzip, deflate, br”。
- Referer:客户端的请求来源,主要用于防盗链和统计分析。
- Connection:客户端希望使用的连接类型,例如:“keep-alive”。
- Host:服务器的主机名和端口号,例如:“www.example.com:80”。
- Cache-Control:缓存控制指令,例如:“no-cache”。
- Authorization:客户端使用的身份验证信息,例如基本身份认证所需的HTTP验证凭据。
- Content-Type:请求体的MIME类型,例如:“application/json”。
key1: value1\r\n
key2: value2\r\n
\r\n
示例:
Host: www.example.com\r\n
Content-Type: application/json\r\n
Authorization: Bearer xxxxxxxx\r\n
\r\n
3、请求体:请求体是可选的,通常用于POST请求或其他一些需要提供额外数据的请求中。请求正文中通常包含表单数据、JSON数据、XML数据等。
{ "key": "value" }
请求体的格式类型取决于Content-Type请求头字段。常见的请求体格式有:
- application/x-www-form-urlencoded:这是最常见的格式类型之一,通常用于HTML表单。数据格式类似于查询字符串,即“key1=value1&key2=value2”的格式。
- multipart/form-data:这种格式可以用于上传文件或二进制数据。请求体中每个部分都包含一个头和一个主体。
- application/json:这是一种使用JSON格式表示数据的格式类型。它比较灵活、易于解析,并适用于RESTful API等场景。
- text/plain:这是一种纯文本格式类型,可以用于传输简单的文本数据。
以下是Request中常用的一些属性和方法:
- method:表示HTTP请求方法(如GET、POST等)。
- url:表示请求URL地址(包括路径和查询参数)。
- headers:表示请求头信息,通常以键值对的形式存储在该属性中。
- body:表示请求正文数据,在POST请求中通常包含表单数据或JSON/XML数据。
- cookies:表示客户端发出的Cookie信息,通常也以键值对的形式存储在该属性中。
- query_params:表示通过查询参数传递的参数,通常也以键值对的形式存储在该属性中。
除了上述属性之外,Request还提供了一些实用的方法,例如:
- json():解析请求正文数据为JSON对象。
- form():解析请求正文数据为表单对象。
- text():将请求正文数据转换为字符串格式。
- content():获取请求正文数据的原始字节数据。
- get_header():获取指定请求头部信息。