客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵循一定的通讯格式,HTTP协议用于定义客户端与web服务器通讯的格式。
HTTP1.0和HTTP1.1的区别
- HTTP1.0协议:客户端与web服务器建立连接后,只能获得一个web资源。
- HTTP1.1协议:允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
HTTP请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括一个请求行、若干请头、以及实体内容。
请求行:
用于描述客户端的请求方式、请求的资源名称,以及使用的HTTP协议版本号。请求方式常用的有GET、POST。请求头:
用于描述客户端请求那台主机,以及客户端的一些环境信息等。- Accept:text/html;image/*—客户机支持的数据类型。
- Accept-Charset:ISO-8859-1—客户机采用的编码。
- Accept-Encoding:gzip,compress—客户机支持的压缩格式。
- Accept-Language:en-us,zh-cn—客户机的语言环境。
- Host:www.it315.org:80—客户机想访问的主机名。
- If-Modified-Since:Tue,11 Jul 2000 18:23:51 GMT—资源的缓冲时间。
- Referer:http://www.it315.org/index.jsp—告诉服务器,客户机是从哪个资源来访问服务器。
- User-Agent:Mozilla/4.0(compatible;MSIE5.5;Windows NT 5.0)—客户机的软件环境。
- cookie—客户机向服务器带数据。
- Connection:close/Keep-Alive—请求完了之后,保持连接还是断开连接。
- Date:Tue,11 Jul 2000 18:23:51 GMT—当时的时间。
HTTP响应
一个响应的结构:响应头+一个空行+实体内容(代表服务器向客户端回送的数据)
- 状态行
描述服务器对请求的处理结果,格式:HTTP版本号 状态码 原因叙述。HTTP/1.1 200 OK
,状态码用于表示服务器对请求的处理结果:
- 100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
- 200~299:表示成功接收并已完成整个处理过程,常用200。
- 300~399:为完成请求,客户需要进一步细化请求。例:请求的资源已经移动一个新地址,常用302、307和304。
- 400~499:客户端的请求有错误,常用404.
- 500~599:服务器端出现错误,常用500.
- 响应头
描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
- Location:这个头配合302状态码使用,用于告诉客户端找谁。
- Server:服务器通过这个头告诉浏览器服务器的类型。
- Content-Encoding:告诉客户端,数据的压缩格式。
- Content-Length:告诉客户端,回送数据的长度。
- Content-Language:回送数据的语言环境。
- Content-type:告诉客户端,回送数据的类型。
- Last-Modified:当前资源的最后缓存时间。
- Refresh:告诉浏览器,隔多长时间刷新一次。
- Content-Disposition:告诉浏览器以下载方式打开数据。
- Transfer-Encoding:告诉浏览器,数据的传送格式。
- Set-Cookie:
- ETag:缓冲相关的头。web应用的唯一标识符,会根据应用的内容改变而改变。这个头能做到实时更新。
- Expires:告诉浏览器,把回送的资源缓存多长时间,-1或0,则是不缓冲。
- Cache-Control:控制浏览器不要缓冲数据。
- Pragma:控制浏览器不要缓冲数据。
- Connection:响应完了,保持连接还是断开连接。
- Date:当前的时间。
- range头实现断点下载:
Range头指示服务器只传输一部分WEB资源。这个头可以用来实现断点续传功能。Range字段可以通过三种格式设置要传输的字节范围:
- Range:bytes=1000-2000—传输范围从1000到2000字节。
- Range:bytes=1000- —传输WEB资源中第1000个字节以后的所有内容。
- Range:bytes=1000—传输最后1000个字节。
Accept-Ranges:这个字段说明Web服务器是否支持Range,则返回Accept-Ranges:bytes,如果不支持,则返回Accept-Ranges:none。
Content-Range:指定了返回的WEB资源的字节范围。这个字段值的格式是Content-Range:1000-3000/5000
URI url=new URL("http://localhost:8080/test/a.txt");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestProperty("Range","bytes=5-");
InputStream in=conn.getInputStream();
int len=0;
byte buffer[] =new byte[1024];
FileOutputStream out=new FileOutputStream("c:\\a.txt",true);
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
in.close();
out.close();