javaEE-6.网络原理-http

目录

什么是http?

http的工作原理:

抓包工具

fiddler的使用

HTTP请求数据:

1.首行:​编辑

2.请求头(header)

3.空行:

4.正文(body)

HTTP响应数据

1.首行:​编辑

2.响应头

3.空行:

4.响应正文(body)

请求首行:

URL:

URLencode:

方法(method):

1.GET方法:常用于获取服务器上的某个资源。

2.POST方法:多用于提交用户输入的数据给服务器。

GET和POST的区别:

还有一些描述关于GET和POST的区别,但都不是很准确:

请求头(header)内容:

1.host:​编辑

2.Content-Length,Content-Type

3.User-Agent(UA)

4.referer

5.Cookie

状态码:

常见的状态码:

构造HTTP请求工具:

Postman 


什么是http?

http是"超文本传输协议",是应用层的协议。 

(文本,就是字符串,能在utf8/gbk表中找到的合法字符,超文本就是不仅是字符串,还包含图片,视频,音频等,html就是超文本;还有富文本格式,就是类似于word,可以设置字体大小,行间距等)

HTTP诞⽣与1991年.⽬前已经发展为最主流使⽤的⼀种应⽤层协议.HTTP协议是基于TCP实现的。

http发展至今,已经有了好多个版本,已经到了http 3.0,但目前主推的还是http 1.0

2.0之前的版本是基于TCP实现的,3.0是基于UDP实现的,

2.0和3.0版本引入了很对新的特性,对传输效率和安全性都做了提高。

http的工作原理:

我们平时打开一个网站,就是通过http协议来传输数据的。

http最常见的应用场景就是 网站,浏览器和服务器之间的数据传送,客户端和服务器之间传送数据。

http请求:指要访问哪个网页

http响应:返回指定网页,(这里的网页是通过HTML来实现的)

当我们在浏览器中输⼊⼀个搜狗搜索的"⽹址"(URL)时,浏览器就给搜狗的服务器发送了⼀个HTTP请求,搜狗的服务器返回了⼀个HTTP响应.这个响应结果被浏览器解析之后,就展⽰成我们看到的⻚⾯内容.(这个过程中浏览器可能会给服务器发 送多个HTTP请求,服务器会对应返回多个响应,这些响应⾥就包含了⻚⾯HTML,CSS,JavaScript,图 ⽚,字体等信息).

http是典型的“一问一答”类型。

抓包工具

抓包工具就是一些"代理程序",通过捕获网络上传输的数据,并显示出来,给程序员一些参考.

fiddler专注于对http的转包,下载地址:

Download Fiddler Web Debugging Tool for Free by Telerik

可以选择classic版本,是免费的

首次下载需要填一些信息,填完之后就可以下载了,安装也和简单,一直next就可以了.

下载之后,要简单设置一下:

1.先打开fiddler,

点击tools

点击options

选择https,将里面的都给勾选上,第一次勾选时,会弹出来一个"是否安装证书",选择 是.

此外,有的电脑上带有/下载的 代理程序(浏览器插件/单独的程序),需要关闭电脑上的代理程序.fiddler也是一个代理,可能会产生冲突.

(打开fiddler后,可能会出现浏览器卡顿或者打不开的情况,关闭fidller就可以了)

fiddler的使用

配置完成之后,就能看到fiddler上抓到很多程序的数据包.

电脑上还有很多感知不到的程序在背后操作,fiddler都能抓到,并显示出来.

打开一个百度界面,在fiddler中就能被抓到

双击百度,在右侧就会出现两个框

上面是请求框,下面是响应框,选择raw,raw里是http请求/响应的原始数据.

若在这里看着内容比较小,在右下角,有一个View in Noteoad,点击后,可以在记事本中查看:

在记事本中打开:

响应的raw也可以在记事本中打开,但能看到,有的响应数据是乱码,

乱码是响应数据被压缩了(为了节省带宽),进行解压就可以了.

