HTTP 协议的基本格式和Fidder的简单使用

news2024/11/14 2:02:45

HTTP协议诞生于1996(开玩笑哈,诞生于1991年),http协议用于网页和手机app和服务器交互的场景。通过HTTP协议,客户端(例如网页浏览器或手机应用)可以向服务器发送请求,服务器则会响应这些请求并返回相应的数据。这种交互包括获取网页内容、提交表单数据、传输文件等各种操作。

虽然 HTTP 作用很大,应用很广,但是实际开发中,不一定是真正直接使用 HTTP,更大的概率是使用HTTPS(下一篇博客会介绍到),本质上还是 HTTP,但是引入了额外的加密层,使其更加的安全。

HTTP协议是典型的”一问一答“的模式的协议,请求和相应是一一对应的,在这些模式中,还有”多问一答“(例如在上传大文件的时候),”一问多答“(例如在下载大文件的时候),”多问多大“(远程桌面/游戏等),上述说的四种方式TCP/UDP是完全支持的。

为了进一步理解HTTP协议的报文格式,需要用到抓包工具,这里推荐Fidder,好用,而且免费。

Fidder的下载,以及简单使用

可以直接搜索Fidder,注意不要点到广告了

进来后你就往下划拉,

安装的时候一路next就行了。

进来后,左侧就包含主机上所有进程的http的请求和相应数据。模样如下

如果安装好 fiddler, 抓到的包,非常少可能是需要你手动开启抓取 https 的功能,过程如下

注意一定要同意安装证书

HTTP协议的基本格式

安装好后,随便双击左侧的一条http协议,在右侧的上方是请求的详情,在右侧的下方是相应的详情,点击Raw,再点击View in Notepad,之后就可以看到http的协议的详细信息,请求和相应都是这两个步骤

一个HTTP请求报文的四个基本部分

(1)首行

首行又包含了三个部分

a.请求的方法:GET,表示请求要干啥,GET的意识是要从服务器获取某个数据

b.请求的URL(请求的对方的网址)

c.版本号。下图中三段红线代表abc三个部分,在http请求报文里,是用空格来区分这三个部分的

(2)请求头(header)

header 中可以包含若干行数据,此处本质上是一个"键值对"结构,每一行是一个键值对。键和值之间, 使用:分割,最终有一个"空行”

(3)空行

最后一个 header 后面, 存在一个 空行.类似链表,使用 null 作为结尾。

(4)正文body

body是可选的,有些情况下有正文,有些情况下没有正文,下图的抓包是有正文的,在空行之后

HTTP相应报文的四个基本部分

(1)相应的首行

首行也分为三个部分,分别是版本号,状态码和状态的描述,这三个部分之间也是用空格分开的,在下图中,200是状态码,OK表示成功相应,失败的长另一个样,后面会解释

(2)相应的报头header

在空行之前都是相应的报头,这里就不截图展示了

(3)空行

header的结束标志

(4)正文

正文中本来就是保存啥都可以,有时候正文中也有空行, 此处的空号也是表示"内容!
这些空行没有特定含义,只有 HTTP 数据包中的第一个空行,才是 header 的结束标记。

认识http报文中的方法(method)

GET和POST

GET和POST描述了,我这次请求要干啥,在之前的抓包中,我们可以看到,有些报文的首行中就包含了GET和POST。

GET和POST被设计出来的最初目的是,GET 语义:从服务器获取某个数据。POST 语义:往服务器发送/提交某个数据,但是实际编程中,使用这俩方法的时候对应的语义,已经存在一些更模糊的东西了。所以实际开发中,GET 也可以用来提交某个数据, POST 也能获取某个数据。

GET和POST有什么区别?

盖棺定论, GET 和 POST从本质讲,没啥差别。GET 的应用场景,使用 POST 也可以,POST 的应用场景,GET 也可以.

但是在使用习惯的角度上来说,还是有一些区别的

(1)GET 从语义上来说,通常用来"获取数据”,POST 从语义上说,通常用来“提交数据”。

(2)GET 传递数据的时候,通常使用 query string,POST 传递数据的时候,通常使用 body

(3)服务器对于 GET 请求的设计,经常是设计成“幂等”的。而 POST 请求的设计,则不要求"幂等”

