Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【网络原理】从零开始深入理解HTTP的报文格式(二)

【网络原理】从零开始深入理解HTTP的报文格式(二)

作者头像
用户11369350
发布于 2025-05-01 13:26:14
发布于 2025-05-01 13:26:14
13900
代码可运行
举报
运行总次数:0
代码可运行

要开心

要快乐

顺便进步

1. HTTP响应

响应的构成主要涉及到前端的知识: html css js 构成网页的主体. html 表示页面的骨架. css 表示页面的样式. js 表示页面的行为.

1.1 认识"状态码"

状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况) 以下是比较常见的状态码.

① 200 OK 表示访问成功.

这是一个最常见的状态码, 表示访问成功. 抓包抓到的大部分结果都是 200

② 404 Not Found 表示没有找到资源.

浏览器输入一个 URL, 目的就是为了访问对方服务器上的一个资源. 如果这个 URL 标识的资源不存在,那么就会出现 404.例如, 在浏览器中输入 https://www.sogou.com/index.html 此时就在尝试访问 sogou 上的 /index.html 这个资源.如果输入正确, 则可以正确访问到. 但是如果输入错误, 比如 www.sogou.com/inde.html , 就会看到 404 这样的响应.

③ 403 Forbidden 表示用户没有权限访问.

查看码云的私有仓库, 如果不登陆, 就会出现 403. 访问受限403

④ 418 l am a teapot 这个状态码并没有实际的意义,只是"开个玩笑",称为"彩蛋". 实际开发商业产品或者开源项目的时候, 还是不建议搞彩蛋,防止出现一些宗教信仰问题,导致开发成果"毁于一蛋".

⑤ 302 Move temporarily 临时重定向

重定向就相当于手机号码中的 “呼叫转移” 功能. 比如我本来的手机号是 1314, 后来换了个新号码 520, 那么不需要让我的朋友知道新号码,只要我去办理一个呼叫转移业务, 其他人拨打 1314 , 就会自动转移到 520 上. 在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页.

码云的登陆页面: 码云页面登陆 抓包看到的响应结果:

⑥ 301 Moved Permanently 永久重定向 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址. 301 也是通过 Location 字段来表示要重定向到的新地址.

状态码小结

1.2 认识响应"报头"

响应报头的基本格式和请求报头的格式基本一致. 详细可见上一篇文章: 【网络原理】从零开始深入理解HTTP的报文格式(一) 类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义一致.

Content-Type

响应中的 Content-Type 常见取值有以下几种: • text/html : body 数据格式是 HTML • text/css : body 数据格式是 CSS • application/javascript : body 数据格式是 JavaScript • application/json : body 数据格式是 JSON

关于 Content-Type 的详细情况: MIME types

1.3 认识响应"正文"(body)

正文的具体格式取决于 Content-Type. 观察上面几个抓包结果中的响应部分.

① text/html

② text/css

③ application/javascript

④ application/json

2. 构造HTTP请求

2.1 通过form表单构造HTTP请求.

form (表单) 是 HTML 中的一个常用标签. 可以用于给服务器发送 GET 或者 POST 请求. form 只支持 GET 或者 POST 请求

Ⅰ form发送GET请求

form 的重要参数: • action: 构造的 HTTP 请求的 URL 是什么. • method: 构造的 HTTP 请求的 方法 是 GET 还是 POST (form 只支持 GET 和 POST).

input 的重要参数: • type: 表示输入框的类型. text 表示文本, password 表示密码, submit 表示提交按钮. • name: 表示构造出的 HTTP 请求的 query string 的 key. query string 的 value 就是输⼊框的用户输入的内容. • value: input 标签的值. 对于 type 为 submit 类型来说, value 就对应了按钮上显示的文本.

使用VSCode编译器,创建一个文件命名为form.html. 右侧输入 ! 再按TAB键代码基本框架就出来了.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hello</title>
</head>
<body>
    <form action="http://www.sogou.com/abc.html" method="get">
        <input type="text" name="key1">
        <input type="text" name="key2">
        <input type="text" name="key3">
        <input type="submit" value="提交">
    </form>
</body>
</html>

页面展示效果:

在输入框中随便填写数据,并提交

构造的get 请求如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET https://www.sogou.com/abc.html?key1=13&key2=14&key3=520 HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
sec-ch-ua: "Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: cuid=AAG2VbIdUwAAAAuipyOMMwAANgg=; SUV=1745486111856508; SNUID=4F22AF328583B539A426D88686764390; ABTEST=0|1745830865|v17; SUID=5B5768DF3EA7A20B00000000680F43D1; IPLOC=CN4400; LSTMV=345%2C204; LCLKINT=1918; browerV=3; osV=1

