最近,我对HTTP请求参数分析有了进一步的了解。写一个简短的文本记录。
回顾自己的情况,这可能是:一个小网络和编程基础,您只能了解对HTTP协议的一点点理解。
首先分享一个小故事:我仍然清楚地记得初级实习期间的第一个工作任务。我需要致电其他部门提供的API来完成一项业务。
该API文档仅告诉我需要传递什么请求参数,以及使用哪种方法,例如:此::
实际上,如果您有经验,则可以直接在请求主体或URL中知道它;另一个是新来者有时不敢提出问题。实际上,只要您与同事确认。
但是,由于当时我拥有的编程知识有限,只有通过表格提交数据。结果,我扔了很长时间。
那天晚上我问我的老同学,他问我是否再次上床睡觉?
我怎么知道你知道?
他说,当然,您在课堂上睡觉不是一两天...
后来,他告诉我,我必须学习HTTP协议,以查看可以将请求参数的哪个位置放置在协议中。
然后,在正式说明之前,让我们简单地构建HTTP服务器,而Yunhao服务器的经典Python版本则由A的经典Python版本解释。
Yun Hello Server代码非常简单。服务器首先获得名称用户名的参数。如果用户通过此参数,则返回。XXX指的是名称用户名;如果用户不通过此参数,则返回:
为了快速开发(每个人都可以下载Python来运行此代码,也可以使用自己的语言实现类似的服务器)。细菌使用烧瓶框架建立后端服务。
当我获得参数时,我选择在request.args中获取参数。印象)
拥有HTTP服务器后,我们开始深入解释HTTP协议。em ...我个人认为我在学校的学校中只缺少一点点计算机网络。汇总网络包并深入学习各种网络协议。示例网络包装的视频
为了弄清楚什么是请求参数,表单参数,URL参数,标题参数,cookie参数,我们首先发送HTTP请求,然后获取此请求的网络包裹以查看HTTP消息的哪些信息将携带。
回应起点,用户AH是一个仅发布单个数据的可爱新事物。他用邮递员向Yun Hello API发送邮政请求:
该图正在正常开发,我们未能让Hello AH(服务器将在URL中获取参数,我们以表单的形式提交它,因此我们无法获得)
因为我们对请求主体的概念更加含糊,所以我们将再次重新分发相同的请求,并通过Wireshark查看包裹:
可以看出,功能强大的Wireshark帮助我们获取了请求,并将链接层协议,IP层协议,传输层协议和整个网络软件包的应用程序层协议放置。
由于我们通常忙于解决应用程序层问题,因此我们专注于高端超级文本传输协议,该协议是著名的HTTP协议。
首先,让我们检查HTTP消息的完整内容:
可以看出,HTTP协议可能由此组成:
完整的第一行如下:
第二行中的用户代理用于告诉对方启动请求的客户端。例如,如果我们使用Postman发起的请求,Postman将自动将此参数设置为自身:
接受对方的第三行接受我们要收到的数据类型。这是可以接受所有类型数据的默认数据:
第四行非常值得注意。这是邮递员自己的参数。我们把这个!
第五行是请求的主机。网络上的服务通常使用IP Plus端口作为唯一标识:
第六行指定了我们请求引发器的压缩方法:
第七行在处理当前请求后告诉另一方。不要关闭连接:
第八行告诉另一方的内容格式,这是本文的重点!例如,我们在此处指定一般浏览器的本机格式:
好吧,让我们注意以下内容,第九行的内容长度给出了请求主体的大小。
请求主体将被放置在以下的空线后面。
在这里看,让我们简要摘要。如果我们想告诉服务器,我们将发送表单数据。有两个步骤:总共两个步骤:
好吧,我们接下来将进一步解释。每个人都认为网络应用程序实际上是末端 - 末端交互。最常见的是服务器和客户端交互模型:客户端将一些参数数据发送到服务器。服务器想要或做什么?服务器是根据客户端传递的参数数据处理的。
传输层协议可帮助我们通过IP和端口号定位特定的服务应用程序。我们的程序员本身定义了如何交互。
大约30年前,英国计算机科学家蒂姆·伯纳斯·李(Tim Bernas-Lee)定义了原始的超级文本传输协议(HTTP)。我们的大多数Web应用程序继续采用他定义的这套标准。欧洲联盟的迭代。
许多文献描述了HTTP协议更加晦涩,并且该单词的声音听起来有点高。初学者开始开始时通常会感到不高兴。
实际上,该协议显然是一种格式。就像我们写一封信一样。同意,我们必须首先写一个心爱的XXX,然后写一个Hello,然后写一个段落并编写文本。也许您必须添加日期签名等等。
只要我们以格式写一封信,老师就可以看出我们正在写的。只要我们根据协议格式发送请求数据,服务器就可以查看我们想要的东西或要看我们想要做什么。
当然,老师长期以来一直研究文本格式,以便他可以理解字母格式。服务器程序也是如此。我们必须提前编写HTTP协议的分析逻辑,然后我们的服务器可以基于分析逻辑获得HTTP请求,以获取HTTP请求。
当然,对HTTP协议的分析的逻辑并非所有人写。即使可以写作,它也可能不会写得很好,因此我们将使用凶猛的人的强大脚手架,例如Java的全套春天,Go语言的Gin等。
回到我们开头给出的示例:
Ajang的示例使用python中的烧结框架并使用request.args在处理逻辑中获取请求参数,并且ARGS封装了从URL获取参数的逻辑。
该框架将帮助我们开始从URL切割,然后将这些参数存储到ARGS。
切换,假设我们是您的好服务提供商。我们希望用户通过表单参数的形式使用云服务。我们只需要更改获取名称参数的方式即可从form参数中获取它。烧瓶在请求中。形式封装了form参数(关于如何将框架封装在http请求的数量中,您可以看到您使用的框架的特定逻辑。估计差异不是很大,但是存在某些语言特征差异):
最后,我们解释了本文的标题。实际上,如果您想了解各种参数之间的区别,我们可以从另一个角度思考:
我们可以在HTTP消息中传递哪些职位?
接下来,回顾一下HTTP请求的内容:
每个人都看到我们的HTTP数据包,即基于传输层的应用层数据包,可能会像这样生长。
我们考虑两种情况。在第一种情况下,我们根据其他人的脚手架开发HTTP服务器。
由于将根据HTTP协议对框架进行分析,因此该框架将帮助我们分析请求URL,各种标题头(例如:Cookie等),并且特定的响应内容将帮助我们包装并进行分析(例如,根据钥匙的方法= valueread请求主体)。
然后,当我们开发服务器时,我们可以从URL,标头和响应主体中指定参数,例如:
总而言之,请求参数是上述类型参数的一般名称。
每个人都会发现,无论URL参数,标题参数,cookie参数,表单参数实际上,数据都以某种格式放置以将数据放在应用程序层消息中。关键是我们的服务器程序和客户端程序根据哪种协议获得并获得并获得。这是协议?
还有另一种情况。当然,这只是个玩笑。例如,大个子或公司将来将定义一个新的数据传输标准并将其推广到世界,例如HPPT协议。正式参数被定义为命名。这可能是我们首先说的原因 -班级公司和大兄弟制定标准,以下是基于标准研发技术,然后根据技术出售产品,并最终提供围绕产品的服务。
一旦制定了标准,整个行业就会扭转这一标准,感觉的感觉将变得越来越远...
说明参考链接
原始:https://juejin.cn/post/7100400494081736711