OSI七层体系架构,TCPIP协议,HTTP协议
⼿机推送了⼀篇⽂章简单介绍HTTP协议,然后想把其计算机⽹络分层构建再温习⼀下,上⽹看了⼏篇博客⽂章,竟然有许多错误,真是误⼈,这⾥再理⼀下。
HTTP之前,先了解⼀些计算机⽹络通信的基础。
OSI模型 - 七层体系架构
开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),⼀种,由提出,⼀个试图使各种计算机在世界范围内互连为⽹络的标准框架。定义于ISO/IEC 7498-1。
层次划分
根据建议X.200,OSI将计算机⽹络体系结构划分为以下七层,标有1~7,第1层在底部。现“OSI/RM”是“Open Systems Interconnection Reference Model”的缩写。
第7层应⽤层
主条⽬:
应⽤层(Application Layer)提供为应⽤软件⽽设的接⼝,以设置与另⼀应⽤软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
第6层表达层
主条⽬:表达层
表达层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式。
第5层会话层
主条⽬:
会话层(Session Layer)负责在数据传输中设置和维护计算机⽹络中两台计算机之间的通信连接。
第4层传输层
主条⽬:
传输层(Transport Layer)把传输表头(TH)加⾄数据以形成数据包。传输表头包含了所使⽤的协议等发送信息。例如:传输控制协议(TCP)等。
第3层⽹络层
主条⽬:
⽹络层(Network Layer)决定数据的路径选择和转寄,将⽹络表头(NH)加⾄数据包,以形成分组。⽹络表头包含了⽹络数据。例如:互联⽹协议(IP)等。
第2层数据链路层
主条⽬:
数据链路层(Data Link Layer)负责⽹络寻址、错误侦测和改错。当表头和表尾被加⾄数据包时,会形成帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的⽅法。数据链表尾(DLT)是⼀串指⽰数据包末端的字符串。例如以太⽹、⽆线局域⽹(Wi-Fi)和通⽤分组⽆线服务(GPRS)等。
分为两个⼦层:逻辑链路控制(logic link control,LLC)⼦层和介质访问控制(media access control,MAC)⼦层。
第1层物理层
主条⽬:
物理层(Physical Layer)在局部局域⽹上传送(data frame),它负责管理计算机通信设备和⽹络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、⽹卡、主机适配器等。
OSI参考模型并没有提供⼀个可以实现的⽅法,⽽是描述了⼀些概念,⽤来协调进程间通信标准的制定。即OSI参考模型并不是⼀个标准,⽽是⼀个在制定标准时所使⽤的概念性框架。
,与OSI模型有类似结构的现⾏⽹络模型
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/⽹际协议)是指能够在多个不同⽹络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是和两个协议,⽽是指⼀个由、、TCP、、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
审核过的百科介绍:
从上⾯加粗体可以看到,TCP/IP 与单独提到的TCP或者IP不是⼀回事。TCP/IP是⼀个协议集合,协议簇。TCP, IP是TCP/IP协议簇中的两个协议,分别位于传输层与⽹络层。TCP/IP协议是Internet最基本的协议,其中应⽤层的主要协议有、、等,是⽤来接收来⾃传输层的数据或者按不同应⽤要求与⽅式将数据传输⾄传输层;传输层的主要协议有、TCP,是使⽤者使⽤平台和计算机信息⽹内部数据结合的通道,
可以实现数据传输与数据共享;⽹络层的主要协议有ICMP、IP、IGMP,主要负责⽹络中数据包的传送等;⽽⽹络访问层,也叫⽹路接⼝层或数据链路层,主要协议有ARP、,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进⾏有效处理等。
TCP/IP协议的组成
TCP/IP协议在⼀定程度上参考了的体系结构。OSI模型共有七层,从下到上分别是物理层、数据链路层、⽹络层、运输层、会话层、表⽰层和应⽤层。但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次。
(1)应⽤层、表⽰层、会话层三个层次提供的服务相差不是很⼤,所以在TCP/IP协议中,它们被合并为应⽤层⼀个层次。
(2)由于运输层和⽹络层在⽹络协议中的地位⼗分重要,所以在TCP/IP协议中它们被作为独⽴的两个层次。
(3)因为数据链路层和物理层的内容相差不多,所以在TCP/IP协议中它们被归并在⽹络接⼝层⼀个层次⾥。只有四层体系结构的TCP/IP协议,与有七层体系结构的OSI相⽐要简单了不少,也正是这样,TCP/IP协议在实际的应⽤中效率更⾼,成本更低。
分别介绍TCP/IP协议中的四个层次。
应⽤层:应⽤层是TCP/IP协议的第⼀层,是直接为应⽤进程提供服务的。
(1)对不同种类的应⽤程序它们会根据⾃⼰的需要来使⽤应⽤层的不同协议,邮件传输应⽤使⽤了协议、万维⽹应⽤使⽤了协议、远程登录服务应⽤使⽤了有协议。
(2)应⽤层还能加密、解密、格式化数据。
(3)应⽤层可以建⽴或解除与其他节点的联系,这样可以充分节省⽹络资源。-- Comment: 正如HTTP的⽆状态⼀样,通过⽆状态充分节省⽹络资源。见下⾯HTTP的更多具体分析。
运输层:作为TCP/IP协议的第⼆层,运输层在整个TCP/IP协议中起到了中流砥柱的作⽤。且在运输层中,TCP和UDP也同样起到了中流砥柱的作⽤。
⽹络层:⽹络层在TCP/IP协议中的位于第三层。在TCP/IP协议中⽹络层可以进⾏⽹络连接的建⽴和终⽌以及IP地址的寻等功能。
⽹络接⼝层:在TCP/IP协议中,⽹络接⼝层位于第四层。由于⽹络接⼝层兼并了和所以,⽹络接⼝层既是传输数据的物理媒介,也可以为⽹络层提供⼀条准确⽆误的线路。
TCP/IP协议的组成
从上⾯红⾊字体引出了HTTP协议。
HTTP协议
http是⼀个简单的请求-响应协议,它通常运⾏在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;⽽消息内容则具有⼀个类似MIME的格式。这个简单模型是早期Web成功的有功之⾂,因为它使得开发和部署是那么的直截了当。
审核过的百科介绍:
由来
WWW(world wide web)发源于欧洲⽇内⽡量⼦物理实验室CERN,正是WWW技术的出现使得因特⽹得以超乎想象的速度迅猛发展。这项基于TCP/IP的技术在短短的⼗年时间内迅速成为已经发展了⼏⼗年的Internet上的规模最⼤的信息系统,它的成功归结于它的简单、实⽤。在WWW的背后有⼀系列的协议和标准⽀持它完成如此宏⼤的⼯作,这就是Web协议族,其中就包括HTTP超⽂本传输协议。
在1990年,HTTP就成为WWW的⽀撑协议。当时由其创始⼈WWW之⽗蒂姆·贝纳斯·李(TimBerners—Lee)提出,随后WWW联盟(WWW Consortium)成⽴,组织了
IETF(Internet Engineering Task Force)⼩组进⼀步完善和发布HTTP协议。
HTTP是应⽤层协议,同其他应⽤层协议⼀样,是为了实现某⼀类具体应⽤的协议,并由某⼀运⾏在⽤户空间的应⽤程序来实现其功能。HTTP是⼀种协议规范,这种规范记录在⽂档上,为真正通过HTTP协议进⾏通信的HTTP的实现程序。
HTTP协议是基于C/S架构进⾏通信的,⽽HTTP协议的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer、Google chrome、Safari、Opera等,此外,客户端的命令⾏⼯具还有elink、等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端⼝。这样客户端浏览器和Web服务器之间就可以通过HTTP协议进⾏通信了。
下⾯是⼀篇架构师公号的⽂章,更多HTTP协议的具体信息:
==================================
⼀、概念
1. HTTP协议:即超⽂本传输协议(Hypertext transfer protocol)。是⼀种详细规定了浏览器和Web服务器之间互相通信的规则,它允许将超⽂本标记语⾔(HTML)⽂档从Web服
务器传送到客户端的浏览器。
它可以使浏览器更加⾼效,使⽹络传输减少。它不仅保证计算机正确快速地传输超⽂本⽂档,还确定传输⽂档中的哪⼀部分,以及哪部分内容⾸先显⽰(如⽂本先于图形)等。
HTTP是⼀个应⽤层协议,由请求和响应构成,是⼀个标准的客户端服务器模型。HTTP是⼀个⽆状态的协议。
在Internet中所有的传输都是通过TCP/IP进⾏的。HTTP协议作为TCP/IP模型中应⽤层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。
HTTP是⼀个属于应⽤层的⾯向对象的协议,由于其简捷、快速的⽅式,适⽤于分布式超媒体信息系统。它于1990年提出,经过⼏年的使⽤与发展,得到不断地完善和扩展。⽬前在WWW中使⽤的是HTTP/1.0的第六版,HTTP/1.1的规范化⼯作正在进⾏之中,⽽且HTTP-NG(Next Generation of HTTP)的建议已经提出。
2. ⽆状态协议:
协议的状态是指下⼀次传输可以“记住”这次传输信息的能⼒。
HTTP是不会为了下⼀次连接⽽维护这次连接所传输的信息,为了保证服务器内存。
⽐如客户获得⼀张⽹页之后关闭浏览器,然后再⼀次启动浏览器,再登陆该⽹站,但是服务器并不知道客户关闭了⼀次浏览器。
由于Web服务器要⾯对很多浏览器的并发访问,为了提⾼Web服务器对并发访问的处理能⼒,在设计HTTP协议时规定Web服务器发送HTTP应答报⽂和⽂档时,不保存发出请求的Web浏览器进程的任何状态信息。这有可能出现⼀个浏览器在短短⼏秒之内两次访问同⼀对象时,服务器进程不会因为已经给它发过应答报⽂⽽不接受第⼆期服务请求。由于Web服务器不保存发送请求的Web浏览器进程的任何信息,因此HTTP协议属于⽆状态协议(Stateless Protocol)。
3. HTTP协议是⽆状态的和Connection: keep-alive的区别:
⽆状态是指协议对于事务处理没有记忆能⼒,服务器不知道客户端是什么状态。从另⼀⽅⾯讲,打开⼀个服务器上的⽹页和你之前打开这个服务器上的⽹页之间没有任何联系。
HTTP是⼀个⽆状态的⾯向连接的协议,⽆状态不代表HTTP不能保持TCP连接,更不能代表HTTP使⽤的是UDP协议(⽆连接)。
从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当⼀个⽹页打开完成后,客户端
和服务器之间⽤于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的⽹页,会继续使⽤这⼀条已经建⽴的连接。
Keep-Alive不会永久保持连接,它有⼀个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
4. HTTP中⽂译名问题
HTTP超⽂本传输协议,听上去像是传输层的协议⼀样,但事实上⼤家都知道HTTP和FTP⼀样都是属于应⽤层的协议。既然是应⽤层的协议,怎么就取这样⼀个误导⼈的名称?在对TCP/IP协议还不熟悉的时候,这很容易让⼈误解和纳闷的。在wiki上有这么⼀段话:
HTTP在中国⼤陆被翻译为“超⽂本传输协议”,因为“transfer”在中⽂⾥有“传输”的含意。但依据 HTTP 定制者之⼀的 Roy Fielding博⼠的论⽂[1](6.5.3节),作者专门强调“transfer”表⽰的是“(表述状态的)转移” (Representational State Transfer),⽽不是“传输”(transport)。故其中⽂译名“超⽂本传输协议”恰恰反映了这种误解。更符合原义的译名应该为“超⽂本转移协议”。
⼆、特点
HTTP协议的主要特点可概括如下:
1. ⽀持客户/服务器模式。⽀持基本认证和安全认证。
2. 简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET、HEAD、POST。每种⽅法规定了客户与服务器联系的类型不同。由于HTTP协
议简单,使得HTTP服务器的程序规模⼩,因⽽通信速度很快。
3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4. HTTP 0.9和1.0使⽤⾮持续连接:限制每次连接只处理⼀个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。
HTTP 1.1使⽤持续连接:不必为每个Web对象创建⼀个新的连接,⼀个连接可以传送多个对象,采⽤这种⽅式可以节省传输时间。
5. ⽆状态:HTTP协议是⽆状态协议。⽆状态是指协议对于事务处理没有记忆能⼒。缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传
送的数据量增⼤。另⼀⽅⾯,在服务器不需要先前信息时它的应答就较快。
6. 永远都是客户端发起请求,服务器回送响应。这样就限制了使⽤HTTP协议,⽆法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。【Comment: Socket技
术可以让Server主动发消息给客户端。】
7. HTTP默认的端⼝号为80,HTTPS的端⼝号为443。
三、⼯作流程
⼀次HTTP操作称为⼀个事务,其⼯作过程可分为四步:
1. ⾸先客户机与服务器需要建⽴连接。只要单击某个超级链接,HTTP的⼯作开始。
2. 建⽴连接后,客户机发送⼀个请求给服务器,请求⽅式的格式为:统⼀资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3. 服务器接到请求后,给予相应的响应信息,其格式为⼀个状态⾏,包括信息的协议版本号、⼀个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的
内容。
4. 客户端接收服务器所返回的信息通过浏览器显⽰在⽤户的显⽰屏上,然后客户机与服务器断开连接。
如果在以上过程中的某⼀步出现错误,那么产⽣错误的信息将返回到客户端,有显⽰屏输出。对于⽤户来说,这些过程是由HTTP⾃⼰完成的,⽤户只要⽤⿏标点击,等待
信息显⽰就可以了。
HTTP是运⾏于TCP协议(传输层协议)之上,⽽TCP是⼀个端到端的⾯向连接的协议。所谓的端到端可以理解为进程到进程之间的通信。所以HTTP在开始传输之前,⾸
先需要建⽴TCP连接,⽽TCP连接的过程需要所谓的“三次握⼿”。在TCP三次握⼿之后,建⽴了TCP连接,此时HTTP就可以进⾏传输了。⼀个重要的概念是⾯向连接,既
HTTP在传输完成之间并不断开TCP连接。在HTTP1.1中(通过Connection头设置)这是默认⾏为。
四、头域
每个头域由⼀个域名,冒号(:)和域值三部分组成。域名是⼤⼩写⽆关的,域值前可以添加任何数量的空格符,头域可以被扩展为多⾏,在每⾏开始处,使⽤⾄少⼀个空格或制
表符。
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始⾏(对于请求消息,开始⾏就是请求⾏,对于响应消息,开始⾏就是状态
⾏),消息报头(可选),空⾏(只有CRLF的⾏),消息正⽂(可选)组成。
1、请求消息
HTTP请求由三部分组成,分别是:请求⾏、消息报头、请求正⽂。发出的请求消息格式如下:
请求⾏,例如GET /images/logo.gif HTTP/1.1,表⽰从/images⽬录下请求logo.gif这个⽂件。
请求头,每⼀个报头域都是由名字+“:”+空格+值组成,消息报头域的名字是⼤⼩写⽆关的。例如Accept-Language: en
可选的消息体请求⾏和标题必须以<CR><LF>作为结尾(也就是,回车然后换⾏)。空⾏内必须只有<CR><LF>⽽⽆其他空格。在HTTP/1.1协议中,所有的请求头,除
post外,都是可选的。
(1)请求⾏
以⼀个请求⽅法开头,以空格分开,后⾯跟着请求的URI和协议的版本。
格式如下:Method Request-URI HTTP-Version CRLF
Method表⽰请求⽅法;
Request-URI是⼀个统⼀资源标识符;
HTTP-Version表⽰请求的HTTP协议版本;
CRLF表⽰回车和换⾏(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
a.请求⽅法:
HTTP/1.1协议中共定义了⼋种⽅法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作⽅式:GET    向特定的资源发出请求。注意:GET⽅法不应当被⽤于产⽣“副作⽤”的操作中,例如在web app.中。其中⼀个原因是GET可能会被⽹络蜘b.GET和POST的区别:
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST⽅法是把提交的数据放在HTTP包的Body中。
GET提交的数据⼤⼩有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),⽽POST⽅法提交的数据没有限制。
GET⽅式需要使⽤Request.QueryString来取得变量的值,⽽POST⽅式通过Request.Form来获取变量的值。
GET⽅式提交数据,会带来安全问题,⽐如⼀个登录页⾯,通过GET⽅式提交数据时,⽤户名和密码将出现在URL上,如果页⾯可以被缓存或者其他⼈可以访问这台机器,就可
以从历史记录获得该⽤户的账号和密码。
(2)请求报头
请求报头允许客户端向服务器端传递请求的附加信息以及客户端⾃⾝的信息。
常⽤的请求报头:
2、响应消息
HTTP响应由三部分组成,分别是:状态⾏、响应报头、响应正⽂。
客户端向服务器发送⼀个请求,服务器以⼀个状态⾏作为响应,响应的内容包括:消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及必要的实体内容。根据响
应类别的类别,服务器响应⾥可以含实体内容,但不是所有的响应都有实体内容。
(1)状态⾏
响应头第⼀⾏也称为状态⾏,格式如下:
HTTP-Version 空格 Status-Code 空格 Reason-Phrase CRLF
HTTP-Version表⽰HTTP版本,例如为HTTP/1.1。
Status-Code是结果状态响应码,⽤三个数字表⽰。
Reason-Phrase是个简单的⽂本描述,解释Status-Code的具体原因。Status-Code⽤于机器⾃动识别,Reason-Phrase⽤于⼈⼯理解。Status-Code的第⼀个数字代表响应类别,可能取5个不同的值。后⽤。Status-Code的第⼀个数字代表响应的类别,后续两位描述在该类响应下发⽣的具体状况
a.状态响应码:
ssl协议是指什么
⽆论你何时浏览⼀个⽹页,你的电脑都会通过⼀个使⽤HTTP协议的服务器来获取所请求的数据。在你请求的⽹页显⽰在浏览器之前,⽀配⽹页的⽹站服务器会返回⼀个包含有
状态码的HTTP头⽂件。这个状态码提供了有关所请求⽹页的相关条件信息。如果⼀切正常,⼀个标准⽹页会收到⼀条诸如200的状态码。当然我们的⽬的不是去研究200响应
码,⽽是去探讨那些代表出现错误信息的服务器头⽂件响应码,例如表⽰“未到指定⽹页”的404码。
1xx(信息类):表⽰接收到请求并且继续处理
100 客户必须继续发出请求
101 客户要求服务器根据请求转换HTTP协议版本
2xx(响应成功):表⽰动作被成功接收、理解和接受
200 表明该请求被成功地完成,所请求的资源发送回客户端
201 提⽰知道新⽂件的URL
202 接受和处理、但处理未完成
203 返回信息不确定或不完整
204 请求收到,但返回信息为空
205 服务器完成了请求,⽤户代理必须复位当前已经浏览过的⽂件
206 服务器已经完成了部分⽤户的GET请求
3xx(重定向类):为了完成指定的动作,必须接受进⼀步处理
300 请求的资源可在多处得到
301 本⽹页被永久性转移到另⼀个URL
302 请求的⽹页被转移到⼀个,但客户访问仍继续通过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使⽤新的URL发出新的Request。
303 建议客户访问其他URL或访问⽅式
304 ⾃从上次请求后,请求的⽹页未修改过,服务器返回此响应时,不会返回⽹页内容,代表上次的⽂档已经被缓存了,还可以继续使⽤
305 请求的资源必须从服务器指定的地址得到
306 前⼀版本HTTP中使⽤的代码,现⾏版本中不再使⽤
307 申明请求的资源临时性删除
4xx(客户端错误类):请求包含错误语法或不能正确执⾏
400 客户端请求有语法错误,不能被服务器所理解
401 请求未经授权,这个状态代码必须和WWW-Authenticate报头域⼀起使⽤
HTTP 401.1 未授权:登录失败
HTTP 401.2 未授权:服务器配置问题导致登录失败
HTTP 401.3 ACL 禁⽌访问资源
HTTP 401.4 未授权:授权被筛选器拒绝
HTTP 401.5 未授权:ISAPI 或 CGI 授权失败
402 保留有效ChargeTo头响应
403 禁⽌访问,服务器收到请求,但是拒绝提供服务
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 禁⽌访问:客户证书已经到期或者尚未⽣效
404 ⼀个404错误表明可连接服务器,但服务器⽆法取得所请求的⽹页,请求资源不存在。例如:输⼊了错误的URL
405 ⽤户在Request-Line字段定义的⽅法不允许
406 根据⽤户发送的Accept拖,请求资源不可访问
407 类似401,⽤户必须⾸先在代理服务器上得到授权
408 客户端没有在⽤户指定的饿时间内完成请求
409 对当前资源状态,请求不能完成
410 服务器上不再有此资源且⽆进⼀步的参考地址
411 服务器拒绝⽤户定义的Content-Length属性请求
412 ⼀个或多个请求头字段在当前请求中错误
413 请求的资源⼤于服务器允许的⼤⼩
414 请求的资源URL长于服务器允许的长度
415 请求资源不⽀持请求项⽬格式
416 请求中包含Range请求头字段,在当前请求资源范围内没有range指⽰值,请求也不包含If-Range请求头字段
417 服务器不满⾜请求Expect头字段指定的期望值,如果是代理服务器,可能是下⼀级服务器不能满⾜请求长。
5xx(服务端错误类):服务器不能正确执⾏⼀个正确的请求
500 服务器遇到错误,⽆法完成请求
HTTP 500.11 服务器关闭
HTTP 500.12 应⽤程序重新启动
HTTP 500.13 服务器太忙
HTTP 500.14 应⽤程序⽆效
HTTP 500.15 不允许请求 global.asa
HTTP 500.100 内部服务器错误 - ASP 错误
501 未实现
502 ⽹关错误
503 由于超载或停机维护,服务器⽬前⽆法使⽤,⼀段时间后可能恢复正常
(2)响应报头
服务器需要传递许多附加信息,这些信息不能全放在状态⾏⾥。因此,需要另⾏定义响应报头,⽤来描述这些附加信息。响应报头主要描述服务器的信息和Request-URI的信息。
常⽤的响应报头:
下⾯是⼀个真实的例⼦:
五、缓存的实现原理
Web缓存(cache)位于Web服务器和客户端之间,缓存会根据请求保存输出内容的副本,例如html页⾯,图⽚,⽂件,当下⼀个请求来到的时候:如果是相同的URL,缓存直接使⽤副本响应访问请求,⽽不是向源服务器再次发送请求。
HTTP协议定义了相关的消息头来使Web缓存尽可能好的⼯作。
1.缓存的优点
减少相应延迟:因为请求从缓存服务器(离客户端更近)⽽不是源服务器被相应,这个过程耗时更少,让Web服务器看上去相应更快。
减少⽹络带宽消耗:当副本被重⽤时会减低客户端的带宽消耗;客户可以节省带宽费⽤,控制带宽的需求的增长并更易于管理。
2.客户端缓存⽣效的常见流程
服务器收到请求时,会在200OK中回送该资源的Last-Modified和ETag头,客户端将该资源保存在cache中,并记录这两个属性。当客户端需要发送相同的请求时,会在请求中携带If-Modified-Since和If-None-Match两个头。两个头的值分别是响应中Last-Modified和ETag头的值。服务器通过这两个头判断本地资源未发⽣变化,客户端不需要重新下载,返回304响应。
  - 判断是bai否⼀致的⼯作通常由服务器端判断,第⼀次du服务器返回响zhi应的时候,会发送etag,etag由⽂件内容等信dao息决定,即etag相同,则内容相同.
  - 第⼆次浏览器访问相同资源的时候会把上次服务器发送的etag的值在请求头的if-none-match字段中返回给服务器。服务器判断这个值跟现在内容⽣成的etag是否⼀致,如果⼀致,返回304,不返回内容,如果不同,则返回200并把新内容⼀并返回(包括新的etag)
