http基础(一)

URL

URL(uniform resource locator),统一资源定位符,浏览器寻找信息所用的资源位置。URL定义了服务器通过网络提供资源以及客户端通过网络访问资源的方式。

URL的一般格式:
http://www.baidu.com/index.html

URL一般分为三部分:
URL第一部分为URL的方案,即采用什么协议,如http、ftp等。这部分告诉客户端以什么方式访问服务器资源,对应示例:http
URL第二部分指定服务器的位置,通常为域名或者服务ip地址。这部分告诉客户端服务器的位置。对应示例中:www.baidu.com
URL第三部分为服务器上资源路径。对应示例中:index.html

http请求报文

报文由三个部分组成:起始行、首部、包含数据的主体。

  • 请求报文起始行为:方法 url 版本。中间用空格隔开。由一个空行(CRLF)结束。
    例:GET /index.html http/1.1

  • 请求报文首部:首部可能有一个或者多个,由名字后加一个冒号(:),接着是一个值组成。由一个空行(CRLF)结束。
    例:
    Accept:text/css,/;q=0.1
    Accept-Encoding:gzip, deflate, sdch
    Accept-Language:zh-CN,zh;q=0.8

  • 请求报文实体:实体是一个http的数据部分。有些请求没有数据传输则没有实体部分
    例:
    length=10&page=1&sidx=&sord=&popNameDisplay=%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09&pageNo=1&invokeFlag=1&pageSize=10
    Name

请求报文完整示例

POST /skuReview/list HTTP/1.1

Host: admin.test.com
Connection: keep-alive
Content-Length: 129
Accept: application/json, text/javascript, /; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: test_user_token=admin_user_31595_web_96c458e1550447f2d8f307fb2dec9924; TEST_CASTGC=TGT-1779-xxxZO3cOoJiAUfAtHVleaZmHBadpHVMxLIaTM20hbgRTEiWypc-meicai.cn; beta_user_token=admin_user_76482_web_cc44f322b071c83dcd234c7c286e6711; PRO_CASTGC=TGT-37039-ZWu4onc5fBAR7anq50Anhm0pZ0AqUW0DqvFvwg6ogH0LfqRLMN-meicai.cn; JSESSIONID=C7917DB96F94171C119CFAC587A14EB6

length=10&page=1&sidx=&sord=&popNameDisplay=%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09&pageNo=1&invokeFlag=1&pageSize=10
Name

http响应报文

响应报文由三个部分组成:起始行、首部、包含数据的主体。
- 响应报文起始行为:版本 装条码 状态说明。中间用空格隔开。由一个空行(CRLF)结束。
例:
HTTP/1.1 200 OK

  • 响应报文首部格式与请求报文一致。
    例:
    Server: nginx
    Date: Tue, 22 Aug 2017 02:55:47 GMT
    Content-Type: application/json;charset=UTF-8
    Transfer-Encoding: chunked
    Connection: close

  • 响应报文实体:实体是一个http的数据部分。有些请求没有数据传输则没有实体部分。
    例:
    {msg:”response”}

响应报文完整示例

HTTP/1.1 200 OK

Server: nginx
Date: Tue, 22 Aug 2017 02:55:47 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: close

{“page”:1,”length”:10,”total”:59,”records”:589,”begin”:0,”data”:[{“id”:201,”name”:”测试名称”}]}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最近在做中国银行的一个快捷支付渠道,使用的是 ISO8583 协议,一开始用的是JPOS框架,但是感觉框架比较臃肿,而且文档也比较少。在等待银行专线的过程中,自己闭门造车做了一个简单的8583报文解析框架 —— Simple8583,将程序重写了一遍,渠道中的代码量少了不少,这几天中行的接口在测试环境终于调试完成了。抽空分享一下这段时间自己学到的知识。 数据类型与编码格式: 根据接触到的数据类型将数据分为如下几种类型:          CHAR(asc编码,直接使用字符串的getBytes(ENCODING)方法获取字节数组)   BINARY(二进制编码,在打包时将8位01值组装为一个字节),             NUMERIC(BCD编码,即8421码),                LLVAR(变长域,采用ASC编码,每个LLVAR类型的域前会有1字节的域字节长度,表示长度的字节用BCD编码表示)                LLLVAR(变长域,与LLVAR域类似,不同之处在于每个LLLVAR域前会有2字节的域字节长度,长度同样以BCD编码表示)             LLVAR_NUMERIC(变长域,采用BCD编码,前有1字节的长度,长度为域值的长度,而非字节长,如域值为123456,编码后长度为3字节,但是表示域长的字节值为6)       如果用到其它数据类型可以在IsoType中进行添加,并在IsoField中添加处理操作 BitMap:        BitMap是ISO8583报文的精髓所在,ISO8583报文支持64域和128域两种,但是并非每次请求都会将所有域都请求过去,BItMap就起到了标识哪些域是有效的请求域,接收方也会根据BitMap中约定的值对域进行解析。   那么BitMap又是如何工作的呢?          首先,BItMap分为8字节和16字节两种情况,分别表示支持64域和128域,其第一位值为1,表示BitMap为16字节,否则为8字节。       其次,BitMap中的每一位对应数据域的第几域,有效域会置为1,比如01001000表示第二域和第5域为有效位。 在Simple8583中具体的实现是通过BitMap类实现的,具体可参考源码。 mti:            mti即 message type identifier消息类型标识,为4位bcd编码的数字标识符,用于描述信息的类型。 同一个mti可以用于标识多个不同的交易,比如一般常用的0200可以用来表示消费交易,消费撤销,分期付款消费和分期付款撤销,但是对于同一个mti标识的数据域类型定义是类似的。           具体的实现,我将Simple8583的xml文件设置为了两部分,一部分为公用的报文头,如msgLength,tpdu,bitmap等,另外一部分分按照mti的不同分为多个package体。 粗略的实现流程:          1)组装请求的Map数据(只组装需要的数据域,key值为对应的数据域或包头的值)          2)请求数据进入SimpleClient代理,SimpleClient根据传入的值解析xml文件(jaxb实现,做了缓存)          3)根据传入值的mti寻找对应的IsoPackage类,对找到的IsoPackage类进行clone(避免污染),对clone值中的域进行值处理和格式化         4)生成BitMap,计算Mac值(如有)          5)使用ByteArrayOutputStream将组装成的IsoPackage域值进行拼装成为一个大的byte数组,在byte前拼装两个字节的长度          6)通过Socket将数据发送并接受响应(读取前两个字节长度,根据长度获取其剩余报文),根据IsoPackage解析报文域,解析得到BitMap后根据BitMap对数据域进行解析,并将值都放入到对应的field中          7)将数据都放在Map中返回,并进行MAC校验(如有) 标签:Simple8583
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值