博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
http协议技术资料
阅读量:4069 次
发布时间:2019-05-25

本文共 15802 字,大约阅读时间需要 52 分钟。

<p>http协议中有关http头的技术资料:<br>   HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。<br>通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。<br>1、通用头域<br>通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。<br>Cache-Control头域<br>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。各个消息中的指令含义如下:<br>Public指示响应可被任何缓存区缓存。<br>Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。<br>no-cache指示请求或响应消息不能缓存<br>no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。<br>max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。<br>min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。<br>max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。<br>Date头域<br>Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。<br>Pragma头域<br>Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。<br>2、请求消息<br>请求消息的第一行为下面的格式:<br>Method SP Request-URI SP HTTP-Version CRLF <br>Method表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。<br>SP表示空格。<br>Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。<br>HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。<br>CRLF表示换行回车符。<br>请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。<br>典型的请求消息:<br>GEThttp://class/download.microtool.de:80/somedata.exe<br>Host:download.microtool.de<br>Accept:*/*<br>Pragma:no-cache<br>Cache-Control:no-cache<br>Referer:http://class/download.microtool.de/<br>User-Agent:Mozilla/4.04[en](Win95;I;Nav)<br>Range:bytes=554554-<br>上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。<br>Host头域<br>Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。<br>Referer头域<br>Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。<br>Range头域<br>Range头域可以请求实体的一个或者多个子范围。例如,<br>表示头500个字节:bytes=0-499<br>表示第二个500字节:bytes=500-999<br>表示最后500个字节:bytes=-500<br>表示500字节以后的范围:bytes=500-<br>第一个和最后一个字节:bytes=0-0,-1<br>同时指定几个范围:bytes=500-600,601-999<br>但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。<br>User-Agent头域<br>User-Agent头域的内容包含发出请求的用户信息。<br>3、响应消息<br>响应消息的第一行为下面的格式:<br>HTTP-Version SP Status-Code SP Reason-Phrase CRLF<br>HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。<br>Status-Code是一个三个数字的结果代码。<br>Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:<br>1xx:信息响应类,表示接收到请求并且继续处理<br>2xx:处理成功响应类,表示动作被成功接收、理解和接受<br>3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理<br>4xx:客户端错误,客户请求包含语法错误或者是不能正确执行<br>5xx:服务端错误,服务器不能正确执行一个正确的请求<br>响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。<br>典型的响应消息:<br>HTTP/1.0200OK<br>Date:Mon,31Dec200104:25:57GMT<br>Server:Apache/1.3.14(Unix)<br>Content-type:text/html<br>Last-modified:Tue,17Apr200106:46:28GMT<br>Etag:"a030f020ac7c01:1e9f"<br>Content-length:39725426<br>Content-range:bytes554554-40279979/40279980<br>上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。<br>Location响应头<br>Location响应头用于重定向接收者到一个新URI地址。<br>Server响应头<br>Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。<br>4、实体信息<br>请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。<br>Content-Type实体头<br>Content-Type 实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型Content-Range实体头<br>Content-Range实体头<br>用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:<br>Content-Range:bytes-unit SP first-byte-pos - last-byte-pos/entity-legth<br>例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。<br>Last-modified实体头<br>Last-modified实体头指定服务器上保存内容的最后修订时间。<br>5、 HTTP 头参考(microsoft)<br>HTTP 请求和 HTTP 响应都使用头发送有关 HTTP 消息的信息。头由一系列行组成,每行都包含名称,然后依次是冒号、空格、值。字段可按任何顺序排列。某些头字段既能用于请求头也能用于响应头,而另一些头字段只能用于其中之一。 <br>许多请求头字段都允许客户端在值部分指定多个可接受的选项,有时甚至可以对这些选项的首选项进行排名。多个项以逗号分隔。例如,客户端可以发送包含“Content-Encoding: gzip, compress,”的请求头,表示可以接受各种压缩类型。如果服务器的响应正文使用 gzip 编码,其响应头中将包含“Content-Encoding: gzip”。<br>有些字段可以在单个头中出现多次。例如,头可以有多个“Warning”字段。<br>下表列出了 HTTP 1.1 头字段。注意:有些头字段是 MIME 字段。MIME 字段在 Internet Engineering Task Force (IETF) 文档 RFC 2045 中进行了定义,但也可用于 HTTP 1.1 协议。有关 MIME 和 HTTP 1.1 规范的详细信息,请参阅 IEIF 页。<br>一般头字段<br>一般头字段可用于请求消息和响应消息。<br> 名称          示例值 <br>Cache-Control  "max-age=10" <br>Connection    "close" <br>Date          "Tue, 11 Jul 2000 18:23:51 GMT" <br>Pragma        "no-cache" <br>Trailer         "Date" <br>Transfer-Encoding "chunked" <br>Upgrade       "SHTTP/1.3" <br>Via            "HTTP/1.1 Proxy1, HTTP/1.1 Proxy2" <br>Warning       "112 Disconnected Operation" <br>请求头字段 <br>请求头字段仅用于请求消息。<br>   名称             示例值 <br>Accept           "text/html, image/*" <br>Accept-Charset   "iso8859-5" <br>Accept-Encoding  "gzip, compress" <br>Accept-Language "en, fr" <br>Authorization     [credentials] <br>Content-Encoding "gzip" <br>Expect           "100-continue" <br>From            "<a href="mailto:user@microsoft.com">user@microsoft.com</a>" <br>Host            "<a href="http://www.microsoft.com">www.microsoft.com</a>" <br>If-Match         "entity_tag001" <br>If-Modified-Since "Tue, 11 Jul 2000 18:23:51 GMT" <br>If-None-Match    "entity_tag001" <br>If-Range         "entity_tag001" or "Tue, 11 Jul 2000 18:23:51 GMT" <br>If-Unmodified-Since "Tue, 11 Jul 2000 18:23:51 GMT" <br>Max-Forwards    "3" <br>Proxy-Authorization [credentials] <br>Range       "bytes=100-599" <br>Referer      "<a href="http://www.microsoft.com/resources.asp">http://www.microsoft.com/resources.asp</a>" <br>TE          "trailers" <br>User-Agent   "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" <br>>>请求头字段的具体含义<br>Accept:浏览器可接受的MIME类型。 <br>Accept-Charset:浏览器可接受的字符集。 <br>Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。<br>Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 <br>Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。 <br>Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。<br>Content-Length:表示请求消息正文的长度。 <br>Cookie:设置cookie,这是最重要的请求头信息之一<br>From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 <br>Host:初始URL中的主机和端口。 <br>If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。 <br>Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。 <br>Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。 <br>User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。<br>UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。 <br>响应头字段 <br>响应头字段仅用于响应消息。<br>  名称          示例值 <br>Accept-Ranges  "none" <br>Age            "2147483648(2^31)" <br>ETag           "b38b9-17dd-367c5dcd" <br>Last-Modified    "Tue, 11 Jul 2000 18:23:51 GMT" <br>Location        "<a href="http://localhost/redirecttarget.asp">http://localhost/redirecttarget.asp</a>" <br>Proxy-Authenticate [challenge] <br>Retry-After      "Tue, 11 Jul 2000 18:23:51 GMT" or "60" <br>Server         "Microsoft-IIS/5.0" <br>Vary            "Date" <br>WWW-Authenticate [challenge] <br>实体头字段 <br>实体头字段可以用于请求消息或响应消息。实体头字段中包含消息实体正文的有关信息,如使用的编码格式。<br>   名称            示例值 <br>Allow              "GET, HEAD" <br>Content-Encoding   "gzip" <br>Content-Language  "en" <br>Content-Length     "8445" <br>Content-Location   "<a href="http://localhost/page.asp">http://localhost/page.asp</a>" <br>Content-MD5       [md5-digest] <br>Content-Range     "bytes 2543-4532/7898" <br>Content-Type      "text/html" <br>Expires           "Tue, 11 Jul 2000 18:23:51 GMT" <br>Last-Modified      "Tue, 11 Jul 2000 18:23:51 GMT" <br>>>实体头字段的具体含义<br>Allow 服务器支持哪些请求方法(如GET、POST等)。<br>Content-Encoding 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。<br>Content-Length 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。<br>Content-Type 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。<br>Date 当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。 <br>Expires 应该在什么时候认为文档已经过期,从而不再缓存它? <br>Last-Modified 文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。<br>Location 表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。 <br>Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。 <br>注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。 <br>注意Refresh的意义是“N秒之后刷新本页面或访问指定页面”,而不是“每隔N秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。 <br>注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。 <br>请求头示例<br>以下是 HTTP 请求的简单示例。<br>GET /articles/news/today.asp HTTP/1.1<br>Accept: */*<br>Accept-Language: en-us<br>Connection: Keep-Alive<br>Host: localhost<br>Referer: <a href="http://localhost/links.asp">http://localhost/links.asp</a><br>User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)<br>Accept-Encoding: gzip, deflate<br>该请求具有请求行,其中包括方法 (GET)、资源路径 (/articles/news/today.asp) 和 HTTP 版本 (HTTP/1.1)。由于该请求没有正文,故所有请求行后面的内容都是头的一部分。紧接着头之后是一个空行,表示头已结束。<br>响应头示例<br>Web 服务器可以通过多种方式响应前一个请求。假设文件是可以访问的,并且用户具有查看该文件的权限,则响应类似于:<br>HTTP/1.1 200 OK<br>Server: Microsoft-IIS/5.0<br>Date: Thu, 13 Jul 2000 05:46:53 GMT<br>Content-Length: 2291<br>Content-Type: text/html<br>Set-Cookie: ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ; path=/<br>Cache-control: private<br>...<br>响应的第一行称为状态行。它包含响应所用的 HTTP 版本、状态编码 (200) 和原因短语。示例中包含一个头,其中具有五个字段,接着是一个空行(回车和换行符),然后是响应正文的头两行。<br>有关HTTP头完整、详细的说明,请参见<a href="http://www.w3.org/Protocols/">http://www.w3.org/Protocols/</a>的HTTP规范。<br>附录:HTTP协议状态码的含义<br>  状态代码 状态信息 含义 <br>100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)<br>101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新<br>200 OK 一切正常,对GET和POST请求的应答文档跟在后面。<br>201 Created 服务器已经创建了文档,Location头给出了它的URL。<br>202 Accepted 已经接受请求,但处理尚未完成。 <br>203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。 <br>204 No Content 没有新文档,浏览器应该继续显示原来的文档。<br>205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。 <br>206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。 <br>300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。 <br>301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。 <br>302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求<a href="http://host/~user">http://host/~user</a>(缺少了后面的斜杠),有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。 <br>303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。 <br>304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。<br>305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。<br>307 Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。(HTTP 1.1新) <br>400 Bad Request 请求出现语法错误。 <br>401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。 <br>403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。 <br>404 Not Found 无法找到指定位置的资源。这也是一个常用的应答, <br>405 Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新) <br>406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。 <br>407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)<br>408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新) <br>409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)<br>410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)<br>411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)<br>412 Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。 <br>413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。 <br>414 Request URI Too Long URI太长(HTTP 1.1新)。 <br>416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新) <br>500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。 <br>501 Not Implemented 服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。<br>502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。 <br>503 Service Unavailable 服务器由于维护或者负载过重未能应答。<br>504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新) <br>505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)</p>
<p>----------------------------------------------------------------------------</p>
<p><br>个人认为随着web2.0从概念走向大量应用,网络应用将变的更加势不可挡。写web应用程序有2年多了,以前主要是在学校做一些原型系统,对http协议并没有深入的研究。最近的应用中需要区分http请求头中的GET,POST方法,花了点时间研究了一下,参考的主要资料是http协议的rfc文档,网址为<a href="http://www.cs.tut.fi/~jkorpela/forms/methods.html">http://www.cs.tut.fi/~jkorpela/forms/methods.html</a>。<br> 有网络编成经验的人都知道,在form的Method中,可以使用GET,PPOST。至于在什么场合该用什么,就我自己而言过去没有仔细斟酌过,都是看一时兴致。<br>GET和POST的本质区别是什么?<br> 使用GET,form中的数据将编码到url中,而使用POST的form中的数据则在http协议的header中传输。在使用上,当且仅当请求幂等(字面意思是请求任意次返回同样的结果,本质是请求本身不会改变服务器数据和状态)时使用GET,当请求会改变服务器数据或状态时(更新数据,上传文件),应该使用POST。<br>区别使用GET,POST意义何在?<br> 重复访问使用GET方法请求的页面,浏览器会使用缓存处理后续请求。使用POST方法的form提交时,浏览器机遇POST将产生永久改变的假设,将让用户进行提交确认。当编成人员正确的使用GET,POST后,浏览器会给出很好的缓存配合,时响应速度更快。<br>在form提交阶段的差别<br> form提交的第一步是创建数据集,并根据ENCTYPE对数据集进行编码。ENCTYPE有两个值:multipart/form-data,application/x-www-form-urlencoded(默认值),前者可同时用于GET,POST,后者只用于POST。然后进行数据传输--对于GET方法,数据集使用content type application/x-www-form-urlencoded编码并附在url后面,在这种模式下,数据严格限制为ASCII码;对于POST,使用content type编码字符集并将其构造成消息发送。<br>在服务器处理部分的差别<br> 原则上,处理GET和POST请求是没有分别的。但由于数据通过不同的方法编码,需要有不同的解码机制。所以,方法变化将导致处理请求的代码变化。比如对于cgi,处理GET时通过环境变量获得参数,处理POST请求时则通过标准输入(stdin) 获得数据。</p>
<p>从使用经验,我们有如下总结:<br>1、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。<br>2、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。<br>3、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。<br>4、get安全性非常低,post安全性较高。<br>5、<form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一样的,也就是说,action页面后边带的参数列表会被忽视;而<form method="post" action="a.asp?b=b">跟<form method="post" action="a.asp">是不一样的。</p>

转载地址:http://ebaji.baihongyu.com/

你可能感兴趣的文章
linux串口操作及设置详解
查看>>
安装alien,DEB与RPM互换
查看>>
linux系统下怎么安装.deb文件?
查看>>
make clean、 make mrproper、make distclean的区别
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>
linux环境下C语言中sleep的问题
查看>>
ubuntu 12.04 安装 GMA3650驱动
查看>>
新版本的linux如何生成xorg.conf
查看>>
xorg.conf的编写
查看>>
启用SELinux时遇到的问题
查看>>
virbr0 虚拟网卡卸载方法
查看>>
No devices detected. Fatal server error: no screens found
查看>>
新版本的linux如何生成xorg.conf
查看>>
virbr0 虚拟网卡卸载方法
查看>>
Centos 6.0_x86-64 终于成功安装官方显卡驱动
查看>>
Linux基础教程:CentOS卸载KDE桌面
查看>>
project web_performance
查看>>
OS + Linux Fedora 15 / 16 / 17 / 18 / 19
查看>>
js calendar / wannianli
查看>>