转载自:http://www.noobyard.com/article/p-ncnwnhwx-e.html
1.简介
超文本传输协议(HTTP)是一种通讯协议,它容许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)
服务器之间互相通讯的规则,经过因特网传送万维网文档的数据传送协议。HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。它能够使浏览器更加高效,使网络传输减小。
它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。跨域在Internet中全部的传输都是经过TCP/IP进行的。HTTP协议做为TCP/IP模型中应用层的协议也不例外。
HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了常说的HTTPS。 HTTP默认的端口号为80,HTTPS的端口号为443。
2.特点
- 1)支持客户/服务器模式。支持基本认证和安全认证。
- 2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。
- 3)灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 4)HTTP 0.9和1.0使用非持续链接:限制每次链接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开链接。HTTP 1.1使用持续链接:没必要为每一个web对象建立一个新的链接,一个链接能够传送多个对象,采用这种方式能够节省传输时间。
- 5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。
HTTP协议是无状态的和Connection: keep-alive的区别:
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另外一方面讲,打开一个服务器上的网页和你以前打开这个服务器上的网页之间没有任何联系。
HTTP是一个无状态的面向链接的协议,无状态不表明HTTP不能保持TCP链接,更不能表明HTTP使用的是UDP协议(无链接)。
从HTTP/1.1起,默认都开启了Keep-Alive,保持链接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,若是客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接。
Keep-Alive不会永久保持链接,它有一个保持时间,能够在不一样的服务器软件(如Apache)中设定这个时间。
3.工作流程
一次HTTP操做称为一个事务,其工做过程可分为四步:
- 1)首先客户机与服务器须要创建链接。只要单击某个超级连接,HTTP的工做开始。
- 2)创建链接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
- 3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
- 4)客户端接收服务器所返回的信息经过浏览器显示在用户的显示屏上,而后客户机与服务器断开链接。
若是在以上过程当中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来讲,这些过程是由HTTP本身完成的,用户只要用鼠标点击,等待信息显示就能够了。
在上图中,可清晰的看到客户端浏览器(ip为192.168.1.6)与服务器(115.239.210.36)的交互过程:
- 1)No1:浏览器(192.168.1.6)向服务器(115.239.210.36)发出链接请求。此为TCP三次握手第一步,此时从图中能够看出,为SYN,seq:X (x=0);
- 2)No2:服务器(115.239.210.36)回应了浏览器(192.168.1.6)的请求,并要求确认,此时为:SYN,ACK,此时seq:y(y为0),ACK:x+1(为1)。此为三次握手的第二步;
- 3)No3:浏览器(192.168.1.6)回应了服务器(115.239.210.36)的确认,链接成功。为:ACK,此时seq:x+1(为1),ACK:y+1(为1)。此为三次握手的第三步;
- 4)No4:浏览器(192.168.1.6)发出一个页面HTTP请求;
- 5)No5:服务器(115.239.210.36)确认;
- 6)No6:服务器(115.239.210.36)发送数据;
- 7)No8:客户端浏览器(192.168.1.6)确认;
- 8)No81:客户端(192.168.1.6)发出一个图片HTTP请求;
- 9)No202:服务器(115.239.210.36)发送状态响应码200 OK。
4.HTTP请求方法
HTTP/1.1协议中共定义了八种方法(有时也叫“动做”)来代表Request-URI指定的资源的不一样操做方式:
OPTIONS - 返回服务器针对特定资源所支持的HTTP请求方法。也能够利用向Web服务器发送'*'的请求来测试服务器的功能性。
HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法能够在没必要传输整个响应内容的状况下,就能够获取包含在响应消息头中的元信息。
该方法经常使用于测试超连接的有效性,是否能够访问,以及最近是否更新。
GET - 向特定的资源发出请求。注意:GET方法不该当被用于产生“反作用”的操做中,例如在web app.中。其中一个缘由是GET可能会被网络蜘蛛等随意访问。
POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会致使新的资源的创建和/或已有资源的修改。
PUT - 向指定资源位置上传其最新内容。
DELETE - 请求服务器删除Request-URI所标识的资源。
TRACE- 回显服务器收到的请求,主要用于测试或诊断。
CONNECT - HTTP/1.1协议中预留给可以将链接改成管道方式的代理服务器。
PATCH - 用来将局部修改应用于某一资源,添加于规范RFC5789。
方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);
当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
HTTP服务器至少应该实现GET和HEAD方法,其余方法都是可选的。此外,除了上述方法,特定的HTTP服务器还可以扩展自定义的方法。
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上,若是页面能够被缓存或者其余人能够访问这台机器,就能够从历史记录得到该用户的帐号和密码。
5.缓存的实现原理
WEB缓存(cache)位于Web服务器和客户端之间。缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:若是是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。
HTTP协议定义了相关的消息头来使WEB缓存尽量好的工做。
1)缓存的优势
- 减小相应延迟:由于请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让web服务器看上去相应更快。
- 减小网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户能够节省带宽费用,控制带宽的需求的增加并更易于管理。
2)客户端缓存生效的常见流程
服务器收到请求时,会在200 OK中回送该资源的Last-Modified和ETag头,客户端将该资源保存在cache中,并记录这两个属性。当客户端须要发送相同的请求时,会在请求中携带If-Modified-Since和If-None-Match两个头。
两个头的值分别是响应中Last-Modified和ETag头的值。服务器经过这两个头判断本地资源未发生变化,客户端不须要从新下载,返回304响应。
3)Web缓存机制
HTTP/1.1中缓存的目的是为了在不少状况下减小发送请求,同时在许多状况下能够不须要发送完整响应。前者减小了网络回路的数量;HTTP利用一个“过时(expiration)”机制来为此目的。
后者减小了网络应用的带宽;HTTP用“验证(validation)”机制来为此目的。
HTTP定义了3种缓存机制:
- Freshness:容许一个回应消息能够在源服务器不被从新检查,而且能够由服务器和客户端来控制。例如,Expires回应头给了一个文档不可用的时间。Cache-Control中的max-age标识指明了缓存的最长时间;
- Validation:用来检查以一个缓存的回应是否仍然可用。例如,若是一个回应有一个Last-Modified回应头,缓存可以使用If-Modified-Since来判断是否已改变,以便判断根据状况发送请求;
- Invalidation:在另外一个请求经过缓存的时候,经常有一个反作用。例如,若是一个URL关联到一个缓存回应,可是其后跟着POST、PUT和DELETE的请求的话,缓存就会过时。
6.HTTP几个相关知识点
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)多线程下载的原理
下载工具开启多个发出HTTP请求的线程;每一个http请求只请求资源文件的一部分:Content-Range: bytes 20000-40000/47000;合并每一个线程下载的文件。
3)http代理Proxy Server,
http代理功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。
代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它以后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所须要的信息
并传送给你的浏览器。并且,大部分代理服务器都具备缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,若是浏览器所请求的数据在它本机的存储器上已经存在并且是最新的,
那么它就不从新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提升浏览速度和效率。更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,
它的工做主要在开放系统互联(OSI)模型的对话层。
http代理服务器的主要功能:
- 突破自身IP访问限制,访问国外站点。如:教育网、169网等网络用户能够经过代理访问国外网站;
- 访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源的容许访问范围以内),使用教育网内地址段免费代理服务器,就能够用于对教育 网开放的各种FTP下载上传,以及各种资料查询共享等服务;
- 突破中国电信的IP封锁:中国电信用户有不少网站是被限制访问的,这种限制是人为的,不一样Serve对地址的封锁是不一样的。因此不能访问时能够换一个国外的代理服务器试试;
- 提升访问速度:一般代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息经过时,同时也将其保存到缓冲区中,当其余用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提升访问速度;
- 隐藏真实IP:上网者也能够经过这种方法隐藏本身的IP,免受攻击。
对于客户端浏览器而言,http代理服务器至关于服务器。而对于Web服务器而言,http代理服务器又担当了客户端的角色。
7.HTTPS传输协议原理
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容请看SSL。
两种基本的加解密算法类型
- 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等。
- 非对称加密:密钥成对出现(且根据公钥没法推知私钥,根据私钥也没法推知公钥),加密解密使用不一样密钥(公钥加密须要私钥解密,私钥加密须要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
HTTPS传输过程
客户端产生的密钥只有客户端和服务器端能获得;加密的数据只有客户端和服务器端才能获得明文;客户端到服务端的通讯是安全的。
8.http的状态响应码
1**(信息类):表示接收到请求而且继续处理
- 100——客户必须继续发出请求
- 101——客户要求服务器根据请求转换HTTP协议版本
2**(响应成功):表示动做被成功接收、理解和接受
- 200——代表该请求被成功地完成,所请求的资源发送回客户端
- 201——提示知道新文件的URL
- 202——接受和处理、但处理未完成
- 203——返回信息不肯定或不完整
- 204——请求收到,但返回信息为空
- 205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
- 206——服务器已经完成了部分用户的GET请求
3**(重定向类):为了完成指定的动做,必须接受进一步处理
- 300——请求的资源可在多处获得
- 301——本网页被永久性转移到另外一个URL
- 302——请求的网页被转移到一个新的地址,但客户访问仍继续经过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
- 303——建议客户访问其余URL或访问方式
- 304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,表明上次的文档已经被缓存了,还能够继续使用
- 305——请求的资源必须从服务器指定的地址获得
- 306——前一版本HTTP中使用的代码,现行版本中再也不使用
- 307——申明请求的资源临时性删除
4**(客户端错误类):请求包含错误语法或不能正确执行
- 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错误代表可链接服务器,但服务器没法取得所请求的网页,请求资源不存在。eg:输入了错误的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头字段指定的指望值,若是是代理服务器,多是下一级服务器不能知足请求长。
5**(服务端错误类):服务器不能正确执行一个正确的请求
- 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 - 网关错误
- HTTP 503:因为超载或停机维护,服务器目前没法使用,一段时间后可能恢复正常