目录
Content-Length(表示请求正文 body 中的数据长度,单位是字节)
Content-Type(表示请求正文 body 中的数据格式)
HTTP 请求
请求格式

| 报文层级 | 组成要素 / 示例内容 | 关联知识点 / 对应方法说明 |
|---|---|---|
| 请求行 *Request Line* | Method URL Version 例如: POST /api/blog/info HTTP/1.1 | 规定了本次请求的行为、目标路径及协议版本。 |
| 请求报头 *Request Headers* | Key: valueKey: valueKey: valueKey: value例如: Content-Type: application/json | 向服务器传递附加信息,如客户端环境、数据格式、Cookie、Token 认证等。 |
| 空行 *Blank Line* | \r\n(回车符 + 换行符) | 关键分隔符:用于告知服务器请求头已经结束,下方开始解析请求正文。 |
| 请求正文 *Request Body* | 请求正文内容(具体传输的数据) | 并不是所有请求方法都带正文,不同方法的行为也不同: • GET:通常无正文,数据直接拼接在 URL 后面。 • POST:用于传输实体主体,如表单、JSON 数据。 • PUT:用于传输文件或更新资源,具有幂等性。 • DELETE:用于删除文件或资源。 |
Get请求例子:
GET https://www.baidu.com/favicon.ico HTTP/1.1
Host: www.baidu.com
Cookie: BAIDUID=0DC17694BE3C92702FBF070D60B4328A:FG=1
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en,*
User-Agent: Mozilla/5.0
POST 请求例子:

请求行
GET https://www.baidu.com/favicon.ico HTTP/1.1
1. Method 是 HTTP 请求的类型
GET
2. URL 是统一资源定位符
https://www.baidu.com/favicon.ico
3. Version 表示协议版本
HTTP/1.1
请求报头(header)
Host: www.baidu.com
Cookie: BAIDUID=0DC17694BE3C92702FBF070D60B4328A:FG=1
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en,*
User-Agent: Mozilla/5.0
请求报头是键值对的形式
键和值使用(冒号 + 空格)的形式来分开
空行
空行说明请求报头结束
请求正文(body)
请求正文可有,可没有
GET 请求一般没有 body 部分
认识方法(Method)
| 方法 | 说明 | 支持的HTTP协议版本 |
|---|---|---|
| GET | 获取资源 | 1.0、1.1 |
| POST | 传输实体主体 | 1.0、1.1 |
| PUT | 传输文件 | 1.0、1.1 |
| HEAD | 获得报文首部 | 1.0、1.1 |
| DELETE | 删除文件 | 1.0、1.1 |
| OPTIONS | 询问支持的方法 | 1.1 |
| TRACE | 追踪路径 | 1.1 |
| CONNECT | 要求用隧道协议连接代理 | 1.1 |
| LINK | 建立和资源之间的联系 | 1.0 |
| UNLINE | 断开连接关系 | 1.0 |
GET
获取的字面意思,表示要从服务器上获取资源
POST
发送的字面意思,表示向服务器发送资源
PUT
推送的字面意思,也是表示要向服务器发送资源之类的
DELETE
删除的字面意思,表示要删除服务器中的资源
在实际开发中,一般使用 GET 和 POST 比较多
在使用 HTTP 传输图片(二进制文件),将二进制数据转换成文本(使用 Base64 编码)
GET 和 POST 的区别是什么?
- GET 和 POST 没有本质上的区别,能用 GET 的也能用 POST,能用 POST 也能用 GET
- GET 表示获取数据的语义,POST 表示发送数据的语义
- GET 通常把传递给服务器的数据放到 query string 中
- POST 通常把传递给服务器的数据放到 请求正文(body)中
URL
详解常见的请求报头(header)
Host(表示服务器主机的 IP 地址和端口号)
Host: www.baidu.com
1. IP 地址由域名来表示,可以通过 DNS 服务器将域名解析到一个具体的 IP 地址
2. 端口号看使用协议的默认端口号,HTTP 协议默认是 80 端口,HTTPS 协议默认是 443 端口
Content-Length(表示请求正文 body 中的数据长度,单位是字节)
Content-Length: 9947
Content-Type(表示请求正文 body 中的数据格式)
Content-Type: application/x-www-form-urlencoded
常见的格式:
- text/html:HTML 文档
- text/css:CSS 样式表
- application/javascript:JavaScript 脚本
- application/json:JSON 数据
- image/jpg:JPEG 图片
- image/png:PNG 图片
- text/plain:纯文本
User-Agent(记录操作系统的信息和浏览器的信息)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36
Referer(记录当前这个页面是由哪个页面跳转过来的)
Referer: https://www.baidu.com/
这个例子表明:当前这个页面是由百度首页跳转过来的
不是所有的请求都有 Referer,有页面的跳转才有 Referer
Cookie(很重要)
什么是 Cookie?
Cookie 是浏览器这端保存数据到本地的一种机制
Cookie 从哪里来?
Cookie 是服务器返回的
在响应报头中,服务器把要存储的 Cookie 通过 Set-Cookie 这样的键值对来返回
Set-Cookie: BAIDUID=4447D7823D6ECEC2AF92E74C71314B14: FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=4447D7823D6ECEC2AF92E74C71314B14; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1775661838; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BAIDUID=4447D7823D6ECEC2D26C2BF8D1F29A08:FG=1; max-age=31536000; expires=Thu, 08-Apr-27 15:23:58 GMT; domain=.baidu.com; path=/; version=1;
Cookie 怎样存储?
通过键值对的方式来存储
对于不同的浏览器,它们各自存储的 Cookie 之间是完全隔离的,不会相互影响
Cookie: BIDUPSID=0537CFCD4BBBF69AC8E66910DB3172AE; PSTM=1762876370; BAIDUID=0537CFCD4BBBF69AC8E66910DB3172AE:FG=1; BD_UPN=12314753; BDUSS=TJydTJyZ35yNS0zY3gxeG4yWTNEQVVYQnIybkxXMmhYeFgwRTQyeWliQkRoejlwSUFBQUFBJCQAAAAAAQAAAAEAAAA6QCpFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEP6F2lD-hdpS;
Cookie 到哪里去?
当一个浏览器的 Cookie 存储到本地之后,后续再访问同一个域名的时候,Cookie 就会通过请求报头的形式传递给服务器
Cookie 的一个核心功能
保存用户的登录状态,避免重复登录
再来看这一张思维导图来回顾上面提到的知识:


1651

被折叠的 条评论
为什么被折叠?



