http协议----->请求头和响应头





如果请求里有这个range头,那么响应里也有
1.首先在webroot下放好a.txt

内容如下:

2.然后在本地有个下载未完成的a.txt

本地a.txt内容如下:

DEMO:创建class
url:对应着eclipes里的a.txt
|
1
|
new FileOutputStream("/Users/snowing/Documents/a.txt",true);----》代表下载未完成的a.txt |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package cn.itcaste.web.servlet;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class RangeDemo { public static void main(String[] args) throws Exception { URL url=new URL("http://localhost:8082/day04/a.txt"); HttpURLConnection httpurlconnection=(HttpURLConnection) url.openConnection(); httpurlconnection.setRequestProperty("Range", "bytes=5-"); InputStream in=httpurlconnection.getInputStream(); int len=0; byte buffer[]=new byte[1024]; FileOutputStream out =new FileOutputStream("/Users/snowing/Documents/a.txt",true);//true:代表接着aaaaa继续下载而不是删除aaaaa再下载 while((len=in.read(buffer))>0){ out.write(buffer, 0, len); } in.close(); out.close(); }} |
结果:


1.http相应格式

状态码:HTTP/1.1 OK
状态码

2.http状态行
200--》ok
302--》找别人要资源
304/307--》我不给你,你去缓存拿吧
403--》没权限
404-》地址错了,或者没资源
505-》服务器端问题
3.响应头
3.1.1location:这个头配合302使用,用于告诉客户找谁
用302和location进行重定向
创建servlet进行尝试
package cn.itcaste.web.servlet; import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class servelt
*/
@WebServlet("/servelt")
public class servelt extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.getWriter().append("Served at: ").append(request.getContextPath());
response.setStatus(302);
response.setHeader("location","/day04/WebContent/1.html");
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response);
} }
3.1.2 servlet压缩传输数据
response.setHeader("Content-Encoding","gzip");
Content-Encoding--->通过这个头,浏览器知道数据压缩格式
response.setHeader("Content-Length", gzip.length+"");
Content-Length--->通过这个头,浏览器知道回送数据长度
package cn.itcaste.web.servlet; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class servelt
*/
@WebServlet("/servelt")
public class servelt extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.getWriter().append("Served at: ").append(request.getContextPath());
String data ="aaaaaaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
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.getOutputStream().write(gzip);//压缩数据打给浏览器
//通知浏览器数据采用压缩格式
response.setHeader("Content-Encoding","gzip");
response.setHeader("Content-Length", gzip.length+"");
response.getOutputStream().write(gzip); }
控制台:
原始数据大小:85
压缩后大小26
3.1.3 content-type--->通过这个头,浏览器知道回送数据格式
Tomcat 里的文件web.xml配置市面上常见的数据格式,不知道可以去这里找 距离:
</mime-mapping>
<mime-mapping>
<extension>jnlp</extension>
<mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping>
<mime-mapping>
<extension>joda</extension>
<mime-type>application/vnd.joost.joda-archive</mime-type>
</mime-mapping>
3.1.4 Last-Modified--->通过这个头,告诉浏览器当前资源缓存时间
3.1.5 Refresh:通过这个头告诉浏览器隔多长时间刷新一次
response.setHeader("Refresh", "3;url='http://www.sina.com'");//隔三秒刷新一下资源,跳到新浪官网
//response.setHeader("Refresh", "3;url='http://www.sina.com'");//每隔三秒刷新一下资源,适用于股票页面,聊天页面
String data= "aaaaa";
response.getOutputStream().write(data.getBytes());
3.1.6Content-Disposition--->通过这个头,告诉浏览器下载方式打开数据
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("content-disposition", "attachment;filename=3.jpg");//通过这个头,告诉浏览器下载方式打开数据
InputStream in=this.getServletContext().getResourceAsStream("/1.jpg");//通过这个头,浏览器知道回送数据格式
int len=0;
byte buffer[] = new byte[1024];
OutputStream out=response.getOutputStream();
while((len=in.read(buffer))>0){
out.write(buffer,0,len );
}
}
下载方式打开
整个DEMO
package cn.itcaste.web.servlet; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class servelt
*/
@WebServlet("/servlet")
public class servlet extends HttpServlet {
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.getWriter().append("Served at: ").append(request.getContextPath()); } private void test5(HttpServletResponse response) throws IOException {
response.setHeader("content-disposition", "attachment;filename=3.jpg");//通过这个头,告诉浏览器下载方式打开数据
InputStream in=this.getServletContext().getResourceAsStream("/1.jpg");//通过这个头,浏览器知道回送数据格式
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'");//隔三秒刷新一下资源,跳到新浪官网
//response.setHeader("Refresh", "3;url='http://www.sina.com'");//每隔三秒刷新一下资源,适用于股票页面,聊天页面
String data= "aaaaa";
response.getOutputStream().write(data.getBytes());
} //解析不同类型的数据
private void test3(HttpServletResponse response) throws IOException {
response.setHeader("content-type", "image/jpeg");//格式去web.xml里找
InputStream in=this.getServletContext().getResourceAsStream("/1.jpg");//通过这个头,浏览器知道回送数据格式
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 test2(HttpServletResponse response) throws IOException {
String data ="aaaaaaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
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.getOutputStream().write(gzip);//压缩数据打给浏览器
//通知浏览器数据采用压缩格式
response.setHeader("Content-Encoding","gzip");
response.setHeader("Content-Length", gzip.length+"");
response.getOutputStream().write(gzip);
} //用302和location进行重定向
public void test1(HttpServletResponse response){
response.setStatus(302);
response.setHeader("location","/day04/WebContent/1.html");
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response);
} }
http协议----->请求头和响应头的更多相关文章
- Android系列之网络(二)----HTTP请求头与响应头
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- (二)----HTTP请求头与响应头
一.HTTP头引入: 正确的设置HTTP头部信息有助于搜索引擎判断网页及提升网站访问速度.通常HTTP消息包括:客户机向服务器的请求消息和服务器向客户机的响应消 息.客户端向服务器发送一个请求,请求头 ...
- Android Http请求头与响应头的学习
本节引言: 上节中我们对Android涉及的网络编程进行了了解,也学习了下Http的基本概念,而本节我们 要学习的是Http的请求头与响应头,当然,可以把也可以把这节看作文档,用到的时候来查查 即可! ...
- HTTP请求头与响应头(转载)
欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/400503 ...
- http请求头和响应头详细解释
想对http请求头和响应头有更细致的了解,请看如下 Requests部分 Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/htm ...
- Http消息头中常用的请求头和响应头
作为Web开发对常用http的请求头和响应头熟悉了解一下还是很有必要的.比如请求头中Content-type指定了请求的内容,若类型是application/x-www-form-urlencoded ...
- HTTP请求头与响应头
http://m.blog.csdn.net/article/details?id=48918857 本篇文章中,将学习一下HTTP请求头与响应头的知识. 一.HTTP头引入: 正确的设置HTTP头部 ...
- http header详解,HTTP头、请求头、响应头、实体头
Content-Language,Content-Length,Content-Type,Content-Encoding,mime分析 Accept 指定客户端能够接收的内容类型 Accept:te ...
- HTTP请求的基本概念 HTTP请求头和响应头的含义
1,HTTP请求的基本概念 TCP/UPD/HTTP *2,HTTP请求头和响应头的含义 请求头: Accept: text/html,image/*(浏览器可以接收的类型) Acc ...
- [面试没答上的问题1]http请求,请求头和响应头都有什么信息?
最近在找工作,面试官问了一些问题自己并没有回答上,这里做一个小结. http请求,请求头和响应头都有什么信息? 页面和服务器交互最常见的方式就是ajax,ajax简单来说是浏览器发送请求到服务端,然后 ...
随机推荐
- CYQ学习主要摘要
这个个人搞的框架不知道到底怎么样,做个项目测试下看看,本来想用EF的,大多数人说性能低,所以先放弃,试试这个,一些主要地方我做个摘录 5:多表怎么搞定? A:视图方式,将多表查询放到数据库里成视图,情 ...
- 推荐一个入门最佳Git教程
这是我最近发现的一个针对入门Git教程,浅显易懂,点到为止,很适合初学者及使用Git的爱好者,学完该教程应付开发工作绰绰有余. http://www.liaoxuefeng.com/wiki/0013 ...
- 对称加密算法-DES以及DESede算法
一.简述 对称加密算法就是能将数据加解密.加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密. DES是美国国家标准研究所提出的算法.因为加解密的数据安全性和密钥长度成正比.des ...
- c函数声明前加typedef是什么情况
刚才看到APUE(高级UNIX环境编程)里面的apue.h中有一行 typedef void Sigfunc(int); 没搞懂什么意思 其实就是定义一个函数指针类型,等价于 typedef void ...
- 一款基于jQuery外观优雅带遮罩弹出层对话框
今天我们要来分享一款基于jQuery的弹出层对话框插件,该插件包含多种对话框类型,比如提示框.确认框等.更为实用的是,这款jQuery对话框中的按钮事件也可以被我们所捕获,从而相应对话框按钮的各种事件 ...
- lua字符串对齐函数
最近要用到字符串对齐,开始只是一部分字符串,就直接加空格了,后来发现有很多, 于是写了个字符串对齐的函数. --功能:分割字符串 --参数:带分割字符串,分隔符 --返回:字符串表 function ...
- TVS二极管的主要参数与选型
TVS二极管的主要参数--转载 处理瞬时脉冲对器件损害的最好办法是将瞬时电流从敏感器件引开.TVS二极管在线路板上与被保护线路并联,当瞬时电压超过电路正常工作电压后,TVS二极管便发生雪崩,提供给瞬时 ...
- sql 追踪 神器
http://www.thinkphp.cn/download/690.html 一个中国人开发的php工具箱此工具能几秒钟追踪出sql 数据库操作, 能分析出 Thinkphp3.2 的任意sql ...
- 【SPOJ】8222. Substrings(后缀自动机)
http://www.spoj.com/problems/NSUBSTR/ 题意:给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值.求F(1)..F(Length(S)) 这题 ...
- noip2014滚粗记
滚粗了..伤心. day0:和baba一起去,但是整天都是下雨啊好不爽,鞋子都湿了啊好不爽,注定是要滚粗?在火车站等了1h后上动车走人...在此期间我还天真的认为火车站的wifi可以被我给破解然后上网 ...