【JavaEE初阶】HTTP协议(1)

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

HTTP

http协议抓包

抓包工具

fiddler的配置

fidder的用法

[HTTP请求 基本格式](#HTTP请求 基本格式)

首行

请求头(header)

空行

正文(body)

[HTTP响应 基本格式](#HTTP响应 基本格式)

首行

响应头

空行

正文

压缩

[URL 唯一资源定位符](#URL 唯一资源定位符)

[url encode 转义字符](#url encode 转义字符)

[URI 唯一资源标识符](#URI 唯一资源标识符)


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

HTTP

http全称为"超文本 传输协议",HTTP不仅仅能传输文本,还能传输图片, 音频文件,视频,其他各种数据...广泛应用在日常开发的各个场景中(HTTP是最广泛使用的应用层协议,没有之一)

目前互联网上见到的HTTP协议**,绝大部分都是HTTP/1.1版本**(1.1版本已经足够好用了,升级到2.0成本比较高(浏览器/服务器的兼容性),带来的收益有限)

https 可以认为是http的升级版,在http之上引入了一个"加密层 "(https的安全性更高一些),除了安全性外,https和http完全一样

http协议是一种典型的"一问一答模型"的协议(客户端发一个请求,服务器就返回一个响应,一一对应)

http协议抓包

借助抓包工具,观察HTTP请求/响应的详细情况,TCP/UDP也是可以抓包的,日常开发中,很少会抓TCP层次的包,但是抓HTTP的包是比较常见的

抓包:用一个程序,把自己网卡上的数据包获取到,并且解析显示出来

因此抓包工具对于浏览器和服务器之间交互的数据细节,都是⾮常清楚的.

抓包工具

  • wireshare :功能非常强,可以抓TCP,UDP,IP....当然也能抓HTTP,但是"太重了"
  • chrome/edge开发者工具 :自动抓包,但是没法看到HTTP原始报文数据,不适合初学者
  • fiddler:推荐使用,经典的,功能强大的抓包工具

fiddler的配置

  1. 确保电脑上退出了其他的代理类软件(如vpn/浏览器插件...),fiddler也是代理,可能会和其他代理冲突,导致不能正常抓包
  2. 开启fiddler的HTTPS功能(一次性操作),因为当前网络上大部分网站都是HTTPS

fidder的用法

启动fidder后,抓包工作就自动开始了

虽然不进行任何操作,fidder也能抓到很多包(正常情况下,你的电脑上有些软件,可能就在不停的在后台与服务器进行交互)

可以使⽤ctrl+a全选 左侧的抓包结果,delete键清除所有被选中的结果.

HTTP请求 基本格式

HTTP是 行文本格式的协议

请求格式包括 首行,请求头,空行,正文 四部分

首行

首行三个部分使用空格分割(响应也是如此)

请求头(header)

第二行开始的若干行,一直到空行结束 . 每一行都是一个键值对,键和值之间使用 ":空格" 分隔

HTTP中,请求头里的键值对都是HTTP标准规定 的,**不同的请求头,都有特殊含义 ,**但是标准也允许用户自定义一些请求头

空行

请求头的结束标记

空行的作用

  • HTTP协议并没有规定报头部分的键值对有多少个.空⾏就相当于是"报头的结束标记",或者是 "报头和正⽂之间的分隔符"
  • HTTP在传输层依赖TCP协议,TCP是⾯向字节流的.如果没有这个空⾏,就会出现"粘包问题".

正文(body)

有的请求头中有body,有的没有 . 一般来说,HTTP中,GET往往是不带body,POST 往往是带body

HTTP响应 基本格式

响应格式包括 首行,响应头,空行,正文 四部分

与请求头非常类似​​

首行

200是一个常见的状态码,表示"成功"

响应头

响应头也是键值对构成,只是有的键值对只出现在请求中,有的出现在响应中,有的两处都出现.

空行

响应头结束标记

正文

正文体现了 服务器给浏览器返回的数据

对于响应来说,正文通常是HTML/CSS/JS/JSON/图片/音频/字体....

响应打开后,看到的是二进制(压缩后的)

压缩

压缩是在二进制的角度上对数据进行重新编码,在保证信息量的不变下,体积缩小了(体积小了,传输时消耗的带宽就低了)

压缩算法有很多种,设计都比较巧妙.

根据数据特点进行压缩,举个简单例子: aaabbbbbcc=>3a5b2c

URL 唯一资源定位符

URL(Uniform Resource Locator 统⼀资源定位符),俗称"网址"

互联⽹上的每个⽂件都有⼀个唯⼀的URL (用于定位网络上的"资源"(网页,文件,图片....))它包含的信息指出⽂件的位置以及浏览器应该怎么处理它.

URL不是HTTP专属的,很多协议都会用到

对于一个URL来说,主要关心其中的四个部分:IP地址(域名),端口号,层次的路径,查询的字符串

url encode 转义字符

url中的有些符号有特定含义,像/?@&:...等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现.⽐如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进⾏转义.

万一你的query string键值对结构中的值里面包含了一些特殊符号,可能会是url的解析出现问题

转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做 ⼀位,前⾯加上%,编码成%XY格式

URI 唯一资源标识符

可以简单理解成 URL是URI的一种实现,

实际日常开发中,一般不会刻意区分URL和URI这两个概念

相关推荐
愤怒的it菜鸟29 分钟前
2024文档透明加密软件最新推荐|10款好用的透明加密软件分享
大数据·运维·网络·安全·web安全
圈圈的熊36 分钟前
HTTP 和 HTTPS 的区别
前端·网络协议·http·https
命里有定数1 小时前
ubuntu工具 -- ubuntu服务器临时没有网络,急需联网下载东西怎么办? 使用手机提供网络
服务器·网络·ubuntu
李李李李李同学1 小时前
弱口令攻击的实现原理及预防
网络·安全·web安全·弱口令
titxixYY2 小时前
HCIA(DHCP服务)
网络·智能路由器
溯Sec4 小时前
搜索引擎之shodan(一):初始化及安装
网络·安全·web安全·搜索引擎·网络安全·系统安全·安全架构
这题怎么做?!?4 小时前
【Linux】网络编程:实现一个简易的基于HTTP协议格式、TCP传输的服务器,处理HTTP请求并返回HTTP响应;GET方法再理解
linux·服务器·c语言·网络·c++·tcp/ip·http
ZachOn1y4 小时前
计算机网络:网络层 —— IP 多播技术
网络·tcp/ip·计算机网络·ipv4·ip多播
网络安全指导员7 小时前
常见网络安全设备默认口令
服务器·网络·安全·web安全·php·apache
车载诊断技术10 小时前
整车功能架构 --- 智能座舱
网络·人工智能·分布式·架构·汽车·电子电器架构