Http协议详解

Http1.0:规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户机,也不记录过去的请求。

缺点:每次请求和响应都需要建立一个单独的连接,上一次和下一次请求完全分离,若一张页面中包含多个图片网页文件,则需要与Web服务器建立多次连接。会严重影响客户机和服务器的性能,每次建立和关闭连接也是一个相对比较费时的过程。

Http1.1:支持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。

优点:允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,


Http的请求方式:POST、HEAD(回送消息头,不回实体内容)、OPTIONS(返回支持的请求方式)、DELETE、TRACE和PUT(上传一个文件),名称全部大写。


Http响应状态码(常用):

*200(正常):表示一切正常,返回的是正常请求结果。

*206(部分内容):客户端发送了一个带有Range头(要求服务器只返回文档中的部分内容)的GET请求,服务器按要求完成了这个请求。(用于断点续传)

*302/307(临时重定向):指出被请求的文档已经被临时移动到别处,此文档的新URL在Location响应头中给出。

*304(未修改):表示客户机缓存的版本是最新的,客户机应该继续使用它。

*401(未经授权):表示客户机访问的是一个受口令和密码保护的页面,结合使用一个WWW-Authenticate响应头提示客户机应重新发出一个带有Authorization头的请求消息。

*404(找不到):服务器上不存在客户机所请求的资源。

*500(服务器内部错误):服务器端的CGI、ASP、JSP等程序发生错误。

Http的通用信息头(请求消息和响应消息都能用):

*Cache-Control:no-cache(不缓存)

*Pragma:no-cache(不缓存)

*Expires: -1(不缓存)  一般都是三个一起用!

*Connection:close或Keep-Alive(表示发送此请求后是否关闭连接,1.1默认为后者)

*Transfer-Encoding:chunked(表示回送的数据需要分成几块传输)

请求头:

*Accept-Encoding:gzip,compress(告诉服务器,客户端可以用什么压缩方式解码)

*Accept-Language:zh-cn,en-gb(告诉服务器,客户端优先接收什么语言的页面)

*Referer:http://www.baidu.com(表示当前页面是从哪个页面跳转过来的)

*Location:http://www.wow.com(表示重定向到哪个页面,地址是在Location头中说明)

*Content-Range:bytes 2543-4532/7898(表示当前页面的字节数在2543-4532之间,总共有7898字节,用于断点续传)

*Content-Type:text/html;charset=GB2312

在tomcat\conf\web.xml中,可以设置文件后缀名对应的打开方式

<mime-mapping>
        <extension>xxc</extension>
        <mime-type>audio/x-mpeg</mime-type>
</mime-mapping>
例如上面配置,当访问到服务器上后缀名为xxc的文件时,服务器会告诉浏览器用音乐播放器来打开这个文件。

*Last-Modified: Tue, 23 Apr 2013 14:05:59 GMT(表示当前访问的文件,最后修改时间)

*Expires:Tue, 23 Apr 2013 14:05:59 GMT(表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的
效果。但是如果同时存在,则被Cache-Control的max-age覆盖。如果等于-1表示立刻发请求,这也是不缓存三个消息头其中之一。
)

*Refresh:1(表示1秒钟刷新一次页面)服务器端代码如下:

response.addHeader("refresh","5;url=http://www.baidu.com");

表示5秒钟后跳转到百度页面,如果第二个参数只写5,不跟url则表示每过5秒刷新当前页面。


tomcat下载中文乱码解决办法:

首先需要明确一点,在消息头中只能出现英文字符,不能出现中文字符。如果要用到中文,就必须进行URL编码。

response.addHeader("Content-Type","application/octect-stream");
response.addHeader("Content-Disposition","attachment;filename='"+java.net.URLEncoder.encode("中文.zip","UTF-8")+"'");
java.net.URLEncoder.encode("中文.zip","UTF-8")表示,对第一个参数(即中文字符)在内存中的二进制数据进行UTF-8编码。[这种方式要比new String("中文.zip".getBytes("ISO-8859-1"),"utf-8")直接的多!]

静态下载

<a href="中文.zip">中文.zip</a>
当用以上这种方式下载的时候,通过HttpWatch可看到,当点击超链接的时候,虽然会跳转到http://localhost:9090/XXX/中文.zip,但是实际提交给服务器的请求url为%E4%B8%AD%E6%96%87.zip,所以说页面会报404错误。

解决办法:修改在tomcat下的conf文件夹下的server.xml文件,在下面代码中加入URIEncoding="UTF-8",表示服务器在解码%E4%B8%AD%E6%96%87这段字符的时候应该用UTF-8形式解码。

  <Connector port="9090" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />


URL提交的参数W3C是没有明确规定长度的,而是取决于浏览器的限制。

当客户端提交的数据会改变服务器上的数据的时候,需要用POST提交。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值