(4)GET 请求的结果可以被缓存,可以被浏览器收藏夹收藏。POST 一般不行。

解释一下可以被缓存:比如一个网站,通过 GET 获取到一些图片,浏览器就可以缓存这些图片下次访问这个网站就不必从网络获取了,直接从之前缓存的数据读取(缓存在硬盘上的)。

GET和POST的错误说法

(1)POST比GET更安全,比如在登录的时候,提交登录请求这一下,如果使用GET,GET把参数放到URL中,URL会显示到浏览器地址栏,地址栏中会显示密码,好像很不安全。

在这里,不是说,密码显示到浏览器地址栏就不安全, 不是说放到 body 中就安全,安全不安全,取决于,加密。如果加密了,也就不怕被看见了,也不怕被抓包

(2)GET 传输的数据量比较有限,比较短。POST 传输的数据量比较长,没有限制。 

其实在,HTTP 标准中, 明确说了一句话,针对 GET的 URL的长度是不做任何限制的。实践中,是可以构造一个很长的 URL 的.

(3)GET只能传输文本数据,POST 可以传输文本,也能传输二进制。

其实url的query string中,提供了urlencode机制,二进制数据也可以进行encode得到转义,并进行传输的。

认识请求报头(header)

Host:请求对应的主机和ip端口

在之前的抓包中,就可以看到Host

Content-Length和Content-Type

Content-Length:描述了body的长度,有些报文中没有body,一旦 有 body就需要知道body到底是多长, 才能知道一个完整的 http 请求。

可以解决粘包问题,在GET请求中,没有body,通过空行来知道http请求结束,POST请求,有body,通过空号找到body开始,通过Content-Length找到body的结束位置

Content-Type是描述body的数据类型,通过http协议,传输的数据,有很多种类,例如图片,视频,音频等,这些不同的数据,浏览器/服务器就有不同的处理方式。

在之前的抓包中,就可以看到Content-Type和Content-Length,

User-Agent(简称UA)

UA 里的信息主要是两个部分:1)浏览器版本。2)操作系统版本,描述了用户,使用啥样的设备,打开你的网页,

UA的作用:随着浏览器的迅速发展,最初的浏览器只能显示文字>后来,能够显示图片>后来能够显示视频。所以同一个时间中,就可能存在多个版本的浏览器,有的用的老版本,有的用的新版本,可以用UA来区分浏览器的版本。而现在,现在UA最主要的作用用来区分当前的设备是电脑,还是手机,

如果是电脑,返回一个宽屏的网页,如果是手机,返回一个窄屏,并且按钮都比较大的网页...

Referer

Referer表示当前的页面,从哪里跳转来的,如果是直接在地址栏输入url/直接点击收藏夹中的网站,此时 Referer 就是空的。

此处 Referer 就是表示从搜狗主页跳转过来的。

作用:举例,比如一个广告商,在多个平台都投有自己的广告,让后根据用户的点击量来给平台广告费,那么广告商是如何知道,用户是在那个平台点击的捏?

就是根据Referer来统计的。

有没有一种可能,存在某个人,把访问广告主服务器的请求的 referer 给修改了呢??

在上述简图中,数据在经过运营商路由器的时候,数据完全可以被抓包,如何将Referer给换掉,这样广告商收到的Referer就不是原来的了,在统计广告费的时候,就会出现偏差

解决方案:HTTPS就是重要的反制手段,下篇博客会介绍到

Cookie

网页,是运行在浏览器上的。默认情况下, 一个网页不能直接访问用户的硬盘,(直接操作, 很危险)
但是有的网站,确实需要在客户端这边存储一些必要的信息,希望持久化存储(写到硬盘上,重启也还在...)
浏览器就给网页提供了特定的机制,cookie。

Cookie 机制不是让网页随意访问硬盘,网页对于你的硬盘是没法直接读写的。浏览器对于硬盘操作,做了特殊的封装,相当于提供了一个特殊的文件,只能往这个特殊文件里写,并且你写的内容,也必须是键值对(键和值都得是文本)

Cookie 就是浏览器提供给网页的一种能够持久化存储数据的机制

