HTTP(1)

目录

一、认识HTTP协议

理解 应用层协议

二、fiddler的安装以及介绍

1、fiddler的安装

2、fiddler的介绍

三、HTTP 报文格式

1、http的请求

2、http的响应

五、认识URL

六、关于URL encode


一、认识HTTP协议

        HTTP 全称为:“超文本传输协议”,是一种应用非常广泛的 应用层协议。如图:

        什么是超文本呢?文本就是字符串,能在 utf8 / gbk 等码表上找到的合法字符;而超文本比文本更nb,不仅仅可以是字符串,也可以携带一些图片,特殊格式啥的(链接、HTML(超文本标记语言)、表格、标题等等)

        HTTP诞生于1991年,是目前最主流的应用层协议,如图是发展史:

        HTTP3.0之前,在传输层是基于TCPHTTP3.0开始就是基于UDP;不是说UDP不可靠吗,为什么还用它呢?因为UDP传输的很快,是TCP比不了的,虽然它不可靠,但我们可以给它添加一些机制(一系列更复杂的机制),也可以提供可靠性

理解 应用层协议

        我们之前学习了TCP / IP 协议,知道网络传输数据,可以通过 IP地址和进程端口定位服务器 /客户端,知道网络数据传输的起点和终点,但是当网络数据传输完,就结束了吗?NO!!当数据传输给对端,对端还要对数据进行加工处理所以应用层还需要一层协议,它不关心通信的过程、细节,只关心应用细节,这层协议就是应用层协议

        HTTP最主要的应用场景:网站浏览器和服务器之间的数据传输,使用的协议就是HTTP;客户端(手机 / PC),和服务器之间的传输的协议,也很可能是HTTP。如图是浏览器和服务器之间的一次交互。

        网页是通过HTML构建的,HTML也是一门编程语言,不过和Java / C / C++ / Python不同,这些表达的是 逻辑,你要做什么;而HTML表达的是 内容,你有什么

        一个成熟的网页,光有HTML是不够的,还需要CSS、JavaScript的配合,这三个语言称为“前端开发三剑客”,学习前端开发,这三个语言都要会。

        HTTP的交互过程,是非常经典的 “一问一答” 模型对于 TCP / UDP,它们的交互模型更为多样,具体是啥情况,取决于你的代码。但即使只有 一问一答 的模型,对于网站开发,也够用了,如图是以前网站上的广告,如果你搜索 “不孕不育、整容” 等词,就会出现一堆广告,你点进去就会出现聊天对话框(类似QQ这种),如图:

        在网页上,你发一条消息,对面就能收到给你回复,你也能继续给对面发消息,类似一问一答的,这就是一问一答的实现场景。


二、fiddler的安装以及介绍

        fiddler 是抓包工具,抓包工具本质上就是 “代理程序,能够获取网络上传输的数据,并且显示出来,给程序员提供一些参考。

        其中有一种叫 高大全 的抓包工具:wireshark,可以抓各种协议的数据包(TCP、UDP、IP、以太网等等),因为涵盖的范围比较广,所以使用起来会更复杂,但fiddler是一种专注于HTTP的抓包,相对于wireshark的使用更简单,而我们目前也是在学习HTTP。以下介绍fiddler的下载安装:

1、fiddler的安装

        fiddler下载地址:Web Debugging Proxy and Troubleshooting Tools|Fiddler (telerik.com)

        选择经典版本(最新版要收费),点击 try for free,然后填写相关信息:

        接下来一路默认next即可:

        安装完成

安装完后,进行一些简单的设置

        fiddler的界面:

        接下来要抓包,就需要进行一个简单的设置,如下:

        中间会提示是否要安装证书,这里一路确定就好了。

        把这些都勾上(当前网络上大部分请求都是基于 HTTPS(相当于在HTTP的基础上进行了加密,并且要安装证书),才能进行正确的解密)。

        除了上述操作之外,另外还需要关闭电脑上本身的代理程序,例如VPN,有些可以fq的程序(单独的程序 / 浏览器插件),这个也是代理程序,要确保电脑上其他的代理程序都是关闭状态,不然可能会导致fiddler和其他代理程序发生冲突

