http响应总结:常见http响应错误总结

来源:互联网 发布:自动化交易编程设计 编辑:程序博客网 时间:2024/06/07 12:04

工作中经常会被同事问这个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

仍然是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

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

如果把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

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

http 400响应

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

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

基本上,用过的一看就明白,这是接受一个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("提交数据失败!");        }    });

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

<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>

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

  • 字段数据类型不一致

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

public class Test{    private int test;    }

我发送的参数的格式

{"test":"abc"}

测试结果:

<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>

出现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;    }

上面这种写法,是在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"}:

这是返回的响应:

<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>

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

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

http 320响应

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

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

http 500响应

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

总结

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 哪个品牌空调性价比高 哪个牌子的拉杆箱性价比高 瓷砖哪个牌子的性价比比较好 什么牌子的羽毛球拍性价比高 什么牌子的蓝牙耳机性价比高 男士钱包什么牌子性价比高 抽油烟机哪个牌子性价比高 液晶电视什么牌子性价比高 哪个牌子的油烟机性价比高 森海塞尔哪款耳机性价比高 哪个牌子的平板性价比高 蓝牙耳机什么牌子性价比高 什么牌子的充电宝性价比高 哪个牌子的按摩椅性价比高 机械键盘什么牌子性价比高 什么牌子台式电脑性价比高 哪个牌子的电动车性价比高 什么牌子的机械键盘性价比高 跑步机哪个牌子的性价比高 现在买什么电视性价比高 哪个牌子的粉底液性价比高 thinkpad哪个系列性价比高 什么牌子的平板电脑性价比高 什么牌子固态硬盘性价比高 哪个牌子的羽绒服性价比高 整体橱柜什么牌子性价比高 哪个牌子的微波炉性价比高 法国性大片在线播放联合传播 性传播疾病专科 接触性传播 通过性传播的疾病 性传播疾病医院 性传播疾病挂什么科 怎样预防性传播疾病 性传播疾病传播方式 尿道炎性传播 男性性传播疾病 女性性传播疾病医院 性传播疾病检查多少钱 性传播疾病诊疗 性传播疾病都有哪些