Cookie 具体是咋存的呢?(咱们没法直接看到 Cookie 对应的文件的)浏览器,会针对不同的网站 (按照域名),每个网站,有一份自己的 Cookie 文件,百度存的 cookie 和 捜狗存的 cookie 不会影响的.

cookie 是从哪里来的?

cookie 中的数据都是来自于服务器。(服务器返回给浏览器的)

你如果是一个新鲜的浏览器,第一次访问某个网站,此时你这个浏览器上对应的 cookie 都是空着的。网站的服务器,,就会返回一些 HTTP 响应..在这些 HTTP 响应中,就会包含 Set-Cookie 这样的 header。就会把一些键值对,保存到浏览器的 cookie 中~~

Cookie 保存到浏览器之后,后续浏览器访问该网站的时候,就会在请求 header 中,把之前保存的这些 cookie 键值对都给带入进去,还要再发回给服务器.

cookie小结:

Cookie 是啥:浏览器本地存储数据的一种机制(不是唯一的一种,只是典型的一种)。

Cookie 怎么存的: 按照不同的域名,分别存储在硬盘上的。不同域名之间的 cookie 互不干扰。键值对,存储文本.。键和值都是用户自定义的。

Cookie 从哪里来: 从服务器来,服务器的 HTTP 响应 header 中可以填写 Set-Cookie 字段,就会带有一些键值对。

Cookie 到哪里去: 在后续请求中, 通过 HTTP 请求的 header 中的 Cookie 字段,把信息传输给服务器,能够使客户端存储一些必要的“配置"等信息,从而让服务器提供更多的"个性化的" 服务。

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

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

相关文章

10个最佳人物素材网站推荐,免费获取第一个PNG文件!

人物素材是设计中应用最广泛的元素之一。无论是网页设计还是移动终端设计,人物素材的插画设计都比文字信息更容易吸引用户的注意力。作为内容呈现,还可以增加设计的艺术属性。为了节省大家寻找人物素材的时间成本,本文立即为大家整理了10个宝…

数据结构的直接插入排序(C语言版)

一.直接插入排序的基本概念 1.直接插入排序的基本思想 将数组分为已排序和未排序两部分。 每次从未排序部分取出一个元素,将其插入到已排序部分的合适位置,使得已排序部分保持有序。 重复步骤2,直到整个数组有序。 2.排序的工作原理 假设前 i-1 个元素已经有序,现在要将第…

【Django】开发个人博客系统【1】

使用Django开发个人博客系统,博客系统包括用户(博主)注册和登录、博主资料信息、图片墙功能、留言板功能、文章列表、文章正文内容和Admin后台系统。 1. 项目架构设计 下一步将上述设置写入Django的配置文件settings.py,当Django…

利用C#中WinForm设计一个小游戏:DoYouLoveMe???

目录 一、WinForm 二、功能实现 三、代码部分 一、WinForm Windows 窗体是用于生成 Windows 桌面应用的 UI 框架。 它提供了一种基于 Visual Studio 中提供的可视化设计器创建桌面应用的高效方法。 利用视觉对象控件的拖放放置等功能,可以轻松生成桌面应用。 使…

适合大学生低成本创业的又一个项目推荐(宿舍小卖部)

​ 大学生的时间是非常充裕的,这也导致了大学生非常的懒惰,每天除了娱乐(打游戏,针对大部分人),也没有其它爱好了,就连吃饭都要抽时间来吃,所以这就给同学在宿舍做点小生意带来了机会…

如何在忘记密码的情况下解锁 iPhone? 6 种方法分享

您是否因为没有密码而无法解锁您的 iPhone? 别担心,这种情况比你想象的更常见!忘记密码是 iPhone 用户面临的最常见问题之一,而且可能非常令人沮丧 - 但不要绝望。 在这篇文章中,我们将与您分享绕过 iPhone 屏幕密码…

保时捷经销商造反,都怪小米SU7们?

文 | Auto芯球 作者 | 雷慢 造反啦,保时捷的经销售造反啦, 现在时候买合资进口豪车,估计亏得爹妈都不认得了, 放在三年前,打死我也不敢相信豪华车会有今天这样的闹剧, 这两天,保时捷中国的…

