HTTP协议
1 http协议内容
Http请求内容:
(1)请求行:包含方法、路径和http版本
(2)http首部
User-Agent:浏览器类型
Host:服务器名称
Accept:客户端可以处理的数据类型
Connection: keep-alive : 希望复用socket连接
(3)空行
两个回车换行对:/r/n/r/n
(4)消息体
get没有消息体,post有消息体
Http回复内容:
(1)状态行:包含http版本,响应码和状态
响应码100-199:提供信息的响应
响应码200-299:指示成功
响应码300-399:重定向
响应码400-499:客户端错误
响应码500-599:服务端错误
(2)首部
(3)空行
(4)请求的资源
2 http方法
(1)get(查)
主要用来查询,该方法将查询参数附加到url的末尾。
(2)post(改)
post用来将资源的一个表示上传到服务器。主要用于不能重复的不安全操作。
(3)put(增)
将资源上传到一个已知URL的服务器,该方法具有幂等性,即可以重复使用这个方法不用担心它是否失败,如果两次把一个文件存到同一个位置,与只放一次相比,服务器状态一样。
(4)delete(删)
从一个指定的URL删除资源,同样具有幂等性。所以如果不确定一个删除请求是否成功,可以再次发送同一个请求。
(5)head方法
与get方法类似,不过只返回资源的首部,不返回具体数据。
3 get方法和post方法的区别
(1)get方法用于资源的查询/获取,它一般是安全和幂等的。安全是指它不会对资源进行更改,幂等是指两次请求得到的结果应该是类似的。(现实编程中这两个性质并不是严格要求的);post方法用于资源的更新。
(2)get方法将参数连接在url的后面,post方法将参数写在消息体中。所以,处理敏感数据应该使用post
(3)参数的长度问题,http并没有对get和post方法携带的参数长度做限制,不过浏览器get方法将参数加到url后面,一些浏览器会对url总长度做限制;此外,服务器也会对参数的长度做限制。一般而言,post可以携带的参数数量比get可携带的参数数量多。
(4)get只支持ascii编码,post支持二进制。
(5)get请求的数据会被缓存在浏览器,下次发送相同的请求,会直接从缓存中获取,post不会缓存。
(5)get请求可以被存储到浏览器的历史记录中,可以被收藏为书签;post方法不能被存储到浏览器历史记录中,也不能被收藏为书签。
可参考:http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
4 请求主体
首部中有两个重要的字段与主体相关
(1)Content-type:指定主体中数据的MIME媒体类型
使用最多的是application/x-www-form-urlencoded类型,表示key-value格式。除此之外,还有以下这些:
text/* :表示文本文件
image/*:表示图片
model/*:表示3D模型,如VRML文件
audio/*:表示声音
video/*:表示视频
application/*:表示二进制数据
message/*:表示协议特定的信封
multipart/*:表示多个文档和资源的容器
(2)Content-length
指示请求主体中有多少个字节。
5 Cookie
详细看博客:http://blog.csdn.net/yy_james/article/details/72453218
二 URLConnection
1 使用URLConnection的类的程序遵循以下基本步骤
(1)构造一个URL对象
(2)调用这个URL对象的openConnection()获取一个对应该URL的URLConnection对象。
(3)配置这个URLConnection。
(4)读取首部字段。
(5)获得输入流并读取数据
(6)获得输出流并写入数据
(7)关闭连接
2 超时
(1)set/getConnectTimeout(int timeout)
控制socket等待建立连接的时间,单位为毫秒。
(2)set/getReadTimeout(int timeout)
控制输入流等待数据到达的时间,单位为毫秒。