3.Web缓存机制
HTTP/1.1中缓存的⽬的是为了在很多情况下减少发送请求,同时在许多情况下可以不需要发送完整响应。
前者减少了⽹络回路的数量;HTTP利⽤⼀个“过期(expiration)”机制来为此⽬的。后者减少了⽹络应⽤的带宽;HTTP⽤“验证(validation)”机制来为此⽬的。
HTTP定义了3种缓存机制:
(1)、Freshness:允许⼀个回应消息可以在源服务器不被重新检查,并且可以由服务器和客户端来控制。例如,Expires回应头给了⼀个⽂档不可⽤的时间。Cache-Control中的max-age标识指明了缓存的最长时间;
(2)、Validation:⽤来检查以⼀个缓存的回应是否仍然可⽤。例如,如果⼀个回应有⼀个Last-Modified回应头,缓存能够使⽤If-Modified-Since来判断是否已改变,以便判断根据情况发送请求;
(3)、Invalidation:在另⼀个请求通过缓存的时候,常常有⼀个副作⽤。例如,如果⼀个URL关联到⼀个缓存回应,但是其后跟着POST、PUT和DELETE的请求的话,缓存就会过期。
六、应⽤
1. 断点续传的实现原理
HTTP协议的GET⽅法,⽀持只请求某个资源的某⼀部分;
206 Partial Content 部分内容响应;
Range 请求的资源范围;
Content-Range 响应的资源范围;
在连接断开重连时,客户端只请求该资源未下载的部分,⽽不是重新请求整个资源,来实现断点续传。
分块请求资源实例:
Eg1:Range: bytes=306302- :请求这个资源从306302个字节到末尾的部分;
Eg2:Content-Range: bytes 306302-604047/604048:响应中指⽰携带的是该资源的第306302-604047的字节,该资源共604048个字节;
客户端通过并发的请求相同资源的不同⽚段,来实现对某个资源的并发分块下载。从⽽达到快速下载的⽬的。⽬前流⾏的FlashGet和迅雷基本都是这个原理。
2. 多线程下载的原理

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。