可以通过点击:Responsebody is encoded.Click to decode来解压:

HTTP请求数据:

1.首行:

方法(method) ;

url(网址) ;

版本号 .

这三个部分使用 空格 进行分隔

2.请求头(header)

请求头包含从第二行到最后一行,包含了一些键值对,每个键值对占一行,键和值之间用:和空格进行分隔。这些键值对类似以TCP的报头,包含了一些重要的连接信息。

3.空行:

请求头下面有一行空行,表示请求头结束标记。

4.正文(body)

HTTP的载荷部分,有的http请求有正,有的没有正文

HTTP响应数据

1.首行:

包含三部分,分别是:版本号 状态码 状态码描述,用空格分开

2.响应头

响应头是从第二行到一个空行,也是由一些键值对构成,每个键值对占一行,键和值之间用:和空格分隔。

3.空行:

响应头结束标志。

4.响应正文(body)

HTTP的载荷部分,响应的载荷是html。

请求首行:

URL:

URL描述一个网络上的资源位置,是唯一的资源定位符。

一个url的完整结构:

协议方案名:HTTP

登录信息:用户名,密码...,(写在这里不是很安全,现在都是通过网页来登录认证).

服务器地址:域名,IP协议

端口号:要访问的端口号,若url中没有带端口号,浏览器会给一个默认的服务器端口号,并不是系统随机分配的,

文件路径:网络上的资源位置,

查询字符串(query string):

这是一个百度的网址url,

URLencode:

在url中存在很多有特殊意义符号,有? / : & .....,查询字符串(query string )是一些自定义的键值对,

这些键值对的内容中也有可能涉及到这些符号,若直接写进去,就有可能解析失败,因此需要对特定符号(包括汉字)进行转义,将特殊字符对照ascii码表进行转义,再通过%进行分隔.

通过百度搜索鲜花:

鲜花对应ascii码表的16进制就是 E9 B2 9C E8 8A B1,

方法(method):

位于首行中的第一部分,用来描述这次请求的目的,要干什么。

有这些类型:

1.GET方法:常用于获取服务器上的某个资源。

GET方法非常常见。

fiddler抓包得到的一条:

这条数据包对应的请求数据:

2.POST方法:多用于提交用户输入的数据给服务器。

常用于登录和上传。

这是一条登录功能的数据包:

对应的请求数据:

GET方法通常没有body部分,POST有body部分,GET方法一般会把需要传送非服务器的补充信息放到URL中,通过query String传递,POST中的query string一般为空,将数据放到body中,通过body传递.

这是POST中的body部分,是JSON格式的数据,使用的是base64编码的方式,

base编码一般带有一个"==",使用四个字节代,对原来的三个字节进行重新编码.

这是为了原始数据中的二进制内容,因为有些场合只能存储文本文件.

base64编码的编码规则 有标准版,也有自定义版.标准版就属于明文传输,属于透明的,无法作为加密方法,自定义版就可以自己约定编码规则,进行加密操作.

GET和POST最常用,别的用的比较少,虽然对上面的这些方法的使用有一各自的说明,但这些规定都属于标准文档创作者的"一厢情愿",开发者在实际开发程序的时候,他们都是可以相互使用的。

GET和POST的区别:

GET和POST本质上是没有区别的,使用GET的场景可以替换成POST,使用POST的场景也可以替换成GET;这些都取决于代码实现时是怎样写的。

但GET和POST在使用习惯上有一些不同

1.GET的body一般为空,更习惯把数据放到URL的query String中;POST的URL的query String一般为空,更多把数据放到body中

(当然,这两个的存放方式通常是可以交换位置的,GET也可以将数据放到body中,POST也可以将数据放到URL中)

2.语义上:在标准文档中,GET的语义是用来获取数据;POST的语义是用来给服务器传输数据。

3.幂等性:在表针文档中,建议GET请求实现幂等的;POST没有要求。

