http协议

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值