一、什么是Http协议
http协议指的是超文本传输协议,是java中一种非常重要的协议,它不仅仅能传输文字数据,还能传输图片,音频等。在Http3.0版本前,依赖的主要是TCP协议,但是因为这个协议他会有阻塞,导致发送效率大打折扣,所以自这里之后,后续就变成了UDP为主
二、常见的场景
像我们web开发中,网页前端和后端之间的通信,移动端和后端之间的通信都用到这个http传输
三、Http工作过程
它这个传输过程是一个典型的一问一答的模型,就像下面这个图

四、抓包
这个指的是在http传输过程,通过某个软件进行,获取请求和响应信息,关系如下图

我们后期会通过这种方法来确定bug是来自后端还是前端的,这里我们使用的抓包工具是Fiddler
当我们打开之后,Fiddler就会开始抓包,其中,左边的是代表抓取到的数据,而右边则是请求和响应的数据的详情

这个是请求的格式,在请求行下面的请求报头是以键值对的格式来显示的,当空行过后,下面的就是正文,但正文不一定会有,像登录时就有可能会有正文。响应的格式也是如此,我这里就省略了

五、URL
这个是就是我们俗称的网址,它用来标识一个网络上的资源位置,下图是一个完整的url,接下来,我以这个为例进行讲解

首先,登录信息这个现在基本上见不到了,因为我们一般都以短信,微信的方式进行替代了,服务器地址这里是ip地址,更常见的是域名。在这里后面,我们会加上服务器的端口号,以冒号隔开,不过你可能会发现,有些url没有端口号为什么也可以的,那是因为浏览器给http一个默认的端口号80,https默认端口号443,所以便可以省略。而带层次的文件路径可以理解为服务器里面的目录结构,就像电脑里文件的目录结构,例如:"C:\Users\lenovo\.m2"。问号后面则是查询字符串,它的格式是键值对,通过&进行分割开来。片段标识符则是用来区分在同一个页面,不同的部分
值得注意的是,当你的queryString里面包含特殊符号,他会进行转义成ASCLL码
,防止浏览器无法解析
六、认识方法Method
以下都是方法的请求,它表示这个请求要做什么动作,一般我们用的最多是post,get,put和delete

GET
先说get,我们一般80%的情况都是用这个,他表示从服务器获取某个资源
POST
其次是post,这个表示的是对服务器进行上传某个资源
PUT
这个类似post,也是上传某个资源到服务器
DELETE
这个是删除服务器的某个资源
不过,话说回来,这个其实并没有硬性规定,所以也就是说,实际开发中可以不遵循这个规则。
七、认识报头
host
这个表示的是服务器主机和端口
Content-Length
这个是body中数据的长度,单位为是字节
Content-Type
这个是表示请求body中数据格式,这个和上面的Cintent-Length是要搭配着body同时出现的。并且他们可能会同时出现,出现在响应或请求中
他常见的格式是text/html,text/css,application/JavaScript,application/json等
User-Agent
表示浏览器/操作系统的属性. 形如:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0
其中Mozilla这个对应着的是Firefox这个浏览器,后面的window这表示我当前电脑的属性,再后面的Chrome那表示的是浏览器的版本
refer
这个表示这个页面是从哪个页面跳转过来的,在日常中可以用于广告系统,像某网站内含有一个广告,当用户点进这个广告时,refer则能显示是从哪个网站点入,从而让哪个网站获得对应的收入。但是http中的refer是能被劫持,修改的
cookie
这是浏览器这端本地存储数据的一种机制,简单的讲就是你的电脑会给你的浏览器在你的硬盘上创建一个存储数据的地方(因为网页js不能直接访问硬盘),然后cookie就是存到这个地方。然后,cookie是按照键值对的格式进行构造,并且如何构造取决于程序员
并且它会根据每个域名维度进行划分,每个域名下都有自己的cookie。
如果还是不太懂得话可以看看下图的流图进行理解
