Http协议初级篇

1. 概念

HTTP是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,其发展是 万维网协会(World Wide Web Consortium)和Internet工作小组(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,其中最著名的就是RFC1945和RFC 2616,即Http1.0和Http1.1。

2. 协议基础

http是一个应用层无状态协议。有时承载于SSL、TLS协议层之上,就成为https,即http安全版。
 

 

http采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

3. 工作原理

一次http操作称为一个事务,其工程过程可分为四步:

(1)客户端向服务端发起请求,建立连接。

(2)连接建立后,客户端发送一个请求访问服务器资源。其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

(3)服务器接到请求后,给予响应,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

(4)客户端接收服务器返回的信息,通过浏览器显示出来,然后断开与服务器的连接。

http通讯是可靠的信息传输,以上过程任一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由 HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

4. 协议结构

通常HTTP消息包括客户机向服务器的Request消息和服务器向客户机的Response消息。

4.1 协议格式

Request报文格式如下:
请求行

通用信息头|请求头|实体头

CRLF(回车换行)

报文主体

    其中,请求行 = 方法[空格]请求URI[空格]版本号[回车换行], 如:GET / HTTP/1.1

Request报文实例:

Response报文格式如下:

 

状态行

通用信息头|响应头|实体头

 

CRLF

报文主体

    其中:状态行 = 版本号 [空格 ]状态码 [空格 ]原因 [回车换行 ],如:HTTP/1.1 200 OK

 

Response报文实例:

4.2 通用头域

通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer- Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。

host头域:指定请求资源的 Intenet主机和端口号,必须表示请求 url的原始服务器或网关的位置。

User-Agent头域:发出请求的用户信息。

4.3请求头

  • Accept:客户端浏览器可接收的MIME类型。
  • Accept-Charset:浏览器可接受的字符集;
  • Accept-Encoding:浏览器能够进行解码的数据编码方式,比如 gzip。 Servlet能够向支持 gzip的浏览器返回经 gzip编码的 HTML页面。许多情形下这可以减少 5到 10倍的下载时间;
  • Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到;
  • Authorization:授权信息,通常出现在对服务器发送的 WWW-Authenticate头的应答中;
  •   Connection:表示是否需要持久连接。如果 Servlet看到这里的值为 “Keep-Alive”,或者看到请求使用的是 HTTP 1.1( HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如 Applet,图片),显著地减少下载所需要的时间。要实现这一点, Servlet需要在应答中发送一个 Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小;
  • Content-Length:表示请求消息正文的长度;
  • Cookie:这是最重要的请求头信息之一;
  • From:请求发送者的 email地址,由一些特殊的 Web客户程序使用,浏览器不会用到它;
  • Host:初始 URL中的主机和端口;
  • If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回 304“Not Modified”应答;
  •   Pragma:指定 “no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝;
  • Referer:包含一个 URL,用户从该 URL代表的页面出发访问当前请求的页面。    

4.4 实体头

实体头用坐实体内容的元信息,描述了实体内容的属性,包括实体信息类型,长度,压缩方法,最后一次修改时间,数据有效性等。

  • Allow: GET,POST
  • Content-Encoding:文档的编码( Encode)方法,例如: gzip;
  • Content-Language:内容的语言类型,例如: zh-cn;
  • Content-Length:表示内容长度;
  • Content-Location:表示客户应当到哪里去提取文档,例如: http://www.dfdf.org/dfdf.html
  • Content-MD5: MD5 实体的一种 MD5摘要,用作校验和。发送方和接受方都计算 MD5摘要,接受方将其计算的值与此头标中传递的值进行比较 ;
  • Content-Range:随部分实体一同发送;标明被插入字节的低位与高位字节偏移,也标明此实体的总长度。 Eg1: Content-Range: 1001-2000/5000, eg2: bytes 2543-4532/7898
  • Content-Type:标明发送或者接收的实体的 MIME类型。 Eg: text/html; charset=GB2312;
  • Expires:为 0证明不缓存;
  • Last-Modified: WEB 服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。例如: Last-Modified: Tue, 06 May 2008 02:42:43 GMT.

参考资料:

1. 《http_百度百科》http://baike.baidu.com/view/9472.htm

2.  《http协议学习和总结系列》http://www.blogjava.net/amigoxie/archive/2009/11/30/304317.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值