打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
http响应总结:常见http响应错误总结

工作中经常会被同事问这个http请求为什么调不通,我虽然能解释清楚错误是什么,但是没有总结过,想到刚开始时,也是看了别人的文章才会的,所以总结一下,贡献一下自己的经验。

http 404 响应

404响应可以说是,在java web中最常见的错误了,基本上大家都理解问题产生的原因,即找不到这个资源。

  • 路径匹配错误导致的404

比如说请求的访问路径为http://localhost:8080/project/test,但是访问路径确实http://localhost:8080/project/tset, 这样就会报404错误,这是最常见的;
如果,项目名写错了呢?
测试结果如下:

Request URL:http://localhost:8080/projects/testRequest Method:OPTIONSStatus Code:404 Not FoundRemote Address:[::1]:8080Referrer Policy:no-referrer-when-downgrade
  • 1
  • 2
  • 3
  • 4
  • 5

仍然是404错误。

  • 如果路径端口或ip写错误
    如果把端口写错了,测试结果如下:
Request URL:http://localhost:8090/project/testReferrer Policy:no-referrer-when-downgradeRequest HeadersProvisional headers are shownAccess-Control-Request-Headers:content-typeAccess-Control-Request-Method:POSTOrigin:http://localhost:8010Referer:http://localhost:8010/User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

没有状态值,也没有错误信息,所以看到这样的请求,可以查看一下是否端口写错了。

如果把ip写错了,测试结果如下:

Request URL:http://www.baidu.com:8090/project/testReferrer Policy:no-referrer-when-downgradeRequest HeadersProvisional headers are shownAccess-Control-Request-Headers:content-typeAccess-Control-Request-Method:POSTOrigin:http://localhost:8010Referer:http://localhost:8010/User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

还是这样的错误,所以遇到这样的错误,不仅要查看端口,还要查看ip是不是对的。
- 总结
路径写错了,一般会导致404错误,还有可能导致无法调通,遇到以上错误,可查找对应的原因,解决错误。遇到404了,不要总想着自己没错。总有同事会说,怎么可能写错,我复制过来的,可能你确实是复制的接口文档的内容,但是后台开发的同事改了或者写错了,与其纠结到底谁的责任,不如早点查到问题原因。

http 400响应

http 400错误,也算是一个比较常见的错误,这种错误的原因非常明确,就是请求的数据和接受的数据无法匹配,有一下两种常见情况:

  • 数据格式错误
    我初期经常遇到这种错误,比如说,我的后台接口接受参数的代码如下:
