JavaServlet之http协议(二)

来源:互联网 发布:三菱q系列plc编程实例 编辑:程序博客网 时间:2024/05/18 22:54
HTTP/1.0与HTTP/1.1的区别
1.0一次请求,建立连接后,只能请求一次,请求完后,则断开连接
1.1一次请求,建立连接后,可以请求多次,每次请求完之后,不断开连接


一个请求行
7种请求方式,只需学习GET和POST
如果用户没有设置,默认都是GET,表单一般是POST,一般除了表单是POST外,其他的都是GET
<form action="/.../..." method="POST">
</form>


多个请求头


Accept:text/html,image/*
告诉服务器,客户机支持的数据类型为文本/网页,各种格式的图片,*/*表示浏览器支持各种数据类型。
Accept-Charset:ISO-8859-1
告诉服务器,客户机采用的编码


Accept-Encoding:gzip,compress
告诉服务器,客户机支持的压缩格式


Accept-Language:en-us,zh-cn
告诉服务器,客户机的语言环境(操作系统语言)


Host:
想访问的主机名


If-Modified-Since:Tue,11 Jul 2000 18:23:51 GMT
资源的缓存时间


Referer:http://www.it315.org/index.jsp
客户机告诉服务器,他是从那个资源(超链接)过来,用于防盗链


User-Agent:Mozilla/4.0(compatible;MSIE 5.5;Windows NT 5.0)
客户机的软件环境,哪个版本的浏览器,操作系统


Cookie
客户机可以向服务器带点数据


Connection:close/Kepp-Alive
保持客户机与服务器的连接


Date:Tue,11 Jul 2000 18:23:51 GMT
当前的日期时间
请求的主机和请求主机的环境信息


空行


实体内容








HTTP响应
一个状态行
HTTP/1.1 200 OK 状态码  状态说明
状态码表示服务器对请求的处理结果,三位十进制数,分为5类
302:你请求我,我叫你去找别人(重定向)location头指定你去找谁
307、304:和缓存有关的,叫客户机直接拿缓存资源。
403:访问权限不够
404:访问资源不存在
500:服务器端出问题


多个响应头
描述服务器的基本信息,根据这些信息通知客户机如何处理这些数据
客户端如何处理是根据服务器带来的响应信息
从而控制浏览器的行为
Server:Microsolt-IIS/5.0
告诉浏览器服务器的类型


Location:http://www.sina.com.cn/index.jsp
这个头配合302状态码,实现重定向
请求重定向:浏览器就请求两次了,登录界面


response.setStatus(302);
response.setHeader("location","/.../.../index.html");


Content-Encoding/Accept-Encoding;gzip
响应压缩         浏览器支持压缩格式
String str = "待压缩数据";
ByteArrayOutputStream bout = new ByteArrayOutputStream();
GzipOutputStream gout = new GzipOutputStream(bout);//包装流一般会有缓冲
gout.write(data.getBytes());//数据不满,不会将数据传给底层流。
gout.flush();
gout.close();
byte gzip[] = bout.toByteArray();


response.setHeader("Content-Encoding","gzip");
response.setHeader("Content-Length",gzip.length);
response.getOutputStream().write(gzip);




Content-Length:80
告诉浏览器会送数据的长度


Content-type
告诉浏览器会送数据的类型




response.setHeader("content-type","image/bmp");
getServletContent().getResourceAsStream("/1.bmp");
int len = 0;
byte buffer[] = new byte[1024];
OutputStream out = response.getOutputStream();


Last-Modified:服务器告诉浏览器当前资源缓存时间
Refresh:服务器告诉浏览器隔多久定时刷新一下
response.setHeader("refresh","3;http://www.sina.com.cn");


Content-disposition:告诉浏览器以下载方式打开数据
response.setHeader("content-disposition","attachment;filename=3.jpg";


Transfer_Encoding:chunked:告诉浏览器数据是以快传送的
ETag:缓存相关的头 服务器根据每个web应用给个串做标识符
如果服务器web应用有更动,ETag头的标识符会发生改变,
不一致,服务器则给新的,否则浏览器读取缓存,做到实时更新。
Expires:告诉浏览器把会送的资源缓存多长时间,-1或0则不缓存。
Cache-control:no-cache
Pragna:no-cache
控制浏览器不要缓存数据,股票肯定不能要缓存


Connection:close、Keep-Alive


Date:日期时间


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(总资源5000,会送的是3000-5000)


public class RangeDemo{
public static void main(String[] args){
URL url = new URL("http://localhost:8080/ServletDemo/a.txt");
HttpURLConnection conn = 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))!=-1){
out.write(buffer,0,len);
}
in.close();
out.flush();
out.close();
conn.close();
}
}
原创粉丝点击