HTTP协议格式介绍

来源:互联网 发布:crystal ball for mac 编辑:程序博客网 时间:2024/04/30 14:16

HTTP协议之URL篇

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,

绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:

http://host[":"port][abs_path]


http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;

abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

eg:

输入:www.csdn.net

浏览器自动转换成:http://www.csdn.net/


HTTP协议之请求篇

http请求由三部分组成,分别是:请求行、请求报头请求正文

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。

请求报头用于描述客户端请求哪台主机,以及客户端的一些环境信息等。

请求正文就是客户端发送给服务器的资源。


eg:


请求行中的GET称之为请求方法。


请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET   请求获取Request-URI所标识的资源。

POST   Request-URI所标识的资源后附加新的数据。

HEAD   请求获取由Request-URI所标识的资源的响应消息报头。

PUT   请求服务器存储一个资源,并用Request-URI作为其标识。

DELETE  请求服务器删除Request-URI所标识的资源。

TRACE  请求服务器回送收到的请求信息,主要用于测试或诊断。

CONNECT 保留将来使用。

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求。


常用的有: GET、 POST

用户如没有设置,默认情况下浏览器向服务器发送的都是get请求

例如,在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,

可通过更改表单的提交方式实现。


不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1

GET方式提交数据不能超过256个字符。若要提交大量的文本则要使用POST方式提交,但数据不在浏览器地址栏显示。

请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。



请求报头

允许客户端向服务器端传递请求的附加信息以及客户端自身的信息

常用的请求报头

Accept

Accept请求报头域,用于指定客户端接受哪些类型的信息

eg:

Accept:image/gif,表明客户端希望接受GIF图象格式的资源;

Accept:text/html,表明客户端希望接受html文本。

 

Accept-Charset

Accept-Charset请求报头域,用于指定客户端接受的字符集

eg:

Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

 

Accept-Encoding

Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码

eg:

Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。

 

Accept-Language

Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言

eg:

Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

 

If-Modified-Since: 用于告诉服务器,客户机对于资源的最后缓存时间


Connection:允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。


Authorization

Authorization请求报头域,主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),

可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

 

Host(发送请求时,该报头域是必需的)

Host请求报头域,主要用于指定被请求资源的Internet主机(服务器的主机)和端口号,它通常从HTTPURL中提取出来的,

eg:

我们在浏览器中输入:http://www.baidu.com/

浏览器发送的请求消息中,就会包含Host请求报头域,如下:

Host:www.baidu.com

此处使用缺省端口号80,若指定了端口号,则变成:Host:www.baidu.com:指定端口号。

 

Referer

客户机通过这个头告诉服务器,他是从哪个资源来访问服务器的(防盗链)。

 

Range

指示服务器只发送一部分web资源。可用来实现断点续传功能

eg:

conn.setRequestProperty("Range","bytes=500");              //传输最后500字节

conn.setRequestProperty("Range","bytes=500-1000");        //传输5001000范围的字节

conn.setRequestProperty("Range","bytes=1000-");           //传输1000字节以后的所有内容

 

User-Agent

我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,

实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。

User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的

如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。


Cookie:客户端通过这个头字段,可以带一些数据给服务器


HTTP协议之响应

HTTP响应也是由三个部分组成,分别是:状态行响应报头、响应正文

状态行
格式: HTTP版本号 状态码 原因叙述<CRLF>
举例:HTTP/1.1 200 OK


状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:

状态码

含义

100~199

表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200~299

表示成功接收请求并已完成整个处理过程,常用200

300~399

为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、307和304

400~499

客户端的请求有错误,常用404

500~599

服务器端出现错误,常用 500



响应报头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息对Request-URI所标识的资源进行下一步访问的信息

常用的响应报头

Location

Location响应报头域,用于重定向接受者到一个新的位置。Location响应报头域,配合302状态码,常用在更换域名的时候

 

Server

Server响应报头域,包含了服务器用来处理请求的软件信息,即服务器的类型。与User-Agent请求报头域是相对应的。

下面是Server响应报头域的一个例子:

Server:Apache-Coyote/1.1


WWW-Authenticate

WWW-Authenticate响应报头域,必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送。


Authorization 

Authorization报头域,请求服务器对其进行验证时,服务端响应报头就包含该报头域。

eg:

WWW-Authenticate:Basic realm="Basic AuthTest!"  //可以看出服务器对请求资源采用的是基本验证机制。

 

Content-Encoding

Content-Encoding实体报头域,被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码

因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法

eg:

Content-Encoding:gzip

 

Content-Language

Content-Language实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读者。

eg:

Content-Language:da

 

Content-Length

Content-Length实体报头域,用于指明实体正文的长度,以字节方式存储十进制数字来表示。

 

Content-Type

Content-Type实体报头域,用于指明发送给接收者的实体正文的媒体类型

eg:

Content-Type:text/html;charset=ISO-8859-1

Content-Type:text/html;charset=GB2312

 

Content-Disposition

告诉浏览器以下载的方式打开回送的数据。

 

Last-Modified

Last-Modified实体报头域,用于指示资源的最后修改日期和时间


Refresh

Refresh,服务器通过这个头告诉浏览器,多长时间定时刷新


Transfer-Encoding

Transfer-Encoding, 服务器通过这个头告诉浏览器,数据是以块方式回送的。

Date

Date普通报头域,表示消息产生的日期和时间


Cache-Control

用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),

HTTP1.0使用的类似的报头域为Pragma。不用于被传输的实体,只用于传输的消息。

请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;


Pragma: no-cache  


Expires

Expires实体报头域,给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。

eg:

Expires:Thu,15 Sep 2006 16:23:12 GMT

HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。

eg:

为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader("Expires","0");


以上三个头一起用,就可以控制所有的浏览器不要缓存数据










参考资料:

http://blog.csdn.net/gueter/article/details/1524447






0 0
原创粉丝点击