1.什么是http协议?
答:http协议是浏览器与web服务器之间交互的格式,了解http协议,就了解浏览器是怎样获取资源的。为了快速与web服务器取得联系可以通过windows的Telnet客户端程序获取连接。Telnet程序通过cmd运行。如果遇到Telnet不是内部命令的问题,就打开程序-----》打开或关闭windows功能-------》打开Telnet客户端功能,等待窗口关闭就OK了
效果图:
http协议是超文本传输协议,是tcp/ip协议的应用层协议,用于定义浏览器与服务器之间的交换数据的过程
2.小知识扩展
一个web资源里面有三个img,请问http请求几次才能加载完成?
答:4次。因为第一次请求服务器数据,当返回给浏览器数据时,浏览器解析HTML,再向服务器请求三次获取图片信息。
效果图:
在实际开发中,考虑到服务器性能问题,页面设计需要谨慎考虑。
3.http请求讲解
http请求分为请求行,请求头,实体内容。请求行包括http版本,请求方式,请求地址 Get /aa/1.html http/1.1
http请求方式get,post(常用的两种请求方式)两者的最大区别在于get传输数据是数据信息展示在地址栏上,相对post来说不安全。
重点讲解请求头。
accept:text/html ,image/* 表示浏览器支持HTML,图片形式的数据
accept-charset:表示告诉服务器浏览器支持的编码
accept-encoding 表示浏览器支持的压缩格式
accept-language 表示浏览器的语言环境
host 表示告诉服务器要访问的主机名
if-modified-since 表示缓存时间,当用户第二次访问同一网页时,服务器会比较用户传来的缓存时间和网页最后更新的时间,如果前者和后者没有变化,那就使用缓存,否则使用新的网页内容。
referer 表示浏览器告诉服务器,请求的来源(用于防盗链)
user-agent 表示浏览器告诉服务器,软件的环境
cookie 表示保存在浏览器的数据
connection :close/keep-alive 表示浏览器告诉服务器是否保持连接
date表示消息发送的时间,时间的描述格式由rfc822定义。
4.http响应讲解
http响应代表服务器向浏览器返回数据,它包括三部分 状态行,若干响应头,实体内容。
状态行 http/1.1 200 ok 表示服务器返回的请求的状态。 200 代表服务器接收请求,并完成处理。常用的状态码100-199:代表服务器接受请求,但未处理请求;302:代表服务器细化请求,给客户机一个新地址,等待访问新地址;304/307代表服务器告诉浏览器使用缓存。404/403代表服务器没有请求的资源/服务器有权限;500代表服务器端出现程序问题。
响应头讲解
location:和302状态使用,是客户机访问新url的值,用于实现重定向
例: response.serStart(302);response.setHeader("location","地址");
server:告诉浏览器,服务器的类型
content-encoding 表示数据的压缩格式
例:
String data="987个字节";
ByteArrayOutputstream b=new ByteArrayOutputstream();//缓冲流
gzipOutputstream gop=new gzipOutputstream(b);//压缩格式底层流
gop.write(data.getBytes());
gop.close();
Byte out[]=b.toByteArray();//得到压缩后的数据
//通知浏览器数据采用压缩格式
response.setHeader("content-encoding","gzip");
response.setHeader("content-length","out.length");
response.getoutputstream.write(out);
content-length:告诉浏览器服务器的返回数据的长度
content-type:告诉浏览器服务器返回的数据格式
例:response.setHeader("content-type","image/bmp");
InputStream in=this.getServletContext().getResourceAsStream("/1.bmp");
int length=0;
byte buffer[]=new byte[1024];
outputStream out=response.getoutputStream();
while((length=in.read(buffer))>0){out.write(buffer,0,length)}
last-Modified:服务器告诉浏览器网页最后的缓存时间
refresh:服务器告诉浏览器多久刷新一次
例: response.setHeader("refresh","3");//以秒为单位,刷新原网页
response.setHeader("refresh","3;url='www.sina.com'");//3秒之后,刷新到新浪首页
content-disposition:告诉浏览器,已下载的方式打开数据
例: response.setHeader("content-disposition","attachment;filename=3.jpg");
set-cookie
Etag 缓存项头的头。是一段编码,用来实时检测网页是否更新。
expires:用来告诉浏览器会送的资源缓存多长时间,-1和0则代表不缓存
cache-control:no-cache;
pragma:no-cache
这两个值代表任何浏览器不实现缓存。
http实现断点续传
请求头信息
Range断点下载(tomcat5以上的服务器支持,不包括5),Range头指示服务器只传输一部分web资源,这个头用来实现断点续传功能,Range字段可以通过三种格式设置要传输的字节范围
第一种:bytes=1000-2000(1000/2000只代表一个数,可以任意设置)代表传输范围1000-2000
第二种:bytes=1000- 代表1000字节以后的内容
第三种:bytes=1000 代表传输最后1000个字节
响应头信息
accept-Range:这个字段表示服务器是否支持Range,支持则返回butes,不支持则返回accpet-Range:none
content-Range:这个字段表示返回资源的字节范围,例子:content-Range:1000-3000/5000;代表资源范围1000-3000,最多5000