http协议服务器端怎么写( 二 )


5.最简单的方法是,每次需要发送http请求时,开一个子线程用于发送请求,子线程中接收到结果或抛出异常时,根据情况给UI线程发送message,最后在UI线程的handler的handleMessage方法中做结果解析和UI更新 。这么写虽然简单,但是UI线程和Http请求的耦合度很高,而且代码比较散乱、丑陋 。
4.http协议的详细描述HTTP服务器与HTTP客户机之间的会话如下:
1 客户机与服务器建立联系
与服务器建立连接,就是与SOCKET建立连接,因此要指定机器名称、资源名称
和断口号,可以通过URL来提供这些信息 。URL的格式为:
HTTP://<IP地址>;/[端口号]/[路径][?<;查询信息>]
资源的缺省值是INDEX或DEFAULT,断口号缺省为80.
2 客户向服务器提出请求
请求信息包括希望返回的文件名和客户机信息.客户机信息以请求头发送
给服务器,请求头包括HTTP方法和头字段.
HTTP方法常用的有GET、HEAD、POST,而PUT、DELETE、LINK、UNLINK方法
许多HTTP服务器都不使用 。
头字段包括:
DATE:请求发送的日期和时间
PARGMA:用于向服务器传输与实现无关的信息 。这个字段还用于告诉代理服
务器,要从实际服务器而不是从高速缓存取资源
FORWARDED:可以用来追踪机器之间,而不是客户机和服务器的消息 。这个字段
可以用来追踪在代理服务器之间的传递路由 。
MESSAGE_ID:用于唯一地标识消息
ACCEPT: 通知服务器客户所能接受的数据类型和尺寸 。(*/*表示可以接受
所有类型的数据 。
AOTHORIZATION:向服务器提供旁路安全保护和加密机制,若服务器
不需要这个字段,则不提供这个字段
FROM:当客户应用程序希望想服务器提供有关其电子邮件地址时使用
IF-MODEFIED-SINCE用于提供条件GET 。如果所请求的文档自从所指定
的日期以来没有发生变化,则服务器应不发送该对象 。如果所发送的日期格式不合
法,或晚于服务器的日期,服务器会忽略该字段
BEFERRER:向服务器进行资源请求用到的对象
MIME-VERTION:用于处理不同类型文件的MIME协议版本号
USER-AGENT:有关发出请求的客户信息
3 服务器对请求作出应答
服务器收到一个请求,就会立刻解释请求中所用到的方法,并开始处理应答 。
服务器的应答消息也包含头字段形式的报文信息 。
【http协议服务器端怎么写】报文第一行是状态行,格式为 <HTTP版本号><;状态代码><;解释短语>
状态码是个三位数字码,分为四类:
以2开头,表示请求被成功处理
以3开头,表示请求被重定向
以4开头,表示客户的请求有错
以5开头,表示服务器不能满足请求
解释短语是对状态码的解释 。
报文还向客户返回几个头字段,如:
STATUS CODE/REASON PHRASE
DATE
LAST-MODIFIED
SERVER
CONTENT _TYPE
RETRY_AFTER:服务器太忙时返回这个字段
WWW_AUTHENTICATE:当服务器的安全机制要求客户发送某中授权信息时使用该字段
报文最后是实体信息,即客户请求得到的HTTP服务器上的资源内容 。
5.如何使用http协议与服务端通信首先,需要明确一下http通信流程,Android目前提供两种http通信方式,HttpURLConnection和HttpClient,HttpURLConnection多用于发送或接收流式数据,因此比较适合上传/下载文件,HttpClient相对来讲更大更全能,但是速度相对也要慢一点 。
在此只介绍HttpClient的通信流程:1.创建HttpClient对象,改对象可以用来多次发送不同的http请求2.创建HttpPost或HttpGet对象,设置参数,每发送一次http请求,都需要这样一个对象3.利用HttpClient的execute方法发送请求并等待结果,该方法会一直阻塞当前线程,直到返回结果或抛出异常 。4.针对结果和异常做相应处理根据上述流程,发现在设计类的时候,有几点需要考虑到:1.HttpClient对象可以重复使用,因此可以作为类的静态变量2.HttpPost/HttpGet对象一般无法重复使用(如果你每次请求的参数都差不多,也可以重复使用),因此可以创建一个方法用来初始化,同时设置一些需要上传到服务器的资源3.目前Android不再支持在UI线程中发起Http请求,实际上也不该这么做,因为这样会阻塞UI线程 。