四、http请求、响应详情
来源:互联网 发布:松下程控交换机软件 编辑:程序博客网 时间:2024/05/14 14:34
一、http请求详情
(一)http请求概述
- 客户端连上服务器后,向服务器请求某个web资源,称之为客户端像服务器发送了一个http请求。
- 一个完整的http协议包括如下内容:
一个请求行、若干消息头以及实体内容,其中一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。格式如下:
(二)http请求细节——请求行
请求行
- 格式:请求方式 资源路径 HTTP版本号
- 举例:GET /mail/1.html HTTP/1.1
- 请求方式:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
- 用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如果想把请求方式改为Post,可以通过改变表单的提交方式实现。
- 不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上。
GET方式
- 如请求方式为get方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔。例如:
- GET /mail/1.html?name=abc&password=xyz HTTP/1.1
- GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量不能超过1K。
POST方式
- 如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。
(三)http请求细节——请求头详解
1、请求头字段用于客户端在请求消息中向服务器传递附加信息,主要包括客户端可以接受的数据类型、压缩方法、语言以及发出请求的超链接所属页面的URL地址等信息。
2、常用请求头
(四)实验
IE浏览器+HttpWatch Professional插件,可以很方便的抓包观察http请求。下面实验就是用的这个方式。
1、观察GET请求
<form action="/1.html" method="get"> <input name="username" type="text"/> <input type="submit" value="submit"/></form>
2、观察post请求
<<form action="/1.html" method="post"> <input name="username" type="text"/> <input type="submit" value="submit"/></form>
二、http响应详情
(一)http响应概述
一个http响应代表服务器向客户端回送的数据,它包括
一个状态行、若干消息头、一个空行、实体内容,其中一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。格式如下:
(二)http响应细节——状态行
状态行
- 格式:HTTP版本号 状态码 原因叙述
- 举例:HTTP/1.1 200 OK
状态码
状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码分为五类,使用最高位为1到5来进行分类,如下所示:
常用状态码
(二)http响应细节——响应头详解
三、缓存和断点续传
(一)缓存相关消息头:
(二)断点续传消息头:
bytes=1000-2000:传输范围从1000到2000字节。
bytes=1000-:传输Web资源中第1000个字节及其以后的所有内容。
bytes=1000:传输最后1000个字节 Accept-Ranges 响应头 说明服务器是否支持Range,以及支持的Range单位。
bytes:支持Range且单位为字节
none:不支持Range。 Content-Range 响应头 指定了返回的web资源的字节范围,例子:
1000-3000/5000:表示返回Web资源的第1000到3000个字节的内容,该资源总长度为5000字节。
四、小实验
1、重定向
response.setStatus(302);// "/"代表从主机开始,不加"/"表示从当前web应用开始response.setHeader("Location", "index.html");
2、数据压缩(content-encoding,content-length)
String data="12345 54321 上山打老虎";ByteArrayOutputStream bOut=new ByteArrayOutputStream();GZIPOutputStream gzipOut=new GZIPOutputStream(bOut);gzipOut.write(data.getBytes());gzipOut.close();byte[] gzip=bOut.toByteArray();response.setHeader("Content-Encoding", "gzip");response.setHeader("content-length", gzip.length+"");response.getOutputStream().write(gzip);
3、显示图片(content-type),tomcat的web.xml可以查到文件类型的写法
response.setHeader("content-type", "image/jpeg");InputStream in=this.getServletContext().getResourceAsStream("/1.jpg");OutputStream out=response.getOutputStream();byte buf[]=new byte[1024];int len=0;while((len=in.read(buf))>0){ out.write(buf,0,len);}
4、定时刷新页面(refresh)
response.setHeader("refresh", "3;url=index.html");response.getWriter().write("aaaa");
5、下载文件(content-disposition)
response.setHeader("content-disposition", "attachment;filename=1.jpg");InputStream in=this.getServletContext().getResourceAsStream("/1.jpg");OutputStream out=response.getOutputStream();byte buf[]=new byte[1024];int len=0;while((len=in.read(buf))>0){ out.write(buf,0,len);}
6、断点续传(range)
URL url=new URL("http://localhost:8080/WebDemo1/abc.txt");HttpURLConnection connection=(HttpURLConnection) url.openConnection();connection.addRequestProperty("Range", "bytes=6-");InputStream in=connection.getInputStream();FileOutputStream out=new FileOutputStream("D:\\abc.txt", true);byte[] buf=new byte[1024];int len=0;while ((len=in.read(buf))>0) { out.write(buf, 0, len);}in.close();out.close();
阅读全文
0 0
- 四、http请求、响应详情
- chrome 查看HTTP请求详情
- SpringMVC之http请求头和响应头(四)
- HTTP请求/响应分析
- HTTP请求响应机制
- HTTP请求和响应。
- http 请求响应码
- Http请求/响应头
- http请求,响应
- HTTP请求响应形式
- HTTP请求响应机制 .
- http请求与响应
- Http请求和响应
- HTTP请求&响应字段
- HTTP请求和响应
- http请求响应模型
- HTTP请求和响应
- http请求响应模型
- POJ 3041 Asteroids / UESTC 253 Asteroids
- Linux C 多线程编程
- oracle创建数据库,创建表空间,创建用户,为用户授权
- 基于IBM Bluemix的Docker实践教程
- BZOJ1087: [SCOI2005]互不侵犯King 题解【DP】【状压】
- 四、http请求、响应详情
- 1029. Median (25)
- javaSE_8系列博客——重要的基础Java类——Excavations(异常处理机制)--3--捕捉异常或指定要求
- Eclipse安装配置C/C++开发环境
- Android App整体架构设计的思考
- 数据结构——头插法创建链表
- css动画之transition
- 西门子PLC S7-200的程序结构
- JAVA中的接口和抽象类