2、fiddler的介绍

        fiddler是一个代理程序,什么是代理程序呢,代理也分正向代理和反向代理,下面介绍正向代理,如图就是fiddler是客户端的代理:

        上图是正向代理,可以这么理解,正向代理:客户端的代言人反向代理:服务器的代言人

        抓包工具就可以获取到HTTP协议的数据包,显示出请求和响应的具体细节

        这里解释一下如何实现fq的效果:用来fq的代理,本质就是通过可以被访问到境外的服务器,部署一个代理服务器,这样我们就可以绕过国家的防火墙,访问海外的服务器;我们直接访问谷歌服务器访问不了,但是通过这个代理服务器,就能访问到,如图:

        在fiddler中我们可以看到,即使我们什么也不做,也能抓到很多包,即使你什么也不干,电脑也会在你感知不到的地方,偷偷的做很多事情,和人家的服务器进行交互,这里介绍一个快捷键:全选,Ctrl + a,再按delete键就可以把当前所有显示的包清除

        打开一个网站,其实浏览器和服务器之间进行的 HTTP 交互不只有一次,而是会有很多次第一次交互拿到的是这个页面的html,但html还会依赖css、js等,html被加载出来后,还会触发一些其他的http请求,获取到css、js,而获取到js后,执行js还会触发很多http请求,css同理;从而获取到一些数据。浏览器和服务器之间往往会经历反复多次的拉扯

        我们打开一个bilbli网站,fiddler里面会抓取到很多包,而会有蓝色的显示,它表示返回的是一个html,往往是访问一个网站的入口请求,双击它就能看到明细,如图:

        RAW选项是原始数据(http的原始数据),如图:

        上面一部分是请求的明细,下面这部分是响应的明细。

        我们可以用记事本的方式看看请求和响应的内容(这里有个选项,点中就可以以记事本的方式查看),如图:

请求的内容:

        可以看到,http协议确实是文本的格式

响应的内容:

        但是这里查看的响应,为什么有乱码,乱码也就意味着不是文本的格式。原因很简单:当前的响应数据被压缩了,我们知道,网络传输中,网络带宽是很珍贵的资源,比CPU还贵为了节省带宽,就可以把它进行压缩(一般压缩响应,请求不太需要),而压缩和解压缩都是要消耗CPU资源的,虽然CPU资源贵,但是网络带宽更贵,我们用CPU资源换网络带宽资源,是不亏的

        那我们想看返回响应的数据咋办,这时候可以点这个,叫解压缩

        再用记事本的方式打开,就可以看到不是乱码的了,如图:

        而这里响应的数据,其实就是网站的网页 html


三、HTTP 报文格式

        http是一个文本格式的协议,可以通过fiddler抓包工具,获得http的请求 / 响应的细节,以下是http抓包的请求和响应的细节。

1、http的请求

        http的请求包含4个部分1、首行;2、请求头(header);3、空行(请求头最下面会有一个空行,这个空行可以表示结束标记);4、正文(body),http的载荷部分。

        如图:

        其中,首行还包含三个部分,如图:

        第一部分是方法,第二部分是url,第三部分是版本号。

2、http的响应

        http的响应也是分为四部分的,如图:

        其中,响应的正文也有三部分,如图:

        第一部分是版本号;第二部分是状态码;第三部分是状态码描述。


五、认识URL

        URL不仅仅在http中使用,在学JDBC的时候,也用过URL,如图:

        URL描述的是一个网络上的资源位置,是唯一资源定位符还有一个和URL的概念很接近:URI,但它是唯一资源标识符它们两都是描述一个网络上的资源位置,有啥不同呢?举个例子:我们标识变量的身份,怎么知道这个变量是什么呢?在C语言是用变量的地址,而在Java中是使用变量的hashCode。它们的就类似这种情况

        以下就是一个最简单的URL,这是搜狗搜索的网站,如图:

        而一个完整的URL,还有很多其他的结构,如图:

        协议方案名:就是协议名,http协议

        登录信息(认证):也就是你登录的密码写在这里不太好,因为可以从url,就可以看到你密码了,很容易被黑客入侵拿到登录网站的密码,甚至你旁边有人,也能看到密码,现在都是 “单独的登录页面” 来完成身份验证的。

        服务器地址:就是域名,可以通过域名拿到服务器的IP地址

        服务器的端口号通过端口号才能知道你要访问服务器的哪个端口如果url不带端口,则会给一个默认访问的端口(服务器的端口,不是系统随机分配的),此处用啥端口作为默认值取决于协议,http的默认端口是80https的默认端口的443

        带层次的文件路径:我们知道,网络上的资源位置,可以通过IP地址知道它在哪,通过端口知道它是哪个程序,但还不够,还要通过文件路径,知道要访问哪个资源这里可能对应一个真实的硬盘文件,也可能是对应虚拟的文件

        查询字符串(query string):是客户端给服务器传递信息的重要途径,这里的组织方式是按照键值对的方式来组织的。这里的键值对内容是程序员自定义的。结合上面的IP地址、端口号、路径、查询字符串,就可以描述出一个网络资源了,类似下图:

        片段标识符用来标识当前页面的某个部分用不同的片段标识表示可以完成页面内跳转


