欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 读后感 > rfc2616读后感

rfc2616读后感

时间:2016-05-13 03:34

referer 是什么意思

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

在JSP中获取REFERER的方式是:request.getHeader(REFERER);

如何一步步学习开发服务器

因为题目中提到了Nginx和Tengine,所以这里假设是Linux下面的HTTP服务器的开发。

HTTP服务器开发是个漫长的体力活,如果真的想做下去,必须要有强烈的兴趣支撑。

但是除此之外,HTTP服务器开发并没有什么特别高深的算法在里面,好好努力的话,做出来自己的HTTP服务器也并不是一件太难的事。

需要准备的有:扎实 的C语言编程基础。

相信到了大三的时候,你已经有了几年的变成经验,但是对于开发HTTP服务器来说,还是远远不够。

课本中会给你C语言的一个大概讲解,但是在现实世界中,还是会有很多课本中覆盖不到的地方。

因为你已经在阅读Nginx的代码了,所以建议你首先检查一下代码中是否有不认识的C语言语法和用法。

如果有,那么就自己Google学习一下。

如果没有,那么说明你的C语言学的足够好,不存在语言层面上的问题。

接下来,非常推荐学习一下这本经典的The Practice of Programming。

学校里学习到的知识太书本化,代码又太专业,不好懂。

这本书能帮你在两者之间找一个平衡,读了之后就会知道很多地方为什么要这么做。

C语言准备的差不多了之后,可以开始准备网络编程的知识。

Unix Network Programming的确是本好书,但是问题在于,它太厚了。

对于初学者来说,它提供的东西太多了。

从实用的角度,我更推荐Beej’s Guide to Network Programming,不太长,但是涵盖了网络编程的基本上所有常用的内容。

全部读完也不过几个小时的时间。

UNP可以用来在修炼的差不多了之后用来做参考书。

或者用来学习网络编程中具体某个细节的知识。

接下来,因为是要写HTTP服务器,所以对HTTP协议需要有很深入的了解。

当然最权威的资料就是一系列的RFC,比如HTTP 1.1的hwww ietf.org\\\/rfc\\\/rfc2616.txt。

这时候就到了最开始讲的体力活的地方。

不断的仔细阅读RFC,然后把它讲到的内容全部用代码实现一遍。

当然,也有偷懒的办法,直接使用现有的HTTP解析库,比如h2o\\\/picohttpparser · GitHub。

另外,关于Nginx的架构设计,Andrew Alexeev在 The Architecture of Open Source Applications (Volume 2): nginx里面讲的很清楚。

这个会对你读代码有很大的帮助。

什么是chunked编码

