前后端交互报文设计的测试
作者:谎言诞行    发布时间:2026年09月10日

欢迎使用mickarea.net出品版权所有Copyright©2025mickarea.netAllrightsreserved1前后端交互报文设计的测试0.前言这里是整个可行性研究的最后一个子项,也是最为关键的一个子项。经过前面的前、后端代码测试,我发现了很多奇怪的消息处理问题。比如:前端发起请求时,突然被浏览器卡住或者中断。为了解决这些问题,我将展开说明每一个关键的设置或者处理。这里面将涉及到以下内容:前端请求报文设计、后端响应方法调整、后端响应报文设计、后端异常的统一处理。在Http通讯上,客户端发出的消息称为请求报文,服务端返回的消息称为响应报文。不管是发送还是返回,信息传递载体主要分为报文头、报文体2个内容。1.前端处理在一个前端报文中,有些信息是有其特定需要的。比如:多国语言处理、Token处理、自定义信息处理,等等。对于这些普遍性的需求,往往都是写入到报文头中。而对于特定的功能性需求,才会把信息写入到报文体。下面我们简单设计一个前端请求报文的结构。在请求方法上,我们一般使用HTTP协议的POST方法,而不是GET方法。因为,一般的请求都附带有大量的参数,甚至是二进制数据。GET方法无法很好的处理这些附带的参数。1.1.前端请求报文设计根据HTTP协议规范,请求头字段名是不区分大小写的。这意味着无论请求头字段是大写、小写还是混合大小写,服务器都应该能够正确解析和处理。虽然HTTP协议规定字段名不区分大小写,但字段值可能区分大小写。另外,如果通过浏览器的JavaScript发送网络请求,它会自动填充一些标准的请求头字段信息。这里我们以“用户登录”请求报文举例。一般来说,定义一个非标准的报文头信息,需要以X开头。序号位置字段名标准参数用途参数值1.报文头Accept-Language是客户端能接收的语言信息。一般用于服务国际化处理。按照客户端语言,返回对应信息。en、de、zh等等2.报文头Authorization是客户端的身份验证信息。一般用于传送Token值Bearer“空格”AccessToken3.报文头Content-Type是客户端请求体的媒体类型。一般是不需要自己指定的。因为浏览器会自动设置。application/json,application/x-www-form-urlencoded等等4.报文头Referer是客户端请求的来源页面。一般是不需要自己指定的。因为浏览器会自动设置。http://www.example.com/等等5.报文头X-Client-Type否自定义的客户端类型信息BROWSER、MOBILE_APP、PC6.请求报文体username否传送账户名USER00017.请求报文体password否传送密码123456表1-1欢迎使用mickarea.net出品版权所有Copyright©2025mickarea.netAllrightsreserved22.后端处理在服务器后端,一般来说需要处理2种信息:正常返回消息、异常返回消息。而消息的报文有几个东西要注意:响应状态码、响应报文头、响应报文体。其中,响应报文的状态码处理,不能过于随意。在浏览器环境中,它会根据报文状态码的数字,来进行自适应处理。比如:返回1xx、3xx状态码可能导致浏览器请求卡住。而随意返回4xx状态码,可能导致文件上传中断并且没有异常消息。下面,我们将详细讲解如何处理。2.1.后端响应方法调整在HTTP协议的处理方法有以下几个:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE、CONNECT。在安全处理上,为了降低安全风险一般只是开放GET和POST方法。至于其它方法,在后端接受请求时会直接拦截,并返回异常消息。但是,浏览器对于跨域CORS可能发起一个OPTIONS方法的预检。如果预检不通过,则浏览器会中断网络中的服务后续请求。所以,对于跨域的应用,后端需要开放OPTIONS方法。2.2.后端响应报文设计对于后端响应报文来说,HTTP原生的状态码不建议修改,直接返回200就可以了。这样可以避免很多客户端的响应异常。虽然状态码有1xx、2xx、3xx、4xx、5xx这5个类型。但是,不同浏览器对于状态码处理,还是有所区别的。个人建议,只要服务能访问HTTP状态码就设置为200。另外,在响应报文体增加2个东西:自定义服务状态码、自定义服务状态消息。这样就可以更详细描述异常信息。具体报文头设计,这里使用“用户登陆成功”报文为例子。如果登陆成功,除了返回状态信息,返回返回2个Token令牌。序号位置字段名标准参数用途参数值1.报文头status是指示服务端的状态200,404,500等等2.响应报文体serverStatus否服务具体的状态码SUCCESS,ERR0001等等3.响应报文体serverStatusMsg否服务具体的状态详情根据语言,返回不同的描述4.响应报文体accessToken否访问用Token令牌一串字符串5.响应报文体refreshToken否刷新用Token令牌一串字符串表2-12.3.后端异常的统一处理本次可行性研究讨论的是JavaEE后端程序。在JavaEE中它有3个常用的部件:Listener、Filter、Servlet。在日常开发的处理上,业务功能出错引起的异常,都是发生在Filter和Servlet中。而在JavaEE标准上,它们的处理函数一般抛出的异常是ServletException和IOException。因为,只有ServletException和IOException能抛出到外部容器。所以,个人建议创建一套以RuntimeException为父类的派生异常类。这样的话,不管是Servlet还是Filter产生异常。它们的异常都可以由外部容器一起处理,从而减少重复代码编写的工作量。Java中的异常分两类:1、RuntimeException(非受检)不强制声明,编译器不管(如NullPointerException)。2、Exception的其他子类(受检)必须在throws中声明,或在方法内try-catch处理。在JavaEE的标准中web.xml文件可以配置对应的Exception异常处理。后续,将测试是否可以使用。测试内容将在工作总结中说明。欢迎使用mickarea.net出品版权所有Copyright©2025mickarea.netAllrightsreserved33.工作进度序号内容完成任务类型任务细节开始日期结束日期1.理论学习及方案编写√文档编写文档2026/8/172026/8/172.程序实现√程序略2026/8/172026/8/18表3-14.工作总结基于前面的多项测试功能开发,本次的前后端交互测试过程较为顺利。在测试工具上,我选用了Hoppscotch整个开源免费的客户端测试工具。在后端服务处理上,异常的抛出一般都是Filter和Servlet上为主。所以在功能测试上,我在Filter上设置了异常抛出处理。因为JavaEE标准在设计上,只允许Filter和Servlet的方法抛出IOException和ServletException这2个异常。所以,在非指定的异常处理时,一般都是借助RuntimeException这个异常类来避开语法检查。下面,我们分开几点详细展示如何配置和编写统一的异常处理:4.1.web.xml的配置这里,是每一个JavaEE项目都存在的公共配置文件web.xml。我们可以在里面配置如下:图4-1上面的配置项主要用于指定异常处理页面。而页面不一定非要是静态页面,也可以是一个Servlet来承包处理。在配置中,定义了遇到java.lang.Throwable异常就跳转/commons/myErrorHandler.ac这个url来处理。4.2.测试用的Filter为了测试方便,我定义了一个Filter,并且在里面抛出异常。从而测试异常页面是否生效。其中的关键代码如下:图4-2欢迎使用mickarea.net出品版权所有Copyright©2025mickarea.netAllrightsreserved4根据上面的代码,当我们在URL传入特定的参数,它会抛出指定的异常。然后,后端会做相应的异常捕捉,并处理。4.3.统一处理的异常类根据配置和Filter的包装处理上来说,我们可以处理所有的异常抛出。而异常处理是一个Servlet。在信息传递上,JavaEE会把异常相关的信息和对象,存储在request对象中。测试Servlet可以返回一些字符信息,让客户端知道自己有没有正确识别。大体如下图:图4-34.4.客户端测试效果展示这里,我们展示几个在客户端发送和接收的画面。图的上部分是发送参数和URL信息。下面是接收的服务端消息。欢迎使用mickarea.net出品版权所有Copyright©2025mickarea.netAllrightsreserved5图4-4图4-5欢迎使用mickarea.net出品版权所有Copyright©2025mickarea.netAllrightsreserved65.结论方案可行。

填写一种颜色的字符(不区分大小写),1分钟有效,点击图片刷新