六、关于URL encode

        query string 里定义的键值对,在 URL 中,有些特殊符号本身就具有特定的含义如:/  ?  @ 等等那如果query string 里面本身就包含特殊的符号,咋办?这时候就需要用到转义,对这些特殊符号进行转义,如C++,在必应上搜索C++,如图:

        而 “+” 的ASCII值就是2B,如图:

        如果是中文呢,也要进行转义,因为在中文的utf8或者gbk等编码中,就可能某个字节恰好有和ASCII码的符号一样的;在必应上搜索蛋糕,如图:

        可以看到,这里并没有转义啊,那我们选中url,复制进画图板中,如图:

        变成了:%E8%9B%8B%E7%B3%95这个也是和上面的 + 一样,基于汉字的编码,把每个字节都转成16进制来表示,并且加上%,我们去utf8码表里面查一下,如图:

        这里的URL encode 编码非常重要,在实际开发中,要构造一个URL,尤其是query string里包含中文的,一定要进行转义、编码,不然很可能会导致,因为有中文,某些网页跳转不了,进不去你要进的网页


都看到这了,点个赞再走吧,谢谢谢谢谢

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发之了解ArkTS

鸿蒙开发者官网 : https://developer.huawei.com/consumer/cn/ 开发鸿蒙要用的软件是 DevEco Studio ArkTS建立在JS和TS的基础之上,扩展了声明式UI开发范式和状态管理,提供更简洁和自然的开发方式。 ArkTS引入了渲染引擎的增强&#xff0c…

【机器学习300问】56、什么是自编码器?

一、什么是自编码器? 自编码器(Autoencoder,AE)本质是一种特殊的神经网络架构。主要用于无监督学习和特征学习任务。它的目标是通过编码然后解码的过程,学会重构其输入数据,试图还原其原始输入的。 当时我学…

信息安全之网络安全防护

先来看看计算机网络通信面临的威胁: 截获——从网络上窃听他人的通信内容中断——有意中断他人在网络上的通信篡改——故意篡改网络上传送的报文伪造——伪造信息在网络上传送 截获信息的攻击称为被动攻击,而更改信息和拒绝用户使用资源的攻击称为主动…

AI智能分析网关智慧食安监管系统方案

3.15晚会刚过不久,淀粉肠的“屈辱”终于得以洗清,但某些品牌奶茶、梅菜扣肉、预制菜等等,生产过程仍是触目惊心。如何提升食品安全管理水平,保障食品从生产到消费环节的质量和安全?TSINGSEE青犀智利用智能分析网关V4Ea…

旺店通·旗舰奇门与金蝶云星空对接集成销售出库单查询连通销售出库新增(WDT 线下销售出库单对接(关联)-ok-不适用)

旺店通旗舰奇门与金蝶云星空对接集成销售出库单查询连通销售出库新增(WDT 线下销售出库单对接(关联)-ok-不适用) 源系统:旺店通旗舰奇门 慧策最先以旺店通ERP切入商家核心管理痛点——订单管理,之后围绕电商经营管理中的核心管理诉求&#xf…

Nginx(Docker 安装的nginx)配置域名SSL证书

1.首先确保Linux环境上已经安装了docker(可参考Linux安装Docker-CSDN博客) 2.通过docker 安装nginx(可参考Linux 环境安装Nginx—源码和Dokcer两种安装方式-CSDN博客) 3.安装SSL证书 3.1 在宿主机中创建证书目录并上传证书&…

使用Docker Compose一键部署前后端分离项目(图文保姆级教程)

一、安装Docker和docker Compose 1.Docker安装 //下载containerd.io包 yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm //安装依赖项 yum install -y yum-utils device-mapper-persistent-data l…