Ⅱ form发送POST请求

将上述代码中method = ‘‘get’’ 改成 method = '‘post’'即可.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hello</title>
</head>
<body>
    <form action="http://www.sogou.com/abc.html" method="post">
        <input type="text" name="key1">
        <input type="text" name="key2">
        <input type="text" name="key3">
        <input type="submit" value="提交">
    </form>
</body>
</html>

构造的post请求如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST http://www.sogou.com/abc.html HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
Content-Length: 24
Cache-Control: max-age=0
Origin: null
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

key1=13&key2=14&key3=520

主要的区别: ① method 从 GET 变成了 POST. ② 数据从 query string 移动到了 body 中.

2.2 利用ajax构造HTTP请求

从前端角度, 除了浏览器地址栏能构造 GET 请求, form 表单能构造 GET 和 POST 之外, 还可以通过ajax 的方式来构造 HTTP 请求. 并且功能更强大. 现在的网站,主体都是通过 ajax 的方式来进行交互的. 特点是可以不需要 刷新页面/页面跳转 就能进行数据传输.

Ⅰ 利用 ajax 发送 GET 请求

浏览器原生提供了 ajax 的 api 特别难用, 但好在有一些第三方库封装了 ajax. 本文使用的是 jquery 这个库.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ajax</title>
</head>
<body>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        //就是编写自己的 js 代码.
        $.ajax({
            type: 'get',
            url: 'https://www.sogou.com/abc.html?',
            success: function(body) {
                console.log(body);
            }
        });
    </script>
</body>
</html>

构造get的请求如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js HTTP/1.1
Host: cdn.bootcdn.net
Connection: keep-alive
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0
sec-ch-ua: "Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"
sec-ch-ua-mobile: ?0
Accept: */*
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: script
Sec-Fetch-Storage-Access: active
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Ⅱ 利用 ajax 发送POST请求

对于 POST 请求, 需要设置 body 的内容 1. 先使用 setRequestHeader 设置 Content-Type 2. 再通过 send 的参数设置 body 内容.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>ajax</title>
    </head>
    <body>
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
        <script>
            //就是编写自己的 js 代码.
            $.ajax({
                type: 'post',
                url: 'https://www.sogou.com/abc.html?',
                contentType: 'application/x-www-form-urlencoded',
                body: 'studentName=zhangsan',
                success: function(body) {
                    console.log(body);
                }
            });
        </script>
    </body>
    </html>

构造的post请求如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST https://www.sogou.com/abc.html? HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
Content-Length: 0
Pragma: no-cache
Cache-Control: no-cache
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0
Accept: */*
sec-ch-ua: "Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"
Content-Type: application/x-www-form-urlencoded
sec-ch-ua-mobile: ?0
Origin: null
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

2.3 利用postman构造HTTP请求

能够构造 http 请求的第三方工具,非常多的,本文章主要使用的 postman , 也有很多其他的工具, 都大同小异. 这些工具一般都来测试.

可以先下载postman postman官方网站 下载完后再注册一个账号, 注册邮箱建议用@163.

注册完了之后:

① 创建一个仓库

② 构造HTTP请求

③ 还可以自动生成代码