Moto和Inter字节序

inter: 低地址按照start_bit位放低字节依次往高字节填充 MotoLsb: 低地址按照start_bit位放高字节,依次往低字节填充MotoMsb:高字节按照start_bit位放低地址,依次往高字节填充

【机器学习】Python中的决策树算法探索

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Python中的决策树算法探索引言1. 决策树基础理论1.1 算法概述1.2 构建过程 2. P…

软件3班20240527

JDK 版本与 Tomcat 的 兼容性

谷歌忙于手动删除自己搜索引擎中奇怪的人工智能答案

该公司确认正在“迅速采取行动”消除人工智能工具的一些奇怪反应。 社交媒体上充斥着谷歌新的人工智能概述产品的例子,这些产品说了一些奇怪的话,从告诉用户在披萨上涂胶水到建议他们吃石头。混乱的推出意味着,随着各种表情包的发布&#xf…

bootstrap实现天平效果

之前提到了,最近,孩子的幼儿园让家长体验“半日助教活动”,每个家长需要讲授15-20分钟的课程。作为一名程序员,实在没有能教的课程,只能做了一个小游戏,带着小朋友们熟悉数字。 在上一章博客中&#xff0c…

解决mysql5.7版本中,子查询order by后,对子查询进行group by分组获取最新记录无效的问题

目录 场景简介原因示例mysql5.7之前的版本mysql5.7之后的版本解决1、使用having2、使用limit3、使用子查询获取目标数据ID 场景简介 子查询order by后,对子查询进行group by分组获取最新记录失败 应用场景:一对多的关系,通常需要取最新、最…

好消息!PMP纸质证书可以领取啦!(22年11月至23年8月)

上周五,中国国际人才交流基金会官方发布了《关于2022年11月和2023年3月、5月、8月PMI认证考试证书领取》的通知,具体内容如下: 之前顺利通过PMP/ACP/PgMP考试的同学抓紧时间,在5月24日—6月10日内进入官网上登记领取证书。 PMP考…

1990-2021 年全球油棕面积和种植年份数据集

简介 该数据集利用 2016 年至 2021 年的哨兵-1 号数据,以 10 米的分辨率提供了油棕种植园的全球综合地图,包括工业用地和小农地块。此外,该数据集还包括根据 Landsat-5、-7 和-8 图像得出的 1990 年至 2021 年 30 米空间分辨率的种植年份估计…

UE驻网失败问题(二)

另一个UE注册失败的问题,具体过程如下: 问题现象如上,UE在这个N48上的小区一直在重复上述过程,收到RRC Setup后就不发RRC Setupcomplete,闭上眼睛也知道大概率是这个RRC Setup的配置有问题。 在问题时间点周围查看&…

TI_DSP_F2808学习笔记3: ePWM

共有6组ePWM,每一组 ePWM 模块都包含以下 7 个模块:时基模块 TB、计数比较模块 CC、动作模块 AQ、死区产生模块 DB、PWM 斩波模块 PC、错误联防模块 TZ、时间触发模块 ET。 时基模块 TB 确定PWM的周期和相位。 1)PWM 时基计数器&#xff…

使用vue,mybatis,mysql,tomcat,axios实现简单的登录注册功能

目录 第一步环境搭建 后端: 前端: 第二步画流程图 web: service: dao层: 第三步前端代码的实现 这是开始的页面,接下来我们要到router路由下书写#login的路径 路由中的component在我们自己创建的views书写vue文件…

数据库语法树优化

目录 一、σ、π、⋈ 1.选择σ 2.投影π 3.连接⋈ 二、 构建语法树 ① 解读sql语句 ② 写出关系代数表达式 ③ 画出语法树 三、优化语法树 四、练习 语法树优化方法 一、σ、π、⋈ 1.选择σ 选择就是在关系R中选择满足给定条件的诸元组。 通过条件SdeptIS选择出系别…

某安全厂商外包安服工程师面试

写在前面:本篇帖子出现的厂商and面试问题皆为up实际面试情况,厂商信息不透露,仅供师傅们参考。 背景 某知名安全厂商外包 岗位:安全服务工程师(偏售后) 薪资条件:7~9k(up所在二线…