幂等性指的是:若每次输入的内容一样,返回的结果是一样的,则是幂等的;

                        若每次输入的内容一样,返回的结果不是一样的,则不是幂等的。

4.GET请求可以被浏览器收藏夹收藏,POST请求不能。

还有一些描述关于GET和POST的区别,但都不是很准确

1.POST比GET更安全

因为在登录的时候,GET的信息是在URL中,能直接在屏幕上看到,但POST是在body中,无法直接看到。

这是不准确的,因为POST的即时是在body中,使用抓包工具,同样也能获取到数据,要想让数据安全,最根本的是对数据加密。

2.POST比GET存储的数据更多

这是在之前的时候,现在没有这一区别了,GET的数据存储是在URL中,之前URL的长度有限制,现在没有了。

3.GET只能携带文本数据,POST只能携带二进制数据

GET通过URL的query String携带数据,query String确实只能携带文本数据,但可以将二进制数据通过urlencode转换成文本数据来实现存储数据,到服务器在进行urlencode,转换成二进制文件就可以了;

POST将数据存放到body中,body部分不是只是二进制数据的,也可以存放别的数据。

请求头(header)内容:

请求头,就相当于报头,有很多 键值对 组成,下面是一些常见的键值对:

1.host:

表示服务器主机的地址和端口.大部分情况下和url中的地址和端口是一样的,少数会有不同,

2.Content-Length,Content-Type

Content-Length: 表示body中的数据长度,

Content-type: 表示body中的数据格式,

若数据包中没有body部分,在请求头中也就没有这两个键值对了.

HTTP的底层是TCP,Content-Length用来解决数据的粘包问题,

body中可以有很多种数据格式,程序员也可以自己任意定义格式,就要通过Content-type来确定,

有一些常见的请求数据格式:

application/json:body 就是JSON

application/x-www-form-urlencoded:

multipart/form-data:上传文件时使用的.

常见的响应数据格式:

1.text/plain: 纯文本格式

2.text.html: html 格式

3.text/css: css格式

4.application/javascript: js格式

5.image/png: 图片

6.image/jpd: 音频

在fiddler中,抓到的包中

可以看到,有一些是灰色的,表示是在本地机器硬盘的缓存中,

当主机发出请求时,浏览器和服务器之间要进行多次的网络交互,整体的效率是比较低的.

为了提升交互效率,会在首次访问的时候,将一些不变的内容在浏览器本地的机器硬盘中进行缓存;当再次访问时,直接从缓存中读取就可以了,减少了网络交互的开销.

若想让浏览器不从缓存中读取,直接从服务器中获取,点击这个,让后按ctrl+f5,就能重新获取数据了.

3.User-Agent(UA)

表示浏览器/操作系统的信息/属性.

:这一部分表示操作系统的信息,

:这些是多个浏览器的信息.

浏览器的信息和操作系统的信息描述了用户使用什么样的设备上网,

对于浏览器新老特性的兼容,设备的不同,呈现的页面的格式的差异,通过UA都能很好的解决,

4.referer

描述当前页面从哪个页面跳转过来的.

早期的referer是可以被随意修改的,现在使用的https都进行了SSL加密,就很难被他人修改了.

5.Cookie

保存了一些 报头中的重要属性.

Cookie本质上是一个浏览器本地持久化保存数据(存储在硬盘中)的机制.

Cookie的来源:服务器首次访问/登录成功浏览器后,返回给浏览器的.

Cookie的去向:Cookie会保存在浏览器本地本机的硬盘中,后续每次访问服务器都会带上Cookie; 不同的客户端,保存的Cookie是不同的,就算相同的客户端,访问不同的浏览器,Cookie也是不同的.

Cookie的内容: 键值对格式的数据,由程序员自定义

不同网站的Cookie是不相同的. 

Cookie在浏览器中的组织形式:在本地的硬盘保存,按照不同域名为维度分别存储

Cookie的用途:用来保存客户端的数据,

主要是用来保存客户端的身份标识,方便服务端通过身份标识来区分用户.(其他的数据信息一般不会保存到Cookie中,Cookie是随时可以删掉的)

