




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. HTTP协议结构HTTP is the protocol that supports communication between web browsers and web servers.Reference:RFC1945 (http1.0) RFC2616 (http1.1)HTTP has a very simple structure: client sends a request server returns a reply.HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户 信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以 及可能的实体内容。2. HTTP协议中的几个重要概念1.连接(Connection):一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。2.消息(Message):HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。5.资源(Resource):由URI标识的网络数据对象或服务。6.实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体可以是一个经过编 码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content -Range定义。7.头域(Header): HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的 注意:HTTP1.1需要必须包含Host头域,否则会返回400 响应码Question 1. 为什么HTTP1.1需要必须包含Host头域?在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩 展,如果存在不支持的通用头域,一般将会作为实体头域处理。请求头域可能包含下列字段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。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。响应头域包含Age、 Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW- Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。Location响应头用于重定向接收者到一个新URI地址。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、Content-Length、Content-Location、 Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified3. HTTP的 消息结构4. HTTP的断点续传 Question 2. Last-Modified Etag域的作用?1. 实现 (Range /206, Content-Range ) - -Attempt1- Connectingto. Connectedto GET/VS0515AI.EXEHTTP/1.1 Connection:close Host: Accept:*/* Pragma:no-cache Cache-Control:no-cache Referer:/ User-Agent:Mozilla/4.04en(Win95;I;Nav) HTTP/1.1200OK Server:ZeroHttpServer/1.0 Date:Thu,12Jul200111:19:24GMT Cache-Control:no-cache Last-Modified:Tue,30Jan200113:11:30GMT Content-Type:application/octet-stream Content-Length:15143086 Connection:close Datatransferstarted JobStoppedbyuser Received5275648bytesin0:00:07(691435bytes/s)- -Attempt2- Connectingto. Connectedto GET/VS0515AI.EXEHTTP/1.1 Connection:close Host: Accept:*/* Pragma:no-cache Cache-Control:no-cache Referer:/ User-Agent:Mozilla/4.04en(Win95;I;Nav) Range:bytes=5275648- HTTP/1.1206PartialContent Server:ZeroHttpServer/1.0 Date:Thu,12Jul200111:19:40GMT Cache-Control:no-cache Last-Modified:Tue,30Jan200113:11:30GMT Content-Type:application/octet-stream Content-Range:bytes 5275648-15143085/15143086 Content-Length:9867438 Connection:close Datatransferstarted JobStoppedbyuser 2. download中判断content是否为可断点续传的依据以及开始续传的判断E(ntity)tag, Last-Modified用于识别缓存里保存的数据(即缓存项)是否是源服务器的实体的副本。E(ntity)tag, Last-Modified, Content-Length 都是判断的重要依据5 HTTP中关于Chunked编码Question 3 为什么看到传输的消息最后有一个0?transfer-Encoding: chunked 代表什么意义?transfer-Encoding:和content-Encoding的区别是什么?chunked只能在http 1.1中使用chunked中文意思就是分块发送,因为有些时候并不知道整个文章生成后有多大,但是各个块的大小是可以知道的。所以chunked可以分块发送。chunked要把header中的Content-Length去掉,因为没有意义了而改加头域:Transfer-Encoding: chunked。发送的正文当然是分成很多个块发送的,发送每一个块的时候这样发就可以了:长度(标注后面内容的长度)rn内容rn,如果发送完了,再发送一个空的块,就是一个长度为0的块,这样0rnrn很简单的一个例子: HTTP/1.1Transfer-Encoding: chunked5Hello6ThankU06 HTTP中几个常用的方法Http1.0 只支持GET, HEAD. POST Http1.1 中增加了PUT, DELETE OPTIONS1. Post和Get的区别从一个页面转向另一个页面的请求方式有两种,Post和Get. 所有的人都知道如下区别: 1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 2.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节. 3.Post顾名思义,就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为HTTP请求的内容,而Get是在Http头部传输的。还有一点:Post消息 必须要求有 Content-Length 头域Question 4:想想还有别的区别吗?设置表单数据传送给表单处理程序的方法,当METHOD=GET时,表单数据会被存在环境变量 query_string中,表单处理程序可由此变量取得表单数据;当METHOD=POST时,表单数据程序可由标准输入stdin取得表单数据, 而表单数据的长度则记录在环境变量Content_Length中。 Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用 “&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。Answser4:Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。Get是不安全的,Post是安全的,Example*POST /cgi-bin/upload.cgi?sid=4d1c512b8bc74cc5c0cdf1aa81c17eb0 HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:3) Gecko/20080311 Firefox/3Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Proxy-Connection: keep-aliveReferer: /Cookie: PHPSESSID=slagp80gfl3utrrdpk5m3hlj70Content-Type: multipart/form-data; boundary=-14487181197756Content-Length: 4741-14487181197756.Content-Disposition: form-data; name=agreeon.-14487181197756Content-Type “multipart/form-data”,后面还多了一个boundary,此值是为了区分POST的内容的区段用 的,只要在内容中遇到了此值,就表示下面要开始一个新的区段了,每个区段的内容相对独立。如果遇到的是此值后面连着两个减号,则表示全部内容到此结束。2. GET和HeadHEAD方法与GET几乎一样,区别在于,HEAD方法不让服务器在回应中返回任何实 体。对HEAD请求的回应部分来说,它的HTTP标题中包含的元信息与通过GET请求所得 到的是相同的。通过使用这种方法,不必传输整个实体主体,就可以得到请求URI所指定 资源的元信息。该方法通常用来测试超链接的合法性、可访问性及最近更新。 与条件GET不同,不存在所谓的“条件HEAD”,即conditional HEAD。即使在HEAD 请求中指定If-Modified-Since标题域,它也会被忽略。3. Put很多服务器并不支持PUT,好像很少用POST方法和PUT方法请求最根本的区别是请求URI(Request-URI)的含义不同。POST请求里的URI指示一个能处理请求实体的资源而PUT方法请求里有一个实体一一用户代理知道URI意指什么,并且服务器不能把此请求应用于其他URI指定的资源。如果服务器期望请,求被应用于一个不同的URI,那么它必须发送301响应;用户代理可以自己决定是否重定向请求。7 Http中的缓存缓存的目的是存储请求的响应信息,为了响应将来的请求。Hop-to-hopEnd-to-end8 几个常用的扩展头域:Cookie/Set-Cookie: (RFC2965)不是RFC2616的一部分,并不是所有的浏览器都支持cookie 无状态连接 有状态会话Cookie最先是由WEB服务器发出的,是否发送Cookie和发送的Cookie的具体内容,完全是由WEB服务器决定的。WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。实现了服务器端用户状态的保存*Example 1 *From server: HTTP/1.1 401 Authorization RequiredTransfer-Encoding: chunkedDate: Mon, 11 Feb 2008 11:24:05 GMTContent-Type: text/htmlCache-Control: proxy-revalidateServer: Apache/1.3.39 (Unix) PHP/5.2.5 mod_jk/1.2.25 mod_log_bytes/1.2 mod_bwlimited/1.4 mod_auth_passthrough/1.8 FrontPage/635 mod_ssl/2.8.30 OpenSSL/0.9.8bWWW-Authenticate: Basic realm=Access_RestrictedSet-Cookie: BCSI-CS507DB079=1; Path=/265Access denied - For access to Protected content, send an email to 0From client:GET /SECURE/java/GAMES/ancientempires.jad HTTP/1.1Host: accept: text/html, image/jpeg, image/png, text/*, image/*, */*accept-charset: iso-8859-1, utf-8;q=0.5, *;q=0.5accept-language: enuser-agent: Mozilla/5.0 (compatible; OSS/1.0; Chameleon; Linux) LJ0630/LJAP_N_03.48.B7PW1 MotoWebKit/417.19 (KHTML, like Gecko) BER/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 EGE/9.0Authorization: Basic RmVicnVhcnk6b2JqZWN0cookie: BCSI-CS507DB079=1cookie2: $Version=1x-wap-profile: /phoneconfig/u9/Profile/u9.rdf*cookie: BCSI-CS507DB079=1 this header ,or it will be denied by server !引申: 借助cookie来实现的session由于cookie 传递的信息有限,这是一种在浏览器断保存信心的方式Session是在服务器端保存信息的方式,借助cookie来传递session ID如果浏览器不支持cookie,那么怎么实现session的管理呢?URL重写Content-Disposition不是RFC2616的一部分,并不是所有的浏览器都支持Content-Disposition服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg,mp3等,会直接在浏览器中显示,如果需要提示用户保存,也就是不服务器不希望浏览器直接处理实体内容, 可是可以让用户选择将响应的实体内容保存到一个文件,就要利用Content-Disposition进行一下处理,Content-Disposition其实就是指定了接受程序处理内容的方式,有两种方式:inline和attachment。 Attachment是http应用中的标准方式。注意,使用这个头域时,一定要使用Content-Type 头域?For example:Content-Type:application/octet-streamContent-Disposition: attachment; filename=abc.zip注意:这个可能会引发安全问题Content-Type: audio/x-ms-wma Content-disposition: inline; filename=foo.exex-wap-profile:pls see the WAP-248-UAPROF.pdf For some server , this filed is a MUST header. Refresh:HTTP协议中定义了一个Refresh头字段,用于告诉浏览器过多少秒后自动刷新页面。在Refresh头字段的时间设置值后面还可以用分号(;)分隔后,再指定一个URL地址,这将让浏览器在指定的时间值后自动去访问该URL地址指向的资源。9 http 中的持久连接 (Persistent Connections)HTTP/1.1和之前版本的显著区别是HTTP/1.1默认使用持久连接。即
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省2025年成人高考化学复习题库及答案
- 公司消防安全培训标语课件
- 公司法纠纷课件
- 2025餐饮企业行政总厨聘用合同样本
- 2025压路机租赁合同范本
- 2025塑料制品生产加工合同
- 2025如何避免购销合同的法律风险
- 2025探讨合同责任保险合同之原则
- 2025房屋租赁合同备案授权书
- 隐患大排查大整治工作总结
- 初级邮政投递员职业技能鉴定考试题及答案
- 临建标准化(2023版)
- 中药热奄包完整版本
- 2024年全国医学考博英语试题
- JGJ202-2010 建筑施工工具式脚手架安全技术规范【清晰版】
- 医用耗材供货应急服务方案
- 银行从业考试题库
- 乡镇文旅活动方案
- 静疗专科护士进修汇报课件
- GB/T 15622-2023液压缸试验方法
- 生物医学工程伦理 课件全套 第1-10章 生物医学工程与伦理-医学技术选择与应用的伦理问题
评论
0/150
提交评论