【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这两个概念

相关推荐
gywl1 小时前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos
WTT00112 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
某柚啊2 小时前
Windows开启IIS后依然出现http error 503.the service is unavailable
windows·http
_oP_i2 小时前
HTTP 请求Media typetext/plain application/json text/json区别
网络协议·http·json
杨德杰2 小时前
QT网络(一):主机信息查询
网络·qt
007php0073 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
yang_shengy3 小时前
【JavaEE】网络(6)
服务器·网络·http·https
OkeyProxy4 小时前
HTTP、HTTPS和SOCKS5代理協議
网络协议·https·云计算·代理服务器·海外ip代理
zquwei4 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
Aimin20224 小时前
路由器做WPAD、VPN、透明代理中之间一个
网络