HTTP协议详解(上)

news2025/7/12 9:29:13

目录

前言:

认识URL

HTTP协议方法

通过Fiddler抓包

GET和POST之间典型区别

header详解

HTTP响应状态码

常见状态码解释

状态码分类

HTTP协议报文格式

小结:


前言:

    HTTP协议属于应用层协议,称为超文本传输协议,以文本方式组织数据进行交互。当我们通过浏览器输入一个URL,它就会发送一个HTTP请求到服务器,服务器就会返回相应的一些数据,经过浏览器的运行,渲染最终得到我们所看到的画面。

认识URL

    hppts//:www.baidu.com/?tn=15007414_8_dg

注意:

    1)https:协议名称,还有http协议。(两者的区别下篇博客详细介绍)

    2)www.baidu.com:服务器地址,域名通过DNS域名解析服务器会得到网络中唯一的地址IP。

    3)端口号:URL中可以省略端口号。浏览器会默认提供端口号,http为80端口,https为443端口。

    4)/:带层次的路径,/为根目录。服务器找到程序管辖内的一个具体文件。

    5)tn=15007414_8_dg:query string查询字符串。描述一些具体信息,以键值对的方式来组织。会根据urlencode进行重新编码,因为URL有一些特定的符号,这样可以根据URL中所规定的规则来体现。

    URL:唯一资源定位符,标识互联网上唯一资源的位置。

    URI:唯一资源标识符,用来身份标识。

HTTP协议方法

注意:

    http的方法描述了这次请求具体是干嘛的。最常用的是GET方法和POST方法。

    GET:发请求获取资源。POST:给服务器提交资源。(以客户端为基准)

    一般在浏览器里直接输入URL,html里的link,script,img,a...还有通过js构造GET请求等等都会发送GET请求。

    一般修改头像,登录等操作都是给服务器提交数据。这些都属于POST请求。

通过Fiddler抓包

抓包原理:

    当启动抓包程序后,我们电脑上的http请求都会经过抓包程序的服务器。这个时候通过这个程序就很容易得到数据包了。

    使用抓包程序需要注意主机上有没有代理服务器启动着,这个时候就有可能导致抓包失败,原因是可能被代理服务器给截胡了。

注意:

    上面是访问百度和浏览器发起请求所抓的包,有一个GET请求,POST请求。http请求可分为四个部分:首行,请求头(header),空行,正文(body)。

    一般GET请求没有body,发送数据会使用query string。POST请求发送数据一般使用body。

GET和POST之间典型区别

    首先GET和POST没有本质区别。大部分场景下可以相互替换,只是在平常使用中有一定的区别。

    1)GET也可以给服务器传递一些信息,一般放在query string。POST传递消息通过body。

    2)语义上的差别,GET请求一般从服务器获取数据。POST请求一般用于给服务器提交数据。

    3)GET通常会被设计为幂等,而POST不要求幂等。(幂等:相同的输入,得到的结果也一定相同)。

    4)GET可以被缓存,POST一般不能缓存。(请求结果缓存下,下次可以直接读取缓存数据,例如:浏览器缓存)。

注意:

    GET请求数据大小的上限,官方文档没有明文规定。

header详解

    使用键值对表示,都是http实现事先定义好的,都有特定的含义。

    1)Host:描述了服务器的IP和端口号。这个内容大概率和URL中IP和端口号一样,也可能不一样(存在代理服务器)。

    2)Content-Length:表示body中数据长度。

    3)Content-Type:表示body中数据类型。(GET请求,没有body,则没有这两字段。POST有body则需要有)

    4)User-Agent:描述了浏览器和操作系统版本。方便程序员进行多版本开发,也可区分PC端和移动端。

    5)Referer:描述当前页面的“来源”。如果直接地址栏输入地址则没有referer。

    6)Cookie:本质上是浏览器给网页提供的 本地存储数据 的机制。网页默认是不允许访问计算机硬盘的。

      Cookie从哪来:Cookie中数据来自服务器,服务器通过Set-Cookie字段来设置浏览器的Cookie存什么。

      Cookie在哪里存:可以认为存于浏览器 硬盘中。Cookie在存的时候按照 浏览器 + 域名 维度进行细分的。不同浏览器对应不同Cookie。同一浏览器不同域名也对应不同Cookie。Cookie存在过期时间。

      Cookie到哪里去:回到服务器里。客户端通过Cookie保存用户使用的中间状态,当客户端请求服务器时,就会自动把Cookie内容带入到请求中。服务器就可以知道当前客户端处于什么状态了。

      Cookie就像是服务器在浏览器搞的一个寄存处,可以方便感知到当前网页的中间状态。

