1、HTTP请求包含的内容:
(1)HTTP请求的请求行
(2)HTTP请求的请求头
2、HTTP响应包含的内容:
(1)HTTP响应的状态行
200表示成功接受请求并完成整个处理过程
302表示去新地址找资源
307和304表示去缓存中找资源
404表示客户请求资源不存在
403表示客户没有权限获取资源
500表示服务器端出现错误
(2)HTTP响应的响应头
程序示例:
//用location和302实现请求重定向
public void test1(HttpServletResponse response){
response.setStatus(302);
response.setHeader("location", "/day04/1.html");
}
//压缩数据输出
private void test2(HttpServletResponse response)throws IOException{
String data = "aaaaaaaaaa";
System.out.println("原始数据大小: "+data.getBytes().length);
ByteArrayOutputStream bout = new ByteArrayOutputStream();//底层流
GZIPOutputStream gout = new GZIPOutputStream(bout);//包装流
gout.write(data.getBytes());//若数据太小,则不能写入底层流
gout.close();//关闭流,则必须写入底层流
byte gzip[] = bout.toByteArray();//得到压缩后的数据
System.out.println("压缩后数据大小: "+gzip.length);
//通知浏览器数据采用压缩格式
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-Length", gzip.length+"");
response.getOutputStream().write(gzip);
}
//通过content-type头字段,控制浏览器以哪种方式处理数据
private void test3(HttpServletResponse response) throws IOException {
response.setHeader("content-type","image/bmp");
InputStream in = this.getServletContext().getResourceAsStream("/1.bmp");
int len = 0;
byte buffer[] = new byte[1024];
OutputStream out = response.getOutputStream();
while((len = in.read(buffer)) > 0){
out.write(buffer, 0 ,len);
}
}
//定时刷新
private void test4(HttpServletResponse response) throws IOException {
response.setHeader("refresh", "3;url='http://www.sina.com.cn'");
String data = "aaaaaaaa";
response.getOutputStream().write(data.getBytes());
}
//下载方式获得资源
private void test5(HttpServletResponse response) throws IOException {
response.setHeader("content-disposition", "attachment;filename=1.bmp");
InputStream in = this.getServletContext().getResourceAsStream("/1.bmp");
int len = 0;
byte buffer[] = new byte[1024];
OutputStream out = response.getOutputStream();
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
}
Http实用头字段Range头
/**
* 断点下载
*/
public static void main(String[] args) throws Exception{
URL url = new URL("http://localhost:8080/day05/a.txt");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestProperty("range", "bytes=5-");//设置请求头range,传输范围是第5个字节以后得内容
InputStream in = conn.getInputStream();
int len = 0;
byte buffer[] = new byte[1024];
FileOutputStream out = new FileOutputStream("c:\\a.txt",true);//第二个参数默认为false, 设置为true支持续传
while((len = in.read(buffer))>0){
out.write(buffer, 0, len);
}
in.close();
out.close();
}