状态码:

状态码存在响应中,用来表示响应的结果.

http中的状态码都是标准约定好的,

常见的状态码:

常见的几个状态码:

200 OK : 表示成功!

404 Not Found: 表示要访问的资源没找到.

在gitee中,当要访问abc.html时,就会显示这样的页面:

405 Method Not Allowed: 表示你的服务器只支持GET请求,但你发送的是POST请求.

500 Internal  Server Error: 服务器内部错误.

504 GateWay Timeout:访问服务器超时

301:永久重定向

302:临时重定向

要访问网站A,访问A之后,浏览器自动跳转到了网站B.

一般用于某个网站,发布使用了很长时间,想要修改域名,但可能有很多用户已经保存了原网站的域名在收藏夹中了,若突然修改,原来的域名就没法用了,这样就降低了用户的使用观感.

为了不影响用户的使用,可以把访问老域名的请求定向到访问新域名的请求,当访问原来的网址时,就能顺利跳转到新的网址了.

若是永久重定向,浏览器会将重定向的结果记录下来,保存到浏览器本地的缓存中,下次再访问时,就没有跳转的步骤了,直接定向到新的网站中.

临时重定向就无法缓存了.

构造HTTP请求工具:

Postman 

是一个经典的,广泛使用的工具.

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

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

相关文章

开启 AI 学习之旅:从入门到精通

最近 AI 真的超火,不管是工作还是生活里,到处都能看到它的身影。好多小伙伴都跑来问我,到底该怎么学 AI 呢?今天我就把自己学习 AI 的经验和心得分享出来,希望能帮到想踏入 AI 领域的朋友们! 一、学习内容…

【JAVA基础】双亲委派

双亲委派可以简单理解为, 当收到加载请求时, 会依次向上加载 ; 只有当父类加载器无法完成加载请求时,子类加载器才会尝试自己去加载。 工作原理 类加载请求传递:当应用程序需要加载一个类时,比如通过ClassLoader.loadClass()方法&#xff0…

嵌入式经典面试题之操作系统(一)

文章目录 1 请你说说常用的Linux命令有哪些?2 在linux中如何创建一个新的目录?3 Linux中查看进程运行状态的指令、tar解压文件的参数。4 在linux中,文件权限如何修改?5 怎样以root权限运行某个程序?6 在linux里如何查看…

排查定位jar包大文件

解压 JAR 包: mkdir jar_contents unzip your-jar-file.jar -d jar_contents统计各文件大小: du -ah jar_contents | sort -rh | head -n 20这会列出 JAR 包中最大的文件或目录,方便你定位大文件。 方法 2:使用 jar 工具查看文件…

OpenCV:闭运算

目录 1. 简述 2. 用膨胀和腐蚀实现闭运算 2.1 代码示例 2.2 运行结果 3. 闭运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 闭运算的应用场景 5. 注意事项 相关阅读 OpenCV:图像的腐蚀与膨胀-CSDN博客 OpenCV:开运算-CSDN博客 1. 简述…

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…

C++中的类与对象(下)

上一节我们将类与对象中一个比较难的也是一个比较重要的模块学习了,在这节主要是一些细节上的补充。 文章目录 目录 前言 一、初始化列表 初始化列表的性质 初始化列表的总结 二、类型转换 C中的类型转换 三、static成员 static的特点 一般情况下构造函数调用顺序&a…

rust跨平台调用动态库

动态库在不同的操作系统&#xff0c;扩展名是不一样的&#xff0c;所以要做处理: static LIB: Lazy<Mutex<Option<Library>>> Lazy::new(|| Mutex::new(None));type CreateFunc unsafe extern "C" fn(*const c_char, *const c_char) -> c_int…

四、jQuery笔记