HTTP响应状态码

    http响应状态码描述了这次响应的结果和具体原因。

注意:

    这是访问百度抓到的响应数据包。可以清楚看到首行包含协议名称和版本号,以及响应的状态和状态描述。

 常见状态码解释

    1)200 OK:这次响应一切OK。

    2)404 Not Found:访问资源不存在,服务器上没找找到。

    3)403 Forbidden:访问被拒绝,没有权限。

    4)302 Move:重定向。域名迁移,当访问被迁移的域名,服务端会返回迁移好的域名。客户端再次访问新域名。(涉及两次交互)

    5)500 Internal Server Error:服务器内部错误,代码抛异常。

    6)504 Geteway Timeout:响应超时,时间太久了。

状态码分类

    1)2** 成功

    2)3** 重定向

    3)4** 客户端错误

    4)5** 服务器错误

HTTP协议报文格式

 注意:

    上图可解释http超文本传输,数据组织的格式。上图抓包的数据文本同样是按照这样的格式组织数据。

小结:

    学习http协议离不开抓包。我们要多使用抓包程序进行抓包,然后分析请求数据和响应数据,可进一步让我们理解http协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

aws dynamodb 基础概念和理论

参考资料 https://amazon-dynamodb-labs.workshop.aws/https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/Introduction.html dynamodb的工作原理 核心概念 table、item和attributes是dynamodb的核心组件,可以分别对应关系型数据库中的表&#x…

JavaScript新手学习手册-基础代码(三)

与上篇博客相接 一:Date对象 var date new Date();console.log(date); //全部时间console.log(date.getFullYear()); //年console.log(date.getMonth()); //月console.log(date.getDay()); //星期几console.log(date.getHours()) //时console.log(d…

java实现Hbase 增删改查

目录 一、新建一个maven工程 二、代码实现 2.1、配置hbase信息,连接hbase数据库 2.2、创建命名空间 2.3、创建表 2.4、删除表,删除之前要设置为禁用状态 2.5、添加数据 2.6、获取命令表空间 / tables列表 2.7、get方法查看表的内容 2.8、scan方法…

腾势D9改装来了,帮大家总结了一些需要改装的项目

最近腾势D9真的太火了,不仅外观霸气,内饰也是非常豪华。 1月份销量在MPV里已经排名第二了,性价比很高。 这边整理了一些改装项目供大家参考,有什么想法可以评论区一起讨论哦1. 电吸门 有车主吐槽车门难关,由于车内空间…

计算机网络:ICMP协议

网际控制报文协议ICMP ICMP协议支持主机或者路由器差错报告和网络探询 类型表明ICMP报文是哪类检验和:检验整个ICMP报文ICMP报文可分为ICMP差错报文和ICMP询问报文。 ICMP差错报告报文 终点不可达:当路由器或者主机不能交付数据报时,向源站…

Spring - Spring框架概述面试题总结

文章目录01. 什么是Spring?02. Spring框架的设计目标,设计理念,和核心是什么?03. Spring的优点是什么?04. Spring框架中都用到了哪些设计模式?05. Spring有哪些应用场景?06. Spring由哪些模块组成&#xf…

基于DDD的微服务落地

DDD四层架构对实时性要求高的强一致性业务场景,可采取分布式事务。分布式事务有性能代价,在设计时需要平衡考虑业务拆分、数据一致性、性能和实现的复杂度,尽量避免分布式事务的产生。领域事件驱动的异步方式是分布式架构常用的设计方式&…

【python】使用python将360个文件夹里的照片,全部复制到指定的文件夹中,并且按照顺序重新命名

