记一次HTTP 服务实战

1.       引子

今日来,由于手机终端需要通过CMWAP HTTP访问服务器,服务器这边必须解析HTTP请求,并且进行协议解析,进行业务操作,将结果反馈至手机终端。

 

由于手机终端机遇WTK,采用HttpConnection,故服务器必须能够读取http request body中的信息进行协议解析;

 

2.       解析Request

下面是从firebug中抓取的一段带有普通的HTTP Request Head:

GET / HTTP/1.1

Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)

Host: 192.168.0.171:10000

Connection: Keep-Alive

/r/n

//request body(optional)

 

行尾分别以/r/n换行;因为此时服务器设计是将具体请求的数据设置在request body中传,所以头信息必须过滤掉(和我们一般的服务器做法不同,如get /a.html决定了客户端访问地址)

 

过滤代码如下:

for(int i=0;i<512;i++)

{

                                     data[i]=(byte)in.read();

                                     if(data[i]==10&&data[i-1]==13&&data[i-2]==10&&data[i-3]==13)

                                               break;

         }

如果遇到/r/n/r/n的话,则表示HTTP HEAD已经结束;余下可以进行从socketread request body数据,并且按照协议进行解析,并且进行业务操作;

 

3.       发送reponse

下面是一次普通的HTTP RESPONSE HEAD

Host:www.baidu.com

User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language:zh-cn,zh;q=0.5

Accept-Encoding:gzip,deflate

Accept-Charset:GB2312,utf-8;q=0.7,*;q=0.7

Keep-Alive:300

Proxy-Connection:keep-alive

Cookie:BAIDUID=BC8C811EBFC5CC76C21CD9C6FADA3090:FG=1

        

         Response header中有一个头属性为content-length:,如果设置为0,在浏览器中访问相对没有问题,但是在手机终端中,终端接收到移动网关放回的response not full的反馈,这是其中出现的一个插曲;

         服务器反馈的数据,防止在response body中反馈,但是之前必须response header,下面是一个简单的header,表示了response body中的数据的字节长度以及服务器响应结果;

         String header = "HTTP/1.1 200 OK/r/n" + "Content-Length: %d/r/n"

                  + "/r/n";

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值