public Message getTestInfo(@RequestBoday Test test) { Message message = new Message(); `````省略 return message}
  • 1
  • 2
  • 3
  • 4
  • 5

基本上,用过的一看就明白,这是接受一个json字符串格式的数据,把数据映射到Test类上。而那时候,我用jquery ajax提交数据经常这么写:

$.ajax({ type: 'POST', url: 'test', contentType: 'application/json; charset=utf-8', data: form.serialize(), dataType: 'json', success: function (message) { if (message > 0) { alert('请求已提交!我们会尽快与您取得联系'); } }, error: function (message) { $('#request-process-patent').html('提交数据失败!'); } });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

当时还不懂这东西,都是跟着别人写,记得当时同事都下班,自己写的时候遇到这种错误,想的头都疼了都不知道怎么改。
返回的错误信息如下:

<html><head><meta http-equiv='Content-Type' content='text/html;charset=utf-8'/><title>Error 400 Bad Request</title></head><body><h2>HTTP ERROR 400</h2><p>Problem accessing /project/test. Reason:<pre> Bad Request</pre></p><hr><a href='http://eclipse.org/jetty'>Powered by Jetty:// 9.4.1.v20170120</a><hr/></body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

错误很明显,数据实际格式表单格式,后台接受json字符串格式,怎么可能对?(这里有一个前提条件,前后的请求类型要一致,后台只接收post请求,前台发的也是post请求,如果发的是get请求,就会报Error 405 Request method 'GET' not supported 错误)。

  • 字段数据类型不一致

这种问题很常见,比如给数值字段传了一个含有非数值的字符串,给数组或者集合传了字符串;
下面是接收数据的对象,接收的数据格式为json字符串:

public class Test{ private int test; }
  • 1
  • 2
  • 3
  • 4

我发送的参数的格式

{'test':'abc'}
  • 1
  • 2
  • 3

测试结果:

<html><head><meta http-equiv='Content-Type' content='text/html;charset=utf-8'/><title>Error 400 Bad Request</title></head><body><h2>HTTP ERROR 400</h2><p>Problem accessing /cybx-core-service/role/test. Reason:<pre> Bad Request</pre></p><hr><a href='http://eclipse.org/jetty'>Powered by Jetty:// 9.4.1.v20170120</a><hr/></body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

出现400错误了。

  • 总结

所以遇见400错误,只要从这两方面找问题,基本都能解决问题。

http 415响应

遇见415响应的问题相对较少一些,而且这个响应的问题也非常明确,前后台媒体类型不一致,可以简单理解为content-type不一致。

@RequestMapping(value = 'test', method = RequestMethod.POST) public Message test(@RequestBody Test test) { Message message = new Message(); System.out.println('参数是==' test.getRname()); return message; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上面这种写法,是在spring mvc框架的项目中常见的写法,接收post请求,接收json字符串参数,下面是请求:

Request URL:http://localhost:8010/project/role/testRequest Method:POSTStatus Code:415 Unsupported Media TypeRemote Address:127.0.0.1:8010Referrer Policy:no-referrer-when-downgradeAccept:application/json, text/plain, */*Accept-Encoding:gzip, deflate, brAccept-Language:zh-CN,zh;q=0.8Connection:keep-aliveContent-Length:29Content-Type:application/x-www-form-urlencoded;charset=UTF-8{'test':'123'}:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

这是返回的响应:

<html><head><meta http-equiv='Content-Type' content='text/html;charset=utf-8'/><title>Error 415 Unsupported Media Type</title></head><body><h2>HTTP ERROR 415</h2><p>Problem accessing /cybx-core-service/role/test. Reason:<pre> Unsupported Media Type</pre></p><hr><a href='http://eclipse.org/jetty'>Powered by Jetty:// 9.4.1.v20170120</a><hr/></body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

由此可知,即使实体中的数据是json字符串格式,请求也是post请求,只要content-type不一致,就会报415错误。

  • 总结
    遇到415错误,首先要确定接口到底要接收什么格式的数据,然后再看一下请求发送的是什么格式,问题基本上就解决了。
    但是当你不知道自己调用的接口是需要什么格式的数据的时候,请先确定接口类型;如果是调用第三方接口,就向第三方接口索要接口对接文档,如果是同事写的,就向同事确认接口类型;我的同事对接第三方接口时,经常遇到不明不白的接口,做的第一件事就是打电话和qq向他们要资料。

http 320响应

302响应遇到相当少的一个错误,大概只遇到不到10次,但是有点诡异的一个错误,只要去网上搜,基本都会看到临时重定向这个解释。我的同事告诉我这是网络的问题,和代码没有关系,只能怪运气不好,刷新一下就好了。
但是,我遇到了几次,全都是因为后台代码执行出现了错误导致的,有人会说代码出错,不应该报500响应么,怎么会是302。
这就是我说的诡异的情况,代码执行出错却报了302错误。可惜的是我没有保留当时的日志文件,我现在无法重现这个错误。

所以,我建议,如果遇到302错误,先不要把错误推给重定向,也有可能是代码出错了,找到详细的执行日志,看看有没有错误,有可能就是错误导致的。

http 500响应

500响应,这是最常见额错误,一般都是后台代码执行出错了,只要找到错误代码修改就行,没什么好说的。

总结

以上就是我处理http响应的经验,希望能帮到他人,也算一个总结。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
httprunner学习24-sign签名验证
Servlet中的几个路径有关的方法
Jetty实战之 安装 运行 部署
WebApi接口传参不再困惑(4):传参详解(下)
geoserver服务wfs之GetFeature
真不是吹,Spring 里这款牛逼的网络工具库你可能没用过!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服