【JavaEE精炼宝库】HTTP | HTTPS 协议详解

一、HTTP 简介

HTTP (全称为"超文本传输协议")是一种应用非常广泛的应用层协议。

image-20240916175903964

HTTP 往往是基于传输层的 TCP 协议实现的。(HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3 基于 UDP 实现)。

目前我们主要使用的还是 HTTP1.1 和 HTTP2.0。本文章主要以 HTTP 1.1 版本为主。

https 是在 http 基础之上做了一个加密解密的工作(SSL)。

二、HTTP 协议格式:

HTTP 是一个文本格式的协议。可以通过 Chrome 开发者工具或者 Fiddler 抓包,分析 HTTP 请求/响应的细节。

由于 Fiddler 抓 HTTP 的效果更好,所以我们采用 Fiddler 作为我们的抓包工具。

2.1 抓包工具的使用:

Fiddler 下载地址:Fiddler 官网

下载流程:

  1. 打开官网,点击下面红色框框里面的内容。

image-20240916182018653

  1. 填入信息即可安装。
image-20240916182152527
  1. 安装成功后的界面如下(左边一开始不一定有信息):

image-20240916182239034

  1. 出现这个页面,一定要选取“是”同意安装证书,否则无法抓取 HTTPS(如果点了否,就要卸掉,重新安装)。

    image-20240916182519076

使用教程:

  • 左侧窗口显示了所有的 HTTP请求/响应,可以选中某个请求查看详情。

  • 右侧上方显示了 HTTP 请求的报文内容。(切换到 Raw 标签页可以看到详细的数据格式)。

  • 右侧下方显示了 HTTP 响应的报文内容。(切换到 Raw 标签页可以看到详细的数据格式)。

  • 请求和响应的详细数据,可以通过右下角的 View in Notepad 通过记事本打开。

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

点击左下角 Capturing 即可停止抓包,再次点击开始抓包。

image-20240916183050037

抓包工具的原理:

Fiddler 相当于一个 “代理”。

浏览器访问 csdn 时,就会把 HTTP 请求先发给 Fiddler,Fiddler 再把请求转发给 csdn 的服务器。当 csdn 服务器返回数据时,Fiddler 拿到返回数据,再把数据交给浏览器。因此 Fiddler 对于浏览器和 csdn 服务器之间交互的数据细节,都是非常清楚的。

image-20240916183817472

2.2 HTTP 请求报文格式:

一个 HTTP 请求报文,分成 4 个部分(1)首行(2)请求头(3)空行(4)正文。

image-20240916185119234 s
  1. 首行:

首行又包含三个部分。

  • 请求的方法(GET,POST之类的)。
  • 请求的 URL(请求的对方地址)。
  • 版本号(例如 HTTP/1.1)。

这三个部分使用空格进行区分。

  1. 请求头(header):

请求的属性,冒号分割的键值对。

每组属性之间使用\n分隔。

遇到空行表示就 Header 部分结束。

  1. 空行:

最后一个 header 后面,存在一个空行,类似于链表,使用 null 结尾。

  1. 正文(body):

空行后面的内容都是 Body。Body 允许为空字符串。如果 Body 存在,则在 Header 中会有一个 Content-Length 属性来标识 Body 的长度。

2.3 HTTP 响应报文格式:

一个 HTTP 响应报文也是分成 4 个部分(1)首行(2)响应头(3)空行(4)正文。

基本和 HTTP 的请求报文格式差不多,区别比较大的就是首行,所以接下来主要分析首行。

响应的首行也是由三部分组成(1)版本号(2)状态码(3)状态码描述。

状态码和状态码描述,可以反应此次响应具体情况。

image-20240916185643796

2.4 HTTP 协议格式总结:

image-20240916185958823

这里有个问题:为什么 HTTP 报文要存在 “空行”?

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

三、HTTP 请求详解:

3.1 刨析 URL:

评论 82
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值