您的位置:首页 > 理论基础 > 计算机网络

HTTP协议简述

2009-01-09 22:51 323 查看


原创文章,转载请注明出处:http://blog.csdn.net/wind5shy/article/details/3743020

(By wind5shy:http://blog.csdn.net/wind5shy)
概述
HTTP:超文本传输协议(Hypertext
Transfer Protocol)。

l 基于应用层的协议,在上网浏览网页的时候,浏览器和web服务器之间通过HTTPInternet上进行数据的发送和接收。

l 基于请求/响应模式的、无状态的协议。

浏览器与服务器通信过程:
1、 客户发起连接
2、 客户发送请求
3、 服务器响应请求
4、 服务器关闭连接
持续连接:HTTP1.1机制,浏览器建立连接后一直保持连接,可以持续发送请求并得到回应;也可以连续发送多个请求而不用等待每一个响应。
By wind5shy:http://blog.csdn.net/wind5shy)
HTTP URL
URL里包含了查找某个资源的路径,给出某URL,浏览器等就可以根据这个URL去找相应的资源。
格式:http://host[“:”port][abs_path]
host:Internet主机域名或IP地址。
port:端口号,拥有被请求资源的服务器主机监听该端口的TCP连接,为空或没有给出为默认的80。
abs_path:请求资源的URI(Uniform
Resource Identifier,统一资源标识符),即资源在服务器上的相对路径。如没有,则URL最后添加/。
一个例子:我们在浏览器地址中输入www.csdn.net,浏览器自动转换为http://www.csdn.net/,这里www.csdn.net为主机域名,端口未给出则为默认的80,abs_path也未给出,则最后添加/。若例子为http://
www.csdn.net/index.html,abs_path为/
index.html。

HTTP消息:由HTTP请求和HTTP响应组成,由开始行(HTTP请求为请求行,HTTP响应为状态行)、消息报头(可选)、空行(只有CRLF)、消息正文组成。
By wind5shy:http://blog.csdn.net/wind5shy)
HTTP请求
客户端通过HTTP请求向服务器请求对资源的访问。
请求行:
格式:Method Request-URI HTTP-Version (CRLF)(可选)
Method:请求方法。
Request-URI:资源在主机上的路径。
HTTP-Version:HTTP协议版本。
CRLF:CR=回车,LF=换行。
以上各部分以空格分隔,中间不允许出现CR或LF。
例子:GET /index.jsp HTTP1.1
请求正文:用户提交的数据。

请求方法:
GET:请求获取由Request-URI所指定的资源。
我们在浏览器地址栏中输入网址访问网页的时候浏览器就采用GET方法向服务器获取资源(就是网页)。
POST:在Request-URI所指定的资源后添加数据。
我们在网页中查询时,填入查询条件再点“查询”等按钮浏览器就用POST方法向服务器提交查询条件中的数据。
HEAD:请求获取由Request-URI所指定的资源的响应消息报头。
HEAD的回应部分的HTTP头部中包含的信息与GET相同。常被用来测试超链接的有效性与是否被更新等。
PUT:请求服务器储存一个资源,用Request-URI作为其访问路径。
DELETE:请求服务器删除由Request-URI所指定的资源。
TRACE:请求服务器回收抽动的请求信息,注意用于测试或诊断。
OPTIONS:请求查询服务器的性能或查询与资源相关的选项和需求。
By wind5shy:http://blog.csdn.net/wind5shy)
HTTP响应
在接受和接受请求消息后,服务器会返回一个HTTP响应消息。
状态行:
格式:HTTP-Version Status-Code Reason-Phrase (CRLF)(可选)
HTTP-Version:HTTP协议版本。
Status-Code:服务器发回的响应状态码元,由3位数字组成,表示请求是否被理解或被满足,主要用于机器自动识别。
Reason-Phrase:原因分析,状态码元的文本描述,用于帮助用户理解。
CRLF:CR=回车,LF=换行。
以上各部分以空格分隔,中间不允许出现CR或LF。
例子: HTTP1.1 200 OK (CRLF)
状态码元:
第一个数字定义响应的类别,可能取5个不同的值,后两个数字没有分类的作用:
1xx:信息响应类,表示接收到请求并且继续处理。
2xx:处理成功响应类,表示动作被成功接收、理解和接受。
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理。
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行。
5xx:服务端错误,服务器不能正确执行一个正确的请求。
请求正文:服务器返回的请求资源的内容。

HTTP消息报头:包括通用报头、请求报头、响应报头、实体报头。
报头域格式:name: value
name:报头域名字,大小写不敏感。
value:报头域值。
注意:“:”后有空格
例子:Host: download.microtool.de
By wind5shy:http://blog.csdn.net/wind5shy)
通用报头
在请求和响应消息中都支持,但不用与传输的实体,只用于传输的消息。通用报头包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用报头的扩展要求通讯双方都支持此扩展,如果存在不支持的通用报头,一般将会作为实体报头处理。
Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Date:表示消息发送的时间,时间的描述格式由rfc822定义。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
例子:Date: Mon,31Dec200104:25:57GMT。
Connection:允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。
Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
By wind5shy:http://blog.csdn.net/wind5shy)
请求报头
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
Accept:用于指定客户端可接受信息的类型。例如Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。
Accept-Charset:用于指定客户端接受的字符集。如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
例子:Accept-Charset: iso-8859-1,gb2312。
Accept-Encoding:用于指定客户端可接受的内容编码。如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
例子:Accept-Encoding: gzip.deflate。
Accept-Language:用于指定客户端可接受的语言。如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
例子:Accept-Language: zh-cn。
Authorization:用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization报头的请求,要求服务器对其进行验证。
Host:用于指定被请求资源的Internet主机和端口号,必须表示请求URL的原始服务器或网关的位置,通常是从HTTP
URL中提取出来的。
HTTP/1.1请求必须包含主机报头,否则系统会以400状态码返回。
例子:
在浏览器中输入:www.csdn.net
浏览器发送的请求消息中,就会包含Host请求报报头,如下:
Host:http://
www.csdn.net,此处使用缺省端口号80,若指定了端口号,则变成:Host:http://
www.csdn.net:指定端口号
User-Agent:允许客户端将它的操作系统、浏览器和其它属性告诉服务器。
我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个报头域中获取到这些信息。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent报头域,那么服务器端就无法得知我们的信息了。
Referer:允许客户端指定请求URI的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等;也允许废除的或错误的连接由于维护的目的被追踪。如果请求的URI没有自己的URI地址,Referer不能被发送。如果指定的是部分URI地址,则此地址应该是一个相对地址。
By wind5shy:http://blog.csdn.net/wind5shy)
响应报头
允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
Location:用于重定向接受者到一个新的位置,例如:客户端所请求的页面不在原先的位置,服务器端可以发回Location报头域使客户端重定向到这个页面的新位置,也长用在更换域名的时候。
Server:包含了服务器用来处理请求的软件信息,与User-Agent报头域相对应。
例子:Server:Apache-Coyote/1.1
WWW-Authenticate:必须被包含在401(未授权的)响应消息中,该报头域和Authorization报头域相关,客户端收到401响应消息时候,若决定请求服务器对其进行验证,就需发送一个包含Authorization报头域的请求。
例子:
WWW-Authenticate: Basic realm="Basic Auth Test!" //可以看出服务器对请求资源采用的是基本验证机制。

实体报头
请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,大多数情况下实体正文就是请求消息中的请求正文或响应消息中的响应正文,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(比如有无实体正文)和请求所标识的资源的元信息。
实体好像我们写的书信,在信中,我们可以写上标题,加上页号,这部分就相当于实体报头域;书信的内容就相当于实体正文;通用报头、请求报头、响应报头分别对应于信封上的邮编、收信人、寄信人。
Content-Encoding:用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding主要用于记录文档压缩的方法。如果一个实体正文采用了编码方式储存,在使用之前必须进行解码。
例子:Content-Encoding:
gzip
Content-Language:描述资源所用的语言,允许用户遵照自身的首选语言来识别和区分实体,没有设置该域则认为实体内容将提供给所有的语言阅读者。
例子:Content-Language: da
Content-Length:用于指明实体正文的长度,不包括实体报文;以字节方式存储的十进制数字来表示,即一个数字字符占一个字节,用其对应的ASCII码储存传输。
Content-Type:指明发送给接收者的实体正文的媒体类型。
例子:Content-Type: text/html;charset=ISO-8859-1
Content-Type: text/html;charset=GB2312
Last-Modified:用于指示资源的最后修改日期和时间。
Expires:给出响应过期的日期和时间。通常,代理服务器或浏览器会缓存一些页面供用户再次访问以缩短响应时间和降低服务器负载。为了让代理服务器或浏览器在一段时间以后更新缓存中的页面,我们可以使用Expires实体报头域指定页面过期的时间。当用户访问页面时若Expires报头域给出的时间比Date报头域给出的时间早或相同,则代理服务器或浏览器从服务器上请求更新的页面而不使用缓存中的页面。需要注意的是,页面过期并不意味着服务器上的原始资源就发生了改变。
例子:Expires:Thu,15
Sep 2006 16:23:12 GMT
HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。例如为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,JSP中程序如下:response.setDateHeader("Expires",0);
By wind5shy:http://blog.csdn.net/wind5shy)
(By wind5shy:http://blog.csdn.net/wind5shy)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: