今天在一次访问后台中,服务器总是返回400,通过wireshark抓包显示如下:
POST/shsys-web/cc/module/v3/sub/sync?seq=37670&id=0077a33dbbd6a5839713&sn=15414b2300793583&d=aqeGAnlrIzg=HTTP/1.1
Host: 103.255.94.178:8080
Content-Length:12
User-Agent: Apache-HttpClient/UNAVAILABLE(java 1.4)
HTTP/1.1 400 Bad Request
Date: Tue, 13 Mar 2018 01:15:53 GMT
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTDHTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request thatthis server could not understand.<br />
</p>
</body></html>
后来经过查询,这段访问的问题是有两个:
(1) 作为POST请求,数据应该带载http body里面,这是其一
(2) 最主要的是,Content-Length这个字段是12,但是实际body里面没有内容,这是造成400的主要原因。
解决方法:
(1) 将请求换成标准的POST请求
POSThttp://openshsit.suning.com/shsys-web/cc/module/v3/sub/sync HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type:application/x-www-form-urlencoded
Content-Length: 436
Host: openshsit.suning.com
Proxy-Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java1.5)
seq=12269&id=0077a33dbbd6a5839713&sn=0bd981ffc976907b&d=86EY16diTBI8aiYVcCH6JuPrTYEWqsuwNP%2BPsyBdpVdchHH%2BxSBb8ybG79E8cv3YtLNIPVW%2FsRcg0R5j4tc8WakBNgw4LyoWWnsK5v9JH1S2C13JaNpbflBv2rVWnfoNALfqY8d9j737TJWIik7uf5I7AAw0brqcmeRPK86VWz1MCxtNgJSYqp4r%2FnaJeZF8YX191FqQym1ivBb2F94jrV7YUsnHduOwm0HwDxfFN8o5hrHT0IBMJuFxLz1V4BjDM3kSIcIA3mN5Uav78zt9e70AfKYOP3RUOp0j1JK%2Fm8GEBeP%2BKuBF49QZkRutLeXxsU4qELX0vg0GT7sGzpOYCfEIfFkbIqy0r%2BOHzygqUzY%3D
(2)如果只是单纯的为了方便,直接将Content-Length这个值修改为0就OK了,可以绕过服务器的错误