前言
我们在查看http请求/响应的时候,可以用Fiddler抓包工具。Fiddler抓包:下载、安装及使用_crazy_xieyi的博客-CSDN博客
一、请求格式(Request)
首行:方法 URL 版本号
请求头:包含了若干个键值对,每一个键值对占一行,键和值之间使用 冒号+空格 分割
空行:作为请求头的结束标记
请求正文:有的有正文,有的没有正文(可有可无)
HTTP请求是一个“行文本”,一行一行的组织数据,每一行都有特定的含义。
1.首行
2.首部(请求头)Header
header这里就是一堆键值对,键值对与键值对之间,使用 换行 来分割;键和值之间,使用 冒号+空格 来分割;header中具体有多少行是不固定的,具体是使用 空行 来作为header的结束标记。
二、响应格式(Response)
首行:版本号 状态码 状态码描述
响应头:包含了若干个键值对,每一个键值对占一行,键和值之间使用 冒号+空格 分割
空行: 作为响应头的结束标记
响应正文: 有的响应有正文,有的则没有,一种常见的格式就是HTML,当然这里具体格式要看程序猿自己是怎么写的
1.首行
2.响应头
包含了若干个键值对,每一个键值对占一行,键和值之间使用 冒号+空格 分割
三、HTTP协议格式总结
为什么HTTP报文中要存在“空行”?
因为HTTP协议格式并没有规定报头部分的键值对有多少个,空行就相当于是报头的结束标记。
而且HTTP在传输层依赖TCP协议,TCP是面向字节流的,如果没有空行存在,就会存在“粘包问题”。
四、URL格式 & URL encode
URL就是我们平时俗称的“网址”。
URL 的详细规则由因特网标准 RFC1738 进行了约定 .(https://datatracker.ietf.org/doc/html/rfc1738 )
URL格式:
1. 协议名称:http://
2.服务器地址:可以是域名,也可以是IP
3.端口号:可以省略,不写端口号,浏览器在构造请求的时候会自动加上端口号,对于HTTP是80,HTTPS是443。
4.路径:描述了要访问服务器上具体哪个资源
5.查询字符串:这里是程序员自己定义的一组键值对,从浏览器传递给服务器,查询字符串是以 ?开头的,然后键值对与键值对之间使用 & 来分割,键和值之间用等号来连接。
6.片段标识符:定位一个网页内部的一个位置的。
但是,这些都不是必须的:
URL encode
像 / ? : 等这样的字符 , 已经被 url 当做特殊意义理解了, 因此这些字符不能随意出现。
比如 , 某个参数中需要带有这些特殊字符 , 就必须先对特殊字符进行转义。
转义的规则如下 : 将需要转码的字符转为 16 进制,然后从右到左,取 4 位 ( 不足 4 位直接处理 ) ,每 2 位做一位,前面加上% ,编码成 %XY 格式。
UrlEncode编码和UrlDecode解码-在线URL编码解码工具