chunked编码的基本方法大块数据分解成多块小数据块都可以自指定,其具体格式如下(BNF文法: Chunked-Body = *chunk \\\/\\\/0至多个chunk last-chunk \\\/\\\/最后一个chunk trailer \\\/\\\/尾部 CRLF \\\/\\\/结束标记符chunk = chunk-size [ chunk-extension ] CRLF chunk-data CRLF chunk-size = 1*HEX last-chunk = 1*(0) [ chunk-extension ] CRLFchunk-extension= *( ; chunk-ext-name [ = chunk-ext-val ] ) chunk-ext-name = token chunk-ext-val = token | quoted-string chunk-data = chunk-size(OCTET) trailer = *(entity-header CRLF) 解释: Chunked-Body表示经过chunked编码后的报文体。

报文体可以分为chunk, last-chunk,trailer和结束符四部分。

chunk的数量在报文体中最少可以为0,无上限;每个chunk的长度是自指定的,即,起始的数据必然是16进制数字的字符串,代表后面chunk-data的长度(字节数)。

这个16进制的字符串第一个字符如果是“0”,则表示chunk-size为0,该chunk为last-chunk,无chunk-data部分。

可选的chunk-extension由通信双方自行确定,如果接收者不理解它的意义,可以忽略。

trailer是附加的在尾部的额外头域,通常包含一些元数据(metadata, meta means about information),这些头域可以在解码后附加在现有头域之后。

实例分析: 下面分析用ethereal抓包使用Firefox与某网站通信的结果(从头域结束符后开始):Address 0.......................... f000c0 31000d0 66 66 63 0d 0a ............... \\\/\\\/ ASCII码:1ffc\\\\r\\\ , chunk-data数据起始地址为000d5 很明显,“1ffc”为第一个chunk的chunk-size,转换为int为8188.由于1ffc后马上就是 CRLF,因此没有chunk-extension.chunk-data的起始地址为000d5, 计算可知下一块chunk的起始 地址为000d5+1ffc + 2=020d3,如下:020d0 .. 0d 0a 31 66 66 63 0d 0a .... \\\/\\\/ ASCII码:\\\\r\\\ 1ffc\\\\r\\\ 前一个0d0a是上一个chunk的结束标记符,后一个0d0a则是chunk-size和chunk-data的分隔符。

此块chunk的长度同样为8188, 依次类推,直到最后一块100e0 0d 0a 31100f0 65 61 39 0d 0a...... \\\/\\\/ASII码:\\\\r\\\ \\\\1ea9\\\\r\\\ 此块长度为0x1ea9 = 7849, 下一块起始为100f5 + 1ea9 + 2 = 11fa0,如下:100a0 30 0d 0a 0d 0a \\\/\\\/ASCII码:0\\\\r\\\ \\\\r\\\ “0”说明当前chunk为last-chunk, 第一个0d 0a为chunk结束符。

第二个0d0a说明没有trailer部分,整个Chunk-body结束。

解码流程: 对chunked编码进行解码的目的是将分块的chunk-data整合恢复成一块作为报文体,同时记录此块体的长度。

RFC2616中附带的解码流程如下:(伪代码) length := 0 \\\/\\\/长度计数器置0 read chunk-size, chunk-extension (if any) and CRLF \\\/\\\/读取chunk-size, chunk-extension \\\/\\\/和CRLF while(chunk-size > 0 ) { \\\/\\\/表明不是last-chunk read chunk-data and CRLF \\\/\\\/读chunk-size大小的chunk-data,skip CRLF append chunk-data to entity-body \\\/\\\/将此块chunk-data追加到entity-body后 read chunk-size and CRLF \\\/\\\/读取新chunk的chunk-size 和 CRLF } read entity-header \\\/\\\/entity-header的格式为name:valueCRLF,如果为空即只有CRLF while (entity-header not empty) \\\/\\\/即,不是只有CRLF的空行 { append entity-header to existing header fields read entity-header } Content-Length:=length \\\/\\\/将整个解码流程结束后计算得到的新报文体length \\\/\\\/作为Content-Length域的值写入报文中 Remove chunked from Transfer-Encoding \\\/\\\/同时从Transfer-Encoding中域值去除chunked这个标记 length最后的值实际为所有chunk的chunk-size之和,在上面的抓包实例中,一共有八块chunk-size为0x1ffc(8188)的chunk,剩下一块为0x1ea9(7849),加起来一共73353字节。

注:对于上面例子中前几个chunk的大小都是8188,可能是因为:1ffc 4字节,\\\\r\\\ 2字节,加上块尾一个\\\\r\\\ 2字节一共8字节,因此一个chunk整体为8196,正好可能是发送端一次TCP发送的缓存大小。

HTTP什么意思

超文本协议(HTTP,HyperText Transfer Protocol)是互联网用最为广泛的一种网络协议。

的WWW文件都必须遵守这个标准。

设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

  简介  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是超文本转移协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。

在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。

HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网\\\/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

当我们想浏览一个网站的时候,只要在浏览器的地址栏里输入网站的地址就可以了,例如,但是在浏览器的地址栏里面出现的却是:http:\\\/\\\/ ,你知道为什么会多出一个“http”吗

我们在浏览器的地址栏里输入的网站地址叫做URL (Uniform Resource Locator,统一资源定位符)。

就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。

当你在http功用浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。

浏览器通过超文本转移协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。

因此,在我们认识HTTP之前,有必要先弄清楚URL的组成,例如:http:\\\/\\\/\\\/china\\\/index.htm。

它的含义如下: 1. http:\\\/\\\/:代表超文本转移协议,通知abc.com服务器显示Web页,通常不用输入; 2. www:代表一个Web(万维网)服务器; 3. abc.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(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表示换行回车符。

请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信http架构息。

请求头域可能包含下列字段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-MD5、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报文由从客户机到服务器的请求和从服务器到客户机的响应构成。

请求报文格式如下: 请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体 请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。

SP 是分隔符。

除了在最后的 CRLF 序列中 CF 和 LF 是必需的之外,其他都可以不要。

有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。

应报文格式如下: 状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体 状态码元由3位数字组成,表示请求是否被理解或被满足。

原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。

客户机无需用来检查或显示语法。

有关通用信息头,响应头和实体头方面的具体内容可以参照相关文件。

  [编辑本段]工作原理  既然我们明白了URL的构成,那么HTTP是怎么工作呢

我们接下来就要讨论这个问题。

一次HTTP操作称为一个事务,其工作过程可分为四步: 首先客户机与服务器需要建立连接。

只要单击某个超级链接,HTTP的工作就开始了。

建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客http工作流程图户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。

对于用户来说,这些过程是由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决定了每个数据包的格式。

如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。

也就是说商家除了拥有商品之外,它也有一个职员在接听你的电话,当你打电话的时候,你的声音转换成各种复杂的数据,通过电话线传输到对方的电话机,对方的电话机又把各种复杂的数据转换成声音,使得对方商家的职员能够明白你的请求。

这个过程你不需要明白声音是怎么转换成复杂的数据的。

  [编辑本段]错误代码解释  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 安全性及完整性

WEB服务的工作原理

你的这个问题描述的不清楚,请把你的问题说清楚~否则别人没法帮助你的

在百度提问页面的顶端可以看到“我要提问”这个选项,在提问输入框中输入您的问题,或直接点击“我要提问”进入提问页,在这里您需要描述清楚您的问题,为更好地得到答案,您可以通过文字、截图,对问题进行更详细的描述并悬赏,然后把你疑惑的问题提交,就可以啦

如果您对我的回答有不满意的地方,还请您继续追问;答题不易,互相理解,互相帮助

如何开发一个Python web框架

小声说,不会不懂没玩过..帮你猜猜.运行环境和开发环境不同,服务器只需要运行不需要开发,(只需要运行而不需要危险).所以没有吧.就像你做程序要装个20G的VS,而运行它只需要装个30M的CFNet.开发环境附带的调试功能可能对于服务器来说相当危险.完全外行,猜一下,大家莫怪

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片