![点击分享此内容可以赚币 分享](/master/images/share_but.png)
Web前端开发培训第一讲:Http协议讲义完整版.docx
《Web前端开发培训第一讲:Http协议讲义完整版.docx》由会员分享,可在线阅读,更多相关《Web前端开发培训第一讲:Http协议讲义完整版.docx(14页珍藏版)》请在咨信网上搜索。
1、Web前端培训第一讲:HTTP协议讲义完整版 目录0.预备知识10.1OSI层次模型与TCP/IP协议栈10.2IP地址20.3 TCP/IP通信方式21.HTTP协议通信过程21.1 URL自动解析21.2 获取IP,建立TCP连接31.3客户端浏览器向服务器发出HTTP请求31.4 Web服务器应答,并向浏览器发送数据31.5 Web服务器关闭TCP连接32.HTTP协议之URL42.1 HTTP协议概述42.2 HTTP之URL42.3 URL编码53.HTTP协议之请求83.1 HTTP请求的结构84.HTTP协议之响应95.HTTP协议之消息报头105.1 普通报头105.2 请求报
2、头115.3 响应报头125.4 实体报头136.需要提前了解的工具HttpAnalyzer147.核心参考资料140. 预备知识0.1 OSI层次模型与TCP/IP协议栈CCNA视频教程: 重点学习第二讲OSI层次参考模型与第三讲TCP/IP协议栈。0.2 IP地址Windows Server 2003从入门到精通系列之:TCP/IP协议基础 。 0.3 TCP/IP通信方式l 按Client和Server的连接数量分类1) 一个Client方连接一个Server方,或称点对点(peer to peer)。2) 多个Client方连接一个Server方,这也是通常的并发服务器方式。 3) 一
3、个Client方连接多个Server方,这种方式很少见。l 按连接方式分类1) 长连接 Client方与Server方先建立通讯连接,然后再进行报文发送和接收,在通信过程中连接不断开。2) 短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,通讯完毕后立即断开连接。l 按发送接收方式分类1) 异步 报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况: (1)异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接收 (2)异步单工:接收和发送是用两个不同的程序来完成。 2) 同步 报文发送和接收是同步进行,既报文发送后等待接收返回报文。1.
4、 HTTP协议通信过程当我们在浏览器的地址栏输入“”然后按回车,这之后发生了什么事,我们直接看到的是打开了对应的网页,那么内部客户端和服务端是如何通信的呢?1.1 URL自动解析HTTP URL包含了用于查找某个资源的足够信息,基本格式如下:HTTP:/host“:”portabs_path,其中HTTP表示桶盖HTTP协议来定位网络资源;host表示合法的主机域名或IP地址,port指定一个端口号,缺省80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。例如:输入;浏览器会自动转
5、换成:HTTP:/1.2 获取IP,建立TCP连接浏览器地址栏中输入HTTP:/当获取IP之后,就开始与所请求的Tcp建立三次握手连接,连接建立后,就向服务器发出HTTP请求。注1:在Windows操作系统环境下,解析域名的过程有很多步骤,详细内容可以参Windows Server 2003从入门到精通系列之:DNS协议基础。 1.3客户端浏览器向服务器发出HTTP请求一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令,接着以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。1.4 Web服务器应答,并向浏览器发送数据客
6、户机向服务器发出请求后,服务器会客户机回送应答,HTTP/1.1 200 OK应答的第一部分是协议的版本号和应答状态码,正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。1.5 Web服务器关闭TCP连接一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接注2,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-aliveTCP连
7、接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。 注2:关闭连接也可以由客户端来要求。2. HTTP协议之URL2.1 HTTP协议概述http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。关键词:请求与相应模式、无状态的、常基于TCP的应用程协议、持续连接的机制。请求与相应模式:客户端发出一个请求,服务器给出一个应答。无状态的:指http协议本身不会在
8、多次请求间保持状态。常基于TCP的应用程协议:TCP/IP是事实上的网络通信工业标准,但并不是唯一,因此是“常”。持续连接的机制注3:指的是Http1.1版本,通信方式已经可以为“长连接”。注3:http协议中规定了一个特殊规则:浏览器对一个服务器不能同时打开两个以上的连接(IP+Port)。这个规则应该是为了保护服务器不会很容易被洪水攻击。主流浏览器包括IE都实现了这个规则。DEMO:用IE下载一个网站的文件,只能同时打开2个,第三个就需要等待。附注:这个规定是对IE而言是精确到域名而不是IP。相关内容的详细说明:HTTP协议1.1中文版: 请查看8.1.4节最后的说明。 其中节选: 使用持
9、续连接的客户机应限制与某一服务器同时连接的个数。单用户客户机不应与任一服务器或代理服务器保持两个以上的连接。代理服务器与其它服务器或代理之间应维护2*N个连接,其中N是同时在线的用户数。设定这一规则是为了改进HTTP应答时间且避免拥塞。另外:Iframe与DIV+ajax实现方式效果差别。我们知道ERP和桌面部件大多数都是使用IFrame加载的。那么它的缺陷非常的明显,因为iframe指定src的方式,默认是使用“同步长连接”。因此当iframe的数量多了之后,连接数就会超过2,因此后面的请求必须等待。如果加载的iframe服务端处理时间过长,则整个客户端的浏览器一直被阻塞住。 而DIV+aj
10、ax的方式则不同。Ajax发出的请求最后都由ajax Engine发出,即连接由ajaxEngine管理(发送和接收数据)。因此,DIV+ajax异步请求不会出现IE页面阻塞现象。2.2 HTTP之URLHTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http:/host:portabs_pathl http 表示要通过HTTP协议来定位网络资源;l host表示合法的Internet主机域名或者IP地址;l port指定一个端口号,为空则使用缺省端口 80;l abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当
11、它作为请求URI时,必须以“/”的形式给出,通常这个工作 浏览器自动帮我们完成。DEMO:输入:,浏览器自动转换成:http:/ / 2.3 URL编码foo:/:8042/over/there?name=ferret#nose _/ _/ _/_/ _/ | | | | | scheme authority path query fragmentURI是统一资源标识的意思,通常我们所说的Url只是URI的一种。典型Url的格式如上面所示。Url编码,实际上指的是URI编码。2.3.1 为什么需要Url编码通常如果一样东西需要编码,说明这样东西并不适合传输。对于Url来说,之所以要进行编码,是
12、因为Url中有些字符会引起歧义。DEMO:Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。Url编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。2.3.2 哪些字符需要编码RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.4个特殊字符以及所有保留字符。RFC3986文档对Url的编解码问题做出
13、了详细的建议,指出了哪些字符需要被编码才不会引起Url语义的转变,以及对为什么这些字符需要编码做出了相应的解释。2.3.3 US-ASCII字符集中没有对应的可打印字符Url中只允许使用可打印字符。US-ASCII码中的10-7F字节全都表示控制字符,这些字符都不能直接出现在Url中。同时,对于80-FF字节(ISO-8859-1),由于已经超出了US-ACII定义的字节范围,因此也不可以放在Url中。2.3.4 保留字符Url可以划分成若干个组件,协议、主机、路径等。有一些字符(:/?#)是用作分隔不同组件的。DEMO:冒号用于分隔协议和主机,/用于分隔主机和路径,?用于分隔路径和查询参数,
14、等等。还有一些字符(!$&()*+,;=)用于在每个组件中起到分隔作用的,如=用于表示查询参数中的键值对,&符号用于分隔查询多个键值对。当组件中的普通数据包含这些特殊字符时,需要对其进行编码。RFC3986中指定了以下字符为保留字符:!*();:&=+$,/?#2.3.5 不安全字符还有一些字符,当他们直接放在Url中的时候,可能会引起解析程序的歧义。这些字符被视为不安全字符,原因有很多。l 空格:Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉 l 引号以及 :引号和尖括号通常用于在普通文本中起到分隔Url
15、的作用 l # :通常用于表示书签或者锚点 l % :百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码 l |: 某一些网关或者传输代理会篡改这些字符 需要注意的是,对于Url中的合法字符,编码和不编码是等价的,但是对于上面提到的这些字符,如果不经过编码,那么它们有可能会造成Url语义的不同。因此对于Url而言,只有普通英文字符和数字,特殊字符$-_.+!*()还有保留字符,才能出现在未经编码的Url之中。其他字符均需要经过编码之后才能出现在Url中。但是由于历史原因,目前尚存在一些不标准的编码实现。例如对于符号,虽然RFC3986文档规定,对于波浪符号,不需要进行Url编
16、码,但是还是有很多老的网关或者传输代理会2.3.6 如何对Url中的非法字符进行编码Url编码通常也被称为百分号编码(Url Encoding,also known as percent-encoding),是因为它的编码方式非常简单,使用%百分号加上两位的字符0123456789ABCDEF代表一个字节的十六进制形式。Url编码默认使用的字符集是US-ASCII。例如a在US-ASCII码中对应的字节是0x61,那么Url编码之后得到的就是%61,我们在地址栏上输入常见字符的Url编码列表:保留字符的Url编码!*();:&%21%2A%22%27%28%29%3B%3A%40%26=+$,
17、/?%#%3D%2B%24%2C%2F%3F%25%23%5B%5D1) 对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的字节,然后对每个字节执行百分号编码。对于Unicode字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码。如“中文”使用UTF-8字符集得到的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过Url编码之后得到“%E4%B8%AD%E6%96%87”。2) 如果某个字节对应着ASCII字符集中的某个非保留字符,则此字节无需使用百分号表示。例如“Url编码”,使用UTF-8编码得到的字节是0x5
18、5 0x72 0x6C 0xE7 0xBC 0x96 0xE7 0xA0 0x81,由于前三个字节对应着ASCII中的非保留字符“Url”,因此这三个字节可以用非保留字符“Url”表示。最终的Url编码可以简化成“Url%E7%BC%96%E7%A0%81” ,当然,如果你用%55%72%6C%E7%BC%96%E7%A0%81”也是可以的。由于历史的原因,有一些Url编码实现并不完全遵循这样的原则,下面会提到。2.3.7 JS中 escape,encodeURI和encodeURIComponent的区别Javascript中提供了3对函数用来对Url编码以得到合法的Url,它们分别是esc
19、ape / unescape,encodeURI / decodeURI和encodeURIComponent / decodeURIComponent。由于解码和编码的过程是可逆的,因此这里只解释编码的过程。这三个编码的函数escape,encodeURI,encodeURIComponent都是用于将不安全不合法的Url字符转换为合法的Url字符表示,它们有以下几个不同点。l 安全字符不同下面的表格列出了这三个函数的安全字符(即函数不会对这些字符进行编码)安全字符 escape(69个) */+-._0-9a-zA-Z encodeURI(82个) !#$&()*+,/:;=?-._0-9
20、a-zA-Z encodeURIComponent(71个) !()*-._0-9a-zA-Z l 兼容性不同escape函数是从Javascript1.0的时候就存在了,其他两个函数是在Javascript1.5才引入的。但是由于Javascript1.5已经非常普及了,所以实际上使用encodeURI和encodeURIComponent并不会有什么兼容性问题。l 对Unicode字符的编码方式不同这三个函数对于ASCII字符的编码方式相同,均是使用百分号+两位十六进制字符来表示。但是对于Unicode字符,escape的编码方式是%uxxxx,其中的xxxx是用来表示unicode字符的
21、4位十六进制字符。这种方式已经被W3C废弃了。但是在ECMA-262标准中仍然保留着escape的这种编码语法。encodeURI和encodeURIComponent则使用UTF-8对非ASCII字符进行编码,然后再进行百分号编码。这是RFC推荐的。因此建议尽可能的使用这两个函数替代escape进行编码。l 适用场合不同encodeURI被用作对一个完整的URI进行编码,而encodeURIComponent被用作对URI的一个组件进行编码。从上面提到的安全字符范围表格来看,我们会发现,encodeURIComponent编码的字符范围要比encodeURI的大。我们上面提到过,保留字符一般
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web 前端 开发 培训 第一 Http 协议 讲义 完整版
![提示](https://www.zixin.com.cn/images/bang_tan.gif)
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【胜****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【胜****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。