yifangzhuhou

导航

今日刷题总结14

http协议

(1)URL(universal resource locator,统一资源定位器)

URL用于标识因特网上的资源位置并给出访问这些资源的方法。由于访问不同资源对象需要的协议不同,URL指出了访问某个资源对象时需要用到的协议,其一般格式为:

<协议>://<主机名>:<端口>/<路径>

最左边的<协议>指出使用什么协议来获取万维网文档。一般最常用的协议是http,而HTTP URL的一般格式如下:

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

http表示要通过HTTP协议来定位网络资源,host表示合法的Internet主机域名或IP地址,port指定一个端口号,为空则使用默认端口80,abs_path指定请求资源的URI,如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。例如http://www.scut.edu.cn会转换成http://www.scut.edu.cn/,此时URL指向了服务器的主页(home page)。

(2)http请求报文

http报文使用tcp协议传送,在客户端和服务器端建立tcp连接后,http客户端向服务器端发送http请求报文。请求报文由3个部分依次组成:请求行,请求消息报头和请求正文,如下图所示:

(图与说明有部分不符)

请求行的格式如下:

Method Request-URI HTTP-Version (CRLF)

其中Method表示请求方法,Request-URI表示统一资源标识符,HTTP-Version表示请求的http协议版本,CRLF表示回车换行。请求方法如下:

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

POST——向Request-URI标识的资源后添加新数据。

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

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

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

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

CONNECT——保留将来使用。

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

 例如,在浏览器地址栏输入URL访问网页时,浏览器就使用GET方法获取服务器资源。

GET /index.html HTTP/1.1

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

POST /register.jsp HTTP/ (CRLF)

Accept:image/gif,image/x-xbit,... (CRLF)

...

HOST:www.scut.edu.cn (CRLF)

Content-Length:22 (CRLF)

Connection:Keep-Alive (CRLF)

Cache-Control:no-cache (CRLF)

(CRLF)         //该CRLF表示消息报头已经结束,在此之前为消息报头

user=jeffrey&pwd=1234  //此行以下为提交的数据

HEAD方法跟GET方法相同,只不过服务器响应时不会返回响应正文(只有响应行与响应消息报头)。这种方法可以用来获取请求中隐含的元信息,而不用传输实体本身。也经常用来测试超链接的有效性、可用性和最近的修改。

请求报头在(4)中叙述。请求正文略。

(3)http响应报文

http服务器端接收到请求后,发送一个响应报文,报文的格式与请求报文相似,由响应行、响应消息报头和响应正文3个部分依次构成。响应行的格式如下:

HTTP-Version Status-Code Reason-Phrase (CRLF)

其中HTTP-Version表示服务器支持的HTTP协议版本,Status-Code表示响应状态码,Reason-Phrase是对状态码的简短说明。

状态码有5种,分别为:

1xx(临时响应)——表示请求已接收并需要请求者继续执行操作。

2xx(成功)——表示成功处理了请求。

3xx(重定向)——表示要完成请求需要进一步操作。

4xx(请求错误)——表示请求可能出错,妨碍了服务器的处理。

5xx(服务器错误)——表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

常见的状态码有:

200 OK——客户端请求成功。

400 Bad Request——客户端请求有语法错误,不能被服务器理解。

401 Unauthorized——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 

403 Forbidden——服务器收到请求,但是拒绝提供服务。

404 Not Found——请求的资源不存在,比如输入了错误的URL。

500 Internal Server Error——服务器发生不可预期的错误。

503 Server Unavaliable——服务器当前不能处理客户端的请求,需要过一段时间才能。

响应报头在(4)中叙述。响应正文就是服务器返回的资源内容。

(4)消息报头

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。

a)普通消息报头

在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。例如Cache-Control用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。

请求时的缓存指令包括: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、s-maxage.

比如为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:response.sehHeader("Cache-Control","no-cache")。这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache。

Date普通报头域表示消息产生的日期和时间。Connection普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。

b)请求消息报头

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

常用的请求报头如下:

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.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

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

Host——Host请求报头域在发送请求时是必需的,主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,例如在浏览器中输入:http://www.scut.edu.cn/index.html,浏览器发送的请求消息中,就会包含Host请求报头域Host:www.scut.edu.cn,此处使用缺省端口号80,若指定了端口号,则变成:Host:www.scut.edu.cn:指定端口号。

User-Agent——上网登陆论坛的时候往往会看到一些欢迎信息,其中列出了客户端操作系统的名称和版本以及使用的浏览器的名称和版本。实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的。

请求消息报头示例:

GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2017 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

c)响应消息报头

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

Location——Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。

Server——Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的,例如Server:Apache-Coyote/1.1。

WWW-Authenticate——WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。例如WWW-Authenticate:Basic realm="Basic Auth Test!"  //可以看出服务器对请求资源采用的是基本验证机制。

d)实体报头

请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(比如有无实体正文)和请求所标识的资源的元信息。

常用的实体报头如下:

Content-Encoding——Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法,例如Content-Encoding:gzip

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

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

Content-Type——Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。例如Content-Type:text/html;charset=ISO-8859-1和Content-Type:text/html;charset=GB2312

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

Expires——Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。例如Expires:Thu,15 Sep 2006 16:23:12 GMT。HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader("Expires","0");

参考http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

 

posted on 2017-08-19 17:17  yifangzhuhou  阅读(243)  评论(0编辑  收藏  举报