最近要做一个图像生成的课题,在网上找了一个混合的数据集。这个数据集中一共有360个文件夹,然后文件夹中有6-9张不等的照片,我的目标就是编写python代码将所有的照片取出来,放到一个指定的文件夹里,并且从1开始按照顺序…

yolov8行人识别教程(2023年毕业设计+源码)

yolov8识别视频直接上YOLOv8的结构图吧,小伙伴们可以直接和YOLOv5进行对比,看看能找到或者猜到有什么不同的地方? Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻…

VMware虚拟机安装Ubuntu 2022最新版详细图文安装教程(VMware虚拟机安装+Ubuntu下载+VMware虚拟机配置运行)

名人说:君子生非异也,善假于物也。——荀子 Code_流苏(CSDN) o(‐^▽^‐)o很高兴你打开了这篇博客,跟着步骤一步步尝试安装吧。✧ 目录 一、简单介绍二、安装虚拟机VMware三、Ubuntu镜像下载四、虚拟机VMware配置及运行★如有疑问,欢迎评论,博主看到即回!当然,期待你的…

【基础算法】双指针---判断子序列

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…

极速开发,无限可能,2023网易低代码大赛全新赛季启动

去年火爆的低代码大赛还犹在目,近800人用轻舟低代码平台畅享开发乐趣。这不,2023网易低代码大赛即刻启动,3月6日至3月27日限时开放报名,全新角逐,正式展开!1\ 获胜者可得万元大奖、猪厂工作机会 /Low Code …

JavaEE课程实践-Servlet的部署(tomcat服务器)

目录 Servlet简述 tomcat服务器的安装和运行 Servlet的部署 部署具体步骤 一、创建maven工程 二、创建Servlet类 三、导入相应jar包 四、编写Servlet代码 五、运行maven项目,启动tomcat服务器 六、测试访问是否成功。 Servlet简述 Servlet 是 Java EE 技术…

第六章:多线程

第六章:多线程 6.1:程序、进程、线程基本概念 程序 程序program是为了完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程 ​ 进程process是程序的一次执行过程,或是正在运行的一个程序。是一个…

vue3相比vue2性能上提升体现

vue3相比vue2,在 编译阶段,源码体积 响应式系统 都做了性能提升不以解决实际业务痛点的更新都是耍流氓1. ts的支持2. 移除了不常用的api,例如 过滤器 $on $off $once 实例方法 内联模板attribute $destroy3. 加了tree - shaking4. 移除了mixin缺点&#…

ESP32设备驱动-RFID-RC522模块驱动

RFID-RC522模块驱动 文章目录 RFID-RC522模块驱动1、RFID-RC522介绍2、硬件准备3、软件准备4、驱动实现1、RFID-RC522介绍 基于 NXP 的 MFRC522 IC 的 RC522 RFID 模块通常带有一个 RFID 卡标签和具有 1KB 内存的密钥卡标签。 最重要的是,它可以写一个标签,这样你就可以在里…

前端老赵一次给你讲透“微前端”架构

一、引言: 随着Web应用程序的规模和复杂度的不断增加,前端技术也在不断发展和演进。微前端是近年来兴起的一种前端架构模式,通过将大型Web应用程序拆分为小型、可独立开发和部署的模块,从而降低开发和维护的难度,同时…

【LeetCode与《代码随想录》】二叉树篇:做题笔记与总结-JavaScript版

文章目录代码随想录144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102.二叉树的层序遍历226.翻转二叉树101. 对称二叉树104.二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数110.平衡二叉树257. 二叉树的所有路径404.左叶子之和513.找树左下角…

盘点曾经很火但消失了的8个软件

目录 1、飞信 3、暴风影音 4、千千静听 5、虾米音乐 6、快车下载 7、人人网 8、QQ农场 今天小编给大家分享曾经很火但消失了的8个软件,你都用过吗? 1、飞信 飞信是中国移动通信集团公司推出的一款短信、语音、视频通信应用程序。它于2007年推出&a…

JDK的动态代理(powernode 文档)(内含源代码)

JDK的动态代理(powernode 文档)(内含源代码) 源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87546086 一、动态代理 目录JDK的动态代理(powernode 文档)&#xff0…