(一)jQuery概述 jQuery本身是js的一个轻量级的库,封装了一个对象jQuery,jquery的所有语法都在jQuery对象中 浏览器不认识jquery,只渲染html、css和js代码,需要先导入jQuery文件,官网下载即可 jQuery中文说明文档:https://hemin.cn/jq/ (二)jQuery要点 1、jQuery对象 …

Versal - 基础4(VD100+Versal IBERT)

1. 简介 在之前的一篇博文中&#xff0c;我分享了在 Zynq Ultrascale MPSoC 中使用 IBERT 的方法。 《Vivado - 集成眼图分析仪 Serial I/O IBERT 误码率_vivado ibert-CSDN博客》 本文进一步探讨 Versal 中使用 IBERT 的方法。 2. 硬件平台 芯片&#xff1a;XCVE2302-SF…

《HelloGitHub》第 106 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

英语语法 第一天

I’m a student. 我是个学生 我是个新东方的学生 I’m a student of New Oriental School 我爱你 I love you 我在心中爱你 I love you in my heart. 这是一朵花 This is a flower 这是一朵在公园里的花 This is a flower in the park.(修饰部分在修饰词后面) 主干…

Day50:字典的合并

在 Python 中&#xff0c;字典是一个可变的数据类型&#xff0c;经常需要将多个字典合并成一个字典。合并字典的方式有多种&#xff0c;今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…

USB鼠标的数据格式

USB鼠标的数据格式由HID&#xff08;Human Interface Device&#xff09;协议定义&#xff0c;通常包含3个字节的标准数据&#xff0c;具体格式如下&#xff1a; 字节内容描述第1字节按键状态Bit 0: 左键按下&#xff08;1&#xff09;<br>Bit 1: 右键按下&#xff08;1…

为AI聊天工具添加一个知识系统 之79 详细设计之20 正则表达式 之7

本文要点 要点 “正则表达式” 本来是计算机科学计算机科学的一个概念。本项目将它推广&#xff08;扩张&#xff09;到认知科学的“认知范畴”概念&#xff0c; 聚合&#xff08;收敛&#xff09;到 神经科学 的“神经元”概念。 做法是&#xff1a;用reg 来系统化定义认知…

Spring RESTful API 设计与实现

Spring RESTful API的设计与实现极大地提升了开发效率和系统可维护性,通过遵循RESTful设计原则,使得API结构清晰、行为一致,便于扩展和维护。它在构建微服务架构中扮演着核心角色,支持松耦合的通信,同时通过标准的HTTP协议和数据格式增强了系统的互操作性。结合Spring Sec…

“新月之智”智能战术头盔系统(CITHS)

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 相关文章链接&#xff08;更新&#xff09;&#xff1a; 星际战争模拟系统&#xff1a;新月的编程之道-CSDN博客 新月智能护甲系统CMIA--未来战场的守护者-CSDN博客 目录 一、引言 二、智能头盔控制系统概述 三、系统架…

猿人学web 19题(js逆向)

这题直接点击翻页抓包&#xff0c;然后获取seesion ID请求即可 求和代码 import requestssession requests.Session() cookies {sessionid:eao9i00r8pt4xu6uzzx2k01ttqn51yc9} urlhttps://match.yuanrenxue.cn/api/match/19?page sum0 for i in range(1,6):response sess…

c语言:编译和链接(详解)

前言 要将编译和链接&#xff0c;就不得不提及编译器是如何运作的&#xff0c;虽然这部分知识是针对于要创造编译器和创作语言的人所需要清楚的&#xff0c;但作为c语言的学习者也需要了解一下&#xff0c;修炼内功&#xff0c;尤其是对于想学习c的人而言。 编译器的运作过程…

如何解决Unit sshd.service could not be found

出现 Unit sshd.service could not be found 错误时&#xff0c;通常是因为系统中未安装 OpenSSH 服务、服务名称不匹配或系统未使用 systemd 管理服务。以下是详细的解决方案&#xff1a; 一、确认 SSH 服务是否安装 1. 检查是否已安装 OpenSSH 服务器 不同 Linux 发行版的包…