最近做了个需求,原本的流程中,我们系统与资金收付系统之间的交互使用的是一个用户名,但是业务方希望不同的险种能够在不同的服务器上进行支付落地流程,原本考虑想做一个集群,当请求被服务器接收后,根据险种类型跳转到相对应的服务器上,但是考虑到这样增加了所有服务器的应用压力,于是在此基础上进行了下优化,每次请求进来前只进入到一台服务器,如果是非车险则在此服务器上处理,如果是车险则再发送请求到另外一台服务器上处理。
因为涉及到服务器请求的跳转,于是在java后台里面写了一段post请求代码,并顺便在commonUtil里增加了一个公共请求方法来支持get、put、delete,正好对应了基本的增删改查,也顺便复习了下Http请求,当然还有其他请求方式,此次暂不涉及。
http由两部分组成,请求和响应,其中http请求的格式如下:
<request-line> (用来说明请求类型、要访问的资源以及使用的http版本)
<headers> (用来说明服务器要使用的附加信息)
<blank line> (一个空白行,http协议定义如此)
<request-body> (请求的内容主体)
我要访问http://api.map.baidu.com/marker?location=1,1&title=我的位置&content=我的位置&output=html
get请求访问举例如下:
GET /marker?location=1,1&title=我的位置&content=我的位置&output=html / HTTP/1.1(如果存在空格,则用 %20 代替)
Host: api.map.baidu.com(注意路径、文件名、请求参数并未配置在此)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection:Keep-Alive
post请求访问举例如下:
POST / HTTP/1.1
Host: api.map.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type:application/x-www-form-urlencoded(请求主体的内容是如何编码的)
Content-Length: 30(请求主体的字节数)
Connection:Keep-Alive
location=1,1&title=我的位置&content=我的位置&output=html (请求参数在此)
有了请求,接下来就是响应了,响应格式如下:
<stauts-line>
<headers>
<blank line>
<response-body>
举例如下:
HTTP/1.1 200 OK (这里是服务器返回的状态,别说你没见过404 not found)
Date:Sat, 31 Dec 2016 23:59:59 GMT
Content-Type:text/html;charset=ISO-8859-1
Content-Length: 100
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- 你成功引起了我的注意 -->
</body>
</html>
然后我们看看http的一个完整通信过程,总计7个步骤:
1.建立TCP连接,在HTTP工作开始之前,Web浏览器首先通过网络与Web服务器通过TCP建立连接,该协议与IP协议共同构建TCP/IP协议,HTTP是比TCP更高的应用层协议,根据规则,只有低层协议建立后才能建立高层协议的链接,因此首先要建立TCP连接,一般TCP链接的端口号是80。
2.Web浏览器想Web服务器发送请求命令
3.Web浏览器发送请求头信息
4.Web服务器应答
5.Web服务器发送应答头信息
6.Web服务器向浏览器发送数据
7.Web服务器关闭TCP连接