1、http在整个TCP/IP的位置:
2、 http的主要特点
1) http协议是基于TCP/IP的无连接,在传输层使用的是TCP协议,所以在每次数据请求时都需要进行三次握手连接,再传输数据。数据传输完毕了后需要进行四次握手断开连接。这样才完成一次完整的数据请求过程。
2) 由于采用的是C/S模型,所以在请求数据时只需要传送请求方法和路径,请求方法通常有GET, HEAD和POST。
3) 客户端每次向服务器请求时都建立一个连接,服务器处理完客户的请求就会立即断开连接。
4) 是一种无状态协议。这里的无状态是指对于事物的处理没有记忆能力,即如果后续需要请求同样的数据也只能重传。
3、 两种请求方法
GET方式:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。
POST方式:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项
GET与POST方法有以下区别:
1) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTMLHEADER内提交。
2) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
3) 安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。
4) 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。
4、 http的响应码
1xx:信息,请求收到,继续处理
2xx:成功,行为被成功地接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作
4xx:客户端错误:
5、在mms的发送过程中获取http连接的过程:
首先访问网络服务需要网络权限:<uses-permission android:name=”android.permission.INTERNET”/>
在sendTransaction的run函数中启动发送过程:
Public class sendTransaction extends Transaction implements Runnable{
Private AndroidHttpClient httpClient;
Private httpRequestBase post;
Public run(){
httpClient = HttpUtils.createHttpClient(mContext); //获取httpClient对象,最后是通过new AndroidHttpClient()
post = new HttpPost(…); // 创建http 的post请求
response = sendPdu( … );
}
Public byte[] sendPdu(){
…
Return HttpUtils.httpConnection(…,client, post); //调用httpUtils的httpConnection继续发送彩信
}
}
HttpUtils类:
Public class HttpUtils{
Protected static AndroidHttpClient createHttpClient(){
AndroidHttpClient client = AndroidHttpClient.newInstance(userAgent,context);
//这里最终在androidHttpClient 中直接返回一个 new AndroidHttpClient() 对象
HttpParams params = client.getParams();
…
Return client;
}
Protected static byte[] httpConnection(){
…
switch(method){
case HTTP_POST_METHOD: //post方式
post = new HttpPost(url);
req = post;
case HTTP_GET_METHOD: // get方式
req = new HttpGet(url);
}
HttpResponse response = client.execute(); //http最后执行返回结果状态
}
}