OpenGL的MVP矩阵理解

OpenGL的MVP矩阵理解 右手坐标系 右手坐标系与左手坐标系都是三维笛卡尔坐标系,他们唯一的不同在于z轴的方向,如下图,左边是左手坐标系,右边是右手坐标系 OpenGL中一般用的是右手坐标系 1.模型坐标系(Local Space&…

软件设计师:10-面向对象

一、面向对象 二、对象和消息 属性:也叫成员变量、状态 消息:对象名.方法名(传入你想要传递的参数) 三、方法重载 方法名相同(同名),但是参数个数或者参数类型不同叫方法重载 四、封装…

SpringBoot+Prometheus+Grafana实现应用监控和报警

一、背景 SpringBoot的应用监控方案比较多&#xff0c;SpringBootPrometheusGrafana是目前比较常用的方案之一。它们三者之间的关系大概如下图&#xff1a; 关系图 二、开发SpringBoot应用 首先&#xff0c;创建一个SpringBoot项目&#xff0c;pom文件如下&#xff1a; <…

分布式数据库技术的演进和发展方向

前言 这些年大家都在谈分布式数据库&#xff0c;各大企业也纷纷开始做数据库的分布式改造。那么&#xff0c;所谓的分布式数据库到底是什么&#xff1f;采用什么架构&#xff1f;优势在哪&#xff1f;为什么越来越多企业选择它&#xff1f;分布式数据库技术会向什么方向发展&a…

C/C++ 内存管理

1、C/C内存分布 首先我们来了解在一个程序中&#xff0c;代码主要存储在哪些地方&#xff1b; 1.栈&#xff1a;又叫堆栈&#xff0c;其中一般存储非静态局部变量、函数参数、返回值等&#xff0c;栈的增长是向下的。 2.内存映射段&#xff1a;是高效的 I/O 映射方式&#xff0…

华为2023年年度报告启示:技术工程师应该如何成长?

华为2023年年度报告显示了公司在面对复杂环境与挑战时的稳健发展&#xff0c;以及在技术创新、生态构建、社会责任等方面取得的显著成就。对于技术工程师而言&#xff0c;这份报告不仅是华为战略与成果的全景展示&#xff0c;更是蕴含了对未来技术趋势的洞见以及对工程师职业发…

前端性能优化:掌握解决方案

课程介绍 我们常说性能永远是第一需求&#xff0c;作为一个前端工程师&#xff0c;不管使用什么框架&#xff0c;不管从事什么类型的网站或应用开发&#xff0c;只要是项目被用户使用&#xff0c;性能优化就永远是你需要关注的问题。通常情况下&#xff0c;工程师们在深入了解…

云原生(七)、Kubernetes初学 + 裸机搭建k8s集群

Kubernetes简介 Kubernetes&#xff08;通常简称为K8s&#xff09;是一个开源的容器编排平台&#xff0c;最初由Google设计和开发&#xff0c;现在由Cloud Native Computing Foundation&#xff08;CNCF&#xff09;维护。它旨在简化容器化应用程序的部署、扩展和管理。 Kube…

Unity类银河恶魔城学习记录11-7 p109 Aplly item modifiers源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData_Equipment.cs using System.Collections; using System.Collecti…

如何检查电脑的最近历史记录?这里提供详细步骤

如果你怀疑有人在使用你的计算机,并且你想查看他们在做什么,下面是如何查看是否有访问内容的痕迹。 如何检查我的计算机的最近历史记录 要检查计算机的最近历史记录,应该从web浏览器历史记录开始,然后移动到文件。但是,可以修改或删除浏览器历史记录,也可以隐藏Windows…

牛角工具箱源码 轻松打造个性化在线工具箱,附带系统搭建教程

这是一款在线工具箱程序&#xff0c;您可以通过安装扩展增强她的功能 通过插件模板的功能&#xff0c;您也可以把她当做网页导航来使用~ &#x1f38a; 环境要求 PHP > 7.2.5 MySQL > 5.7 fileinfo扩展 使用Redis缓存需安装Redis扩展 去除禁用函数proc_open、putenv、s…

C语言:文件操作

前言&#xff1a;为什么使用文件? 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运行程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进行持久…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路&#xff1a;因为本题是二叉搜索树&#xff0c;利用它的特性可以从上往下进行递归遍历树&#xff0c;这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…