不会写前端代码也没事.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
盘点一个Python网络爬虫问题
前几天在Python最强王者群【刘桓鸣】问了一个Python网络爬虫的问题,这里拿出来给大家分享下。
Python进阶者
2023/08/31
2180
盘点一个Python网络爬虫问题
爬虫实战:从HTTP请求获取数据解析社区
在过去的实践中,我们通常通过爬取HTML网页来解析并提取所需数据,然而这只是一种方法。另一种更为直接的方式是通过发送HTTP请求来获取数据。考虑到大多数常见服务商的数据都是通过HTTP接口封装的,因此我们今天的讨论主题是如何通过调用接口来获取所需数据。
努力的小雨
2024/03/16
6660
【网络原理】深入理解关于HTTP协议和报文的格式以及重要的属性
并且在HTTP3.0之前都是使用的传输层协议就是TCP,我们知道TCP具有可靠性,但是效率比较低,所以在HTTP3.0时传输层使用就是UDP,并实现了一些列复杂的机制,实现可靠性~~~
用户11288949
2024/11/21
2520
【网络原理】深入理解关于HTTP协议和报文的格式以及重要的属性
帮管客CRM客户管理系统Nday
漏洞大约是4月份左右交的,目前官方应该也已经修复了,总体下来感觉目前的CNVD已经不是曾经那个CNVD了,总体而言这个CRM没怎么考虑到安全问题,挖到后面漏洞交的已经不太想交了,有兴趣的可以试试挖一下其他的,这里仅给出几个点,注入之类的就暂时先不给了
Al1ex
2022/09/07
2.6K1
帮管客CRM客户管理系统Nday
【网络原理】从零开始深入理解HTTP的报文格式(一)
本篇博客给大家带来的是网络HTTP协议的知识点, 重点介绍HTTP的报文格式. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 .
用户11369350
2025/04/30
1870
【网络原理】从零开始深入理解HTTP的报文格式(一)
AI网络爬虫-自动获取百度实时热搜榜
标题:<div class="c-single-text-ellipsis"> 东部战区台岛战巡演练模拟动画 <!--48--></div>
AIGC部落
2024/06/24
2270
AI网络爬虫-自动获取百度实时热搜榜
记一次某度wangpan 无xiansu下载地址解析站的分析及实现
本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!
拉灯的小手
2022/11/12
5290
手动实现一个简单的 HTTP 请求
本文我们通过 Socket,写一个 HTTP 协议,直观的感受一下上篇文章中的请求和响应。
shengjk1
2025/05/16
430
手动实现一个简单的 HTTP 请求
Swoole v4.6 版本新特性之 Http\Request 增强
在没有这些方法之前,需要手动将 onReceive 事件中收到的 $data 数据解析为 HTTP 协议
沈唁
2021/02/22
9220
【GUI软件】小红书按关键词采集笔记详情,支持多个关键词,含笔记正文、转评赞藏等
开发界面软件的目的:方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!
马哥python说
2024/03/30
5780
【GUI软件】小红书按关键词采集笔记详情,支持多个关键词,含笔记正文、转评赞藏等
【漏洞复现】泛微-云桥e-Bridge EC8.0 文件上传
泛微-云桥是一款基于云计算技术的企业级协作与办公平台,提供文档管理、流程审批、项目协作等功能,旨在提升企业内部沟通效率与工作协同能力。 /wxclient/app/recruit/resume/addResume 接口存在任意文件上传漏洞
没事就要多学习
2024/08/11
7960
【漏洞复现】泛微-云桥e-Bridge EC8.0 文件上传
Django的请求与响应
request.META: 请求中的元数据(消息头) request.META['REMOTE_ADDR']可以请求到客户端地址,当然你可以请求META中的任何信息.
Yuou
2022/09/26
6700
【干货】HW2023POC收集
技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他违法行为!!!
释然IT杂谈
2023/08/18
8850
【干货】HW2023POC收集
AI炒股-用kimi批量爬取网易财经的要闻板块
标题和链接在:<a href="https://www.163.com/dy/article/J2UIO5DD051188EA.html">华为急需找到“松弛感”</a>
AIGC部落
2024/06/24
1690
AI炒股-用kimi批量爬取网易财经的要闻板块
Python解析HTTP请求报文
下面的代码是用来解析HTTP报文中包含的内容的。http_parse函数将http报文初步解析为三个部分,分别是起始行,headers和body。主要利用的是python标准库中的email模块。
zy010101
2022/10/27
1.6K0
AI网络爬虫:批量下载某个网页中的全部链接
<a hotrep="doc.overview.modules.path.0.0.1" href="https://cloud.tencent.com/document/product/1093/35681" title="产品优势">
AIGC部落
2024/07/10
2300
AI网络爬虫:批量下载某个网页中的全部链接
【Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品+教程)
这里说一下,上次我发表了,如何用芝麻ip搭建代理池,可以看这里,后面免费的套餐用完了(并不是我用量大 :有时常限制),这个教程可以对 ip需求不高的人做一个参考,因为芝麻代理每天的ip够我做项目用的了,没必要付钱,坏处就是这个免费的ip每天都需要进来领取且当天失效,但是好处就是 领取后 原服务正常使用
德宏大魔王
2023/08/08
3020
【Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品+教程)
Python网络编程——HTTP请求报文
POST 方式会把提交的数据放在HTTP请求的<request-body>中。POST 方式的安全性比GET方式高。POST方式理论上对传输的数据量不受限,但GET方式由于URL长短的限制,传递的数据量有限制。
落雨
2022/02/27
30.8K0
python web开发 网络编程 TCP/IP UDP协议
常用函数:https://www.runoob.com/python/python-socket.html
Michael阿明
2022/01/07
7800
python web开发 网络编程 TCP/IP UDP协议
【爬虫软件】小红书搜索神器:一键批量采集笔记,多关键词同时抓取!
为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!
马哥python说
2024/01/25
2.4K2
【爬虫软件】小红书搜索神器:一键批量采集笔记,多关键词同时抓取!
推荐阅读
相关推荐
盘点一个Python网络爬虫问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验