http目录[隐藏]
定义
HTTP概述
HTTP是什么?
HTTP是怎样工做的
HTTP的含义及其做用
http协议基础
http协议结构
HTTP错误代码详细介绍
协议版本号 定义
HTTP概述
HTTP是什么?
HTTP是怎样工做的
HTTP的含义及其做用
http协议基础
http协议结构
HTTP错误代码详细介绍
协议版本号
[编辑本段]定义
HTTP:是Hypertext Transfer Protocol(超文本传输协议)的英文简称,而中文简称为“超文传协”。
[编辑本段]HTTP概述
HTTP的发展是万维网协会(World Wide Web Consortium)和Internet工做小组(Internet Engineering Task Force)合做的结果,(他们)最终发布了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定义了HTTP协议的咱们今天广泛使用的一个版本——HTTP 1.1。
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。经过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(咱们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,好比HTML文件和图像。(咱们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,好比代理,网关,或者隧道(tunnels)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并无规定必须使用它和(基于)它支持的层。 事实上,HTTP能够在任何其余互联网协议上,或者在其余网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何可以提供这种保证的协议均可以被其使用。
一般,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP链接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,好比"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体多是请求的文件、错误消息、或者其它一些信息。
HTTP使用TCP而不是UDP的缘由在于(打开一个)一个网页必须传送不少数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。
经过HTTP或者HTTPS协议请求的资源由统一资源标示符(Uniform Resource Identifiers)(或者,更准确一些,URLs)来标识。
[编辑本段]HTTP是什么?
当咱们想浏览一个网站的时候,只要在浏览器的地址栏里输入网站的地址就能够了,例如www.baidu.com,可是在浏览器的地址栏里面出现的倒是:http://www.baidu.com ,你知道为何会多出一个“http”吗?
咱们在浏览器的地址栏里输入的网站地址叫作URL (Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址同样,每一个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级连接时,URL就肯定了要浏览的地址。浏览器经过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。所以,在咱们认识HTTP以前,有必要先弄清楚URL的组成,例如:http://www.baidu.com/china/index.htm。它的含义以下:
1. http://:表明超文本传输协议,通知baidu.com服务器显示Web页,一般不用输入;
2. www:表明一个Web(万维网)服务器;
3. baidu.com/:这是装有网页的服务器的域名,或站点服务器的名称;
4. China/:为该服务器上的子目录,就好像咱们的文件夹;
5. Index.htm:index.htm是文件夹中的一个HTML文件(网页)。
咱们知道,Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层(Application layer),它包含全部高层的协议。高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。这就是你为何在浏览器中看到的网页地址都是以http://开头的缘由。
自WWW诞生以来,一个多姿多彩的资讯和虚拟的世界便出如今咱们眼前,但是咱们怎么可以更加容易地找到咱们须要的资讯呢?当决定使用超文本做为WWW文档的标准格式后,因而在1990年,科学家们当即制定了可以快速查找这些超文本文档的协议,即HTTP协议。通过几年的使用与发展,获得不断的完善和扩展,目前在WWW中使用的是HTTP/1.0的第六版。
[编辑本段]HTTP是怎样工做的
既然咱们明白了URL的构成,那么HTTP是怎么工做呢?咱们接下来就要讨论这个问题。
一次HTTP操做称为一个事务,其工做过程可分为四步:
首先客户机与服务器须要创建链接。只要单击某个超级连接,HTTP的工做就开始了。
创建链接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
客户端接收服务器所返回的信息经过浏览器显示在用户的显示屏上,而后客户机与服务器断开链接。
若是在以上过程当中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来讲,这些过程是由HTTP本身完成的,用户只要用鼠标点击,等待信息显示就能够了。
许多HTTP通信是由一个用户代理初始化的而且包括一个申请在源服务器上资源的请求。最简单的状况多是在用户代理和服务器之间经过一个单独的链接来完成。在Internet上,HTTP通信一般发生在TCP/IP链接之上。缺省端口是TCP 80,但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可靠的传输。
这个过程就好像咱们打电话定货同样,咱们能够打电话给商家,告诉他咱们须要什么规格的商品,而后商家再告诉咱们什么商品有货,什么商品缺货。这些,咱们是经过电话线用电话联系(HTTP是经过TCP/IP),固然咱们也能够经过传真,只要商家那边也有传真。
以上简要介绍了HTTP协议的宏观运做方式,下面介绍一下HTTP协议的内部操做过程。
在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的链接期间,即在某个链接中的客户在另外一个链接中可能做为服务器。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:创建链接、发送请求信息、发送响应信息、关闭链接。这就好像上面的例子,咱们电话定货的全过程。
其实简单说就是任何服务器除了包括HTML文件之外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级连接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操做后回送所要求的文件。在这一过程当中,在网络上发送和接收的数据已经被分红一个或多个数据包(packet),每一个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。TCP/IP决定了每一个数据包的格式。若是事先不告诉你,你可能不会知道信息被分红用于传输和再从新组合起来的许多小块。
也就是说商家除了拥有商品以外,它也有一个职员在接听你的电话,当你打电话的时候,你的声音转换成各类复杂的数据,经过电话线传输到对方的电话机,对方的电话机又把各类复杂的数据转换成声音,使得对方商家的职员可以明白你的请求。这个过程你不须要明白声音是怎么转换成复杂的数据的。
[编辑本段]HTTP的含义及其做用
HTTP是超文本传输协议,是客户端浏览器或其余程序与Web服务器之间的应用层通讯协议。在Internet上的Web服务器上存放的都是超文本信息,客户机须要经过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不只可用于Web访问,也能够用于其余因特网/内联网应用系统之间的通讯,从而实现各种应用资源超媒体访问的集成。
[编辑本段]http协议基础
HTTP(HyperText Transfer Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的相似于MIME的消息结构。服务器以一个状态行做为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
一般HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每一个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前能够添加任何数量的空格符,头域能够被扩展为多行,在每行开始处,使用至少一个空格或制表符。
通用头域
通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通信双方都支持此扩展,若是存在不支持的通用头域,通常将会做为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。
Cache-Control头域
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头域
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,须要知道用户所在的时区。
Pragma头域
Pragma头域用来包含实现特定的指令,最经常使用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
请求消息
请求消息的第一行为下面的格式:
MethodSPRequest-URISPHTTP-VersionCRLFMethod表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。方法GET和HEAD应该被全部的通用WEB服务器支持,其余全部方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是能够在响应时,不返回消息体。POST方法能够请求服务器接收包含在请求中的实体信息,能够用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
SP表示空格。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器自己。HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。CRLF表示换行回车符。请求头域容许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段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。对请求头域的扩展要求通信双方都支持,若是存在不支持的请求头域,通常将会做为实体头域处理。
典型的请求消息:
Host: download.microtool.de
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/4.04[en](Win95;I;Nav)
Range: bytes=554554-
上例第一行表示HTTP客户端(多是浏览器、下载程序)经过GET方法得到指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。
Host头域
Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,不然系统会以400状态码返回。
Referer头域
Referer头域容许客户端指定请求uri的源资源地址,这能够容许服务器生成回退链表,可用来登录、优化cache等。他也容许废除的或错误的链接因为维护的目的被追踪。若是请求的uri没有本身的uri地址,Referer不能被发送。若是指定的是部分uri地址,则此地址应该是一个相对地址。
Range头域
Range头域能够请求实体的一个或者多个子范围。例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节之后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
可是服务器能够忽略此请求头,若是无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。
User-Agent头域
User-Agent头域的内容包含发出请求的用户信息。
响应消息
响应消息的第一行为下面的格式:
HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。Status-Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的做用。第一个数字可能取5个不一样的值:
1xx:信息响应类,表示接收到请求而且继续处理
2xx:处理成功响应类,表示动做被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动做,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
响应头域容许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通信双方都支持,若是存在不支持的响应头域,通常将会做为实体头域处理。
典型的响应消息:
HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:"a030f020ac7c01:1e9f"
Content-length:39725426
Content-range:bytes554554-40279979/40279980
上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。
Location响应头
Location响应头用于重定向接收者到一个新URI地址。
Server响应头
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识通常按照重要性排序。
HTTP-运做方式
HTTP协议是基于请求/响应范式的。一个客户机与服务器创建链接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
许多HTTP通信是由一个用户代理初始化的而且包括一个申请在源服务器上资源的请求。最简单的状况多是在用户代理(UA)和源服务器(O)之间经过一个单独的链接来完成。
当一个或多个中介出如今请求/响应链中时,状况就变得复杂一些。中介由三种:代理(Proxy)、网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求,重写所有或部分消息,经过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理,做为一些其它服务器的上层,而且若是必须的话,能够把请求翻译给下层的服务器协议。一个通道做为不改变消息的两个链接之间的中继点。当通信须要经过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道常常被使用.
实体
请求消息和响应消息均可以包含实体信息,实体信息通常由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD五、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。extension-header容许客户端定义新的实体头,可是这些域可能没法未接受方识别。实体能够是一个通过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。
Content-Type实体头
Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型Content-Range实体头
Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。通常格式:
Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234若是一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。
Last-modified实体头
Last-modified实体头指定服务器上保存内容的最后修订时间。
例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234若是一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。
Last-modified实体头
[编辑本段]http协议结构
HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式以下:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。SP 是分隔符。除了在最后的 CRLF 序列中 CF 和 LF 是必需的以外,其余均可以不要。有关通用信息头,请求头和实体头方面的具体内容能够参照相关文件。
应报文格式以下:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
状态码元由3位数字组成,表示请求是否被理解或被知足。缘由分析是对原文的状态码做简短的描述,状态码用来支持自动操做,而缘由分析用来供用户使用。客户机无需用来检查或显示语法。有关通用信息头,响应头和实体头方面的具体内容能够参照相关文件。
[编辑本段]HTTP错误代码详细介绍
"100" : Continue
"101" : witching Protocols
"200" : OK
"201" : Created
"202" : Accepted
"203" : Non-Authoritative Information
"204" : No Content
"205" : Reset Content
"206" : Partial Content
"300" : Multiple Choices
"301" : Moved Permanently
"302" : Found
"303" : See Other
"304" : Not Modified
"305" : Use Proxy
"307" : Temporary Redirect
HTTP 400 - 请求无效
HTTP 401.1 - 未受权:登陆失败
HTTP 401.2 - 未受权:服务器配置问题致使登陆失败
HTTP 401.3 - ACL 禁止访问资源
HTTP 401.4 - 未受权:受权被筛选器拒绝
HTTP 401.5 - 未受权:ISAPI 或 CGI 受权失败
HTTP 403 - 禁止访问
HTTP 403 - 对 Internet 服务管理器 (HTML) 的访问仅限于 Localhost
HTTP 403.1 禁止访问:禁止可执行访问
HTTP 403.2 - 禁止访问:禁止读访问
HTTP 403.3 - 禁止访问:禁止写访问
HTTP 403.4 - 禁止访问:要求 SSL
HTTP 403.5 - 禁止访问:要求 SSL 128
HTTP 403.6 - 禁止访问:IP 地址被拒绝
HTTP 403.7 - 禁止访问:要求客户证书
HTTP 403.8 - 禁止访问:禁止站点访问
HTTP 403.9 - 禁止访问:链接的用户过多
HTTP 403.10 - 禁止访问:配置无效
HTTP 403.11 - 禁止访问:密码更改
HTTP 403.12 - 禁止访问:映射器拒绝访问
HTTP 403.13 - 禁止访问:客户证书已被吊销
HTTP 403.15 - 禁止访问:客户访问许可过多
HTTP 403.16 - 禁止访问:客户证书不可信或者无效
HTTP 403.17 - 禁止访问:客户证书已经到期或者还没有生效
HTTP 404.1 - 没法找到 Web 站点
HTTP 404 - 没法找到文件
HTTP 405 - 资源被禁止
HTTP 406 - 没法接受
HTTP 407 - 要求代理身份验证
HTTP 410 - 永远不可用
HTTP 412 - 先决条件失败
HTTP 414 - 请求 - URI 太长
HTTP 500 - 内部服务器错误
HTTP 500.100 - 内部服务器错误 - ASP 错误
HTTP 500-11 服务器关闭
HTTP 500-12 应用程序从新启动
HTTP 500-13 - 服务器太忙
HTTP 500-14 - 应用程序无效
HTTP 500-15 - 不容许请求 global.asa
Error 501 - 未实现
HTTP 502 - 网关错误
[编辑本段]协议版本号
超文本传输协议已经演化出了不少版本,它们中的大部分都是向下兼容的。在RFC 2145中描述了HTTP版本号的用法。客户端在请求的开始告诉服务器它采用的协议版本号,然后者则在响应中采用相同或者更早的协议版本。
0.9
已过期。只接受 GET 一种请求方法,没有在通信中指定版本号,且不支持请求头。因为该版本不支持 POST 方法,因此客户端没法向服务器传递太多信息。
HTTP/1.0
这是第一个在通信中指定版本号的 HTTP 协议版本,至今仍被普遍采用,特别是在代理服务器中。
HTTP/1.1
当前版本。持久链接被默认采用,并能很好地配合代理服务器工做。还支持以管道方式在同时发送多个请求,以便下降线路负载,提升传输速度。
HTTP/1.1相较于 HTTP/1.0 协议的区别主要体如今:
1 缓存处理
2 带宽优化及网络链接的使用
3 错误通知的管理
4 消息在网络中的发送
5 互联网地址的维护
6 安全性及完整性