zoukankan      html  css  js  c++  java
  • 图解http 笔记

    一,了解web以及网络基础

      1,使用http协议访问web

        web页面是由web浏览器根据地址栏中指定的url从web服务器获取文件资源等信息然后显示的页面。

        像这种通过发送请求获取服务器资源的web浏览器都可以称为 客户端(client);

        web使用HTTP(超文本传输协议)的协议作为规范, 可以说web是建立在http协议上通信的。

      2,http的诞生

        HTTP/0.9  : http与1990年问世,那时并没有作为正式的标准建立。

        HTTP/1.0 :http正式作为标准是在1996年5月,虽说是初级标准,但现在仍然广泛使用于服务器端。

        HTTP/1.1 :目前主流的http版本。

      3,网络基础 TCP/IP

        通常使用的网络(包括互联网)是在tcp/ip协议族的基础上运作的。而http属于它内部的一个子集。

        网络通信中的规则集合起来统称为tcp/ip。

        tcp/ip的分层:   应用层、传输层、网络层和数据链路层。

          应用层: 决定了向用户提供应用服务时通信的活动。 tcp/ip协议内预存了各类通用的应用服务。比如 FTP(文件传输协议)、DNS(域名系统)。 HTTP协议也处于该层。

          传输层: 对上层应用层提供处于网络连接中的两台计算机之间的数据传输。  在传输层有两个性质不同的协议: TCP(传输控制协议)和 UDP(用户数据报协议)。

          网络层: 又名网络互连层,用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了 通过怎样的路径(传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输线路。

          链路层: 又名数据链路层、网络接口层。用来处理连接网络的硬件部分。包括控制操作系统,硬件设备驱动,NIC(网络适配器,即网卡),及光纤等物理可见部分,硬件上的范畴都在链路层的作用范围内。

        利用tcp/ip协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则由应用层往上走。

        举例http请求: 首先,作为发送端的客户端在应用层(http协议)发出一个想看到某个web页面的http请求。

                 接着为了传输方便,在传输层(TCP协议)把从应用层收到的数据(http请求报文)进行分割,并在每个报文上打上标记序号及端口号后转发给网络层。 

                在网络层(ip协议),增加作为通信目的地的MAC地址后转发给链路层,这样一来,发送网络的通信请求就准备齐全了。

              接收端的服务器在链路层收到数据,按序往上层发送,一直到应用层,才算是真正接收到了客户端发来的http请求。

      4,与http关系密切的协议: IP、TCP和DNS

        负责传输的IP协议:

          按层次的话,IP协议位于网络层。几乎所有使用网络的系统都会用到ip协议。

          IP协议的作用是把各种数据包传送给对方。要确保确实传送到对方那里,要满足各类条件。其中两个重要的条件是IP地址和MAC地址。

          IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本不会更改。

          IP间的通信依赖MAC地址。一般的网络通信都是需要经过多台计算机和网络设备中转的,在中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时就会采用ARP协议, 这时一种用以解析地址的协议。根据通信方的ip地址就可以反查出MAC地址。

        确保可靠性的TCP协议

          按层次分,TCP位于传输层,提供可靠的字节流服务。也就是说 TCP协议为了更容易传送大数据,把数据分割。然后确认数据最终是否送达到对方。

          为了确保无误的将数据送达目标处,TCP协议采用了三次握手策略。  发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据报以示传达确认信息。最后,发送端再回传一个带ACK标注的数据包,代表‘握手’结束。 如果握手过程中某个阶段中断,则TCP协议会再次以相同顺序发送相同的数据包。

        负责域名解析的DNS服务

          DNS和HTTP协议一样位于应用层。它提供域名到IP地址之间的解析服务。

          计算机可以被赋予IP地址,也可以被赋予主机名和域名。用户通常使用主机名或域名来访问对方的计算机,因为相比IP的一长串数字更容易记忆。 所以DNS服务就用来通过域名或主机查找IP地址,或者逆向的从IP地址反查找域名。

          

           

      5,URI和URL

        与URI(统一资源标识符)相比,我们更熟悉URL(统一资源定位符)。URL正是使用web浏览器等访问web页面时需要输入的网页地址。

        统一资源标识符:

          URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。

          采用HTTP协议时,协议方案就是http,除此之外,还有ftp、mailto、telnet、file等。

          URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置), 可见URL是URI的子集。

        URI格式:

          表示指定的URI,要使用涵盖全部必要信息的绝对URI、绝对URL以及相对URL。相对URL,是指从浏览器中基本URI处指定的URL。

          绝对URI的格式:   

            协议名:  

            登录信息:  (选填)

            服务器地址:  使用绝对URI必须指定访问的服务器地址。

            服务器端口号: 指定服务器连接的网络端口号

            带层次的文件路径: 指定服务器上的文件路径来定位特指的资源

            查询字符串: 

            片段标识符:

        

     二:简单的HTTP协议

      1,HTTP协议用于客户端和服务器端之间的通信

        请求访问文本或者图像等资源的一端称为客户端,提供资源响应的一端称为服务器端。

      2,通过请求和响应的交换达成通信

        请求报文中包含:   请求方法, 请求URI,协议版本,可选的请求首部字段和内容实体构成的。

      3,HTTP是不保存状态的协议

        HTTP是一种不保存状态,即无状态的协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。

      4,请求URI定位资源

        HTTP协议使用URI定位互联网上的资源。正是因为URI的特定功能,在互联网上任意位置的资源都能访问到。

        当客户端请求访问资源时,URI需要将作为请求报文中的请求URI包含在内。

      5,告知服务器意图的HTTP方法(Method)

        GET: 

          GET方法用来请求访问已被URI识别的资源。 指定的资源经服务器端解析后返回 响应内容。 也就是说如果请求的是文本,那就保持原样返回,如果是像CGI(通用网关接口)那样的程序,则返回经过执行后的输出结果。

        POST:

          POST方法用来传输实体的主体。

        PUT:传输文件

          PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

        HEAD:获得报文首部

          HEAD方法和GET方法一样,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间等。

        DELETE:删除文件

          DELETE方法用来删除文件,与PUT方法相反。DELETE方法按请求URI删除指定的资源。

        OPTIONS :询问支持的方法

          OPTIONS方法用来查询针对请求URI指定的资源支持的方法。

      6,使用方法下达命令

        向请求URI指定的资源发送请求报文时,采用称为方法的命令。

        方法的作用在于可以指定请求的资源按期望产生某种行为。

      7,持久连接节省通信量

        HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。

        为了解决TCP连接的问题,HTTP1.1提出了持久连接(HTTP keep-alive)的方法,持久连接的特定是:只要任意一端没有明确提出断开连接,则保持TCP连接状态。  

        持久连接使得多数请求以管线化方式发送成为可能。 管线化技术可以同时并行发送多个请求,而不需要一个接一个的等待响应了。

      8,使用Cookie的状态管理

        HTTP是无状态协议,它不对之前发生过的请求和响应状态进行管理,也就是说无法根据之前的状态进行本次的请求处理。

        Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

        Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段,通知客户端保存Cookie,当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是哪个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

        

    三: HTTP报文内的HTTP信息

      1,HTTP报文

        用于HTTP协议交互的信息称为HTTP报文。分为请求报文和响应报文。报文是由多行数据构成的字符串文本。

        HTTP报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分, 通常并不一定要有报文主体。

      2,请求报文和响应报文的结构

        请求报文和响应报文的首部内容由以下数据组成:

          请求行: 包含用于请求的方法,请求URI和HTTP版本

          状态行: 包含表明响应结果的状态码,原因短语和HTTP版本

          首部字段: 包含表示请求和响应的各种条件和属性的各类首部,一般有4种首部,分别为通过首部、请求首部、响应首部和实体首部

          其他:  可能包含HTTP的RFC里未定义的首部(Cookie等)

      3,编码提升传输速率

        HTTP在传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升传输速率。通过在传输时编码能有效的处理大量的访问请求。由于编码的操作需要计算机完成,所以会消耗更多的CPU资源。

        报文:  是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。

        实体: 作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

        HTTP报文的主体用于传输请求或响应的实体主体。通常报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,这才导致它和报文主体产生差异。

        内容编码: 指明在实体内容上的编码格式,保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。

        常见的内容编码有以下几种: gzip(GUN zip)、compress(UNIX系统的标准压缩)、deflate(zlib)、identity(不进行编码)

        分割发送的分块传输编码: 在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。 每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用 “0(CR+LF)”来标记。

      4,发送多种数据的多部分对象集合

        HTTP协议中采纳了多部分对象集合的方法,可以允许多个不同类型的数据包含在一份报文主体内。通常是图片或文本文件上传时使用。

        多部分对象集合包含的对象如下:

          multipart/form-data :web表单文件上传时使用

          multipart/byteranges: 状态码206响应报文包含了多个范围的内容时使用

          在http报文中使用多部分对象集合时,需要在首部字段里加上Content-type。

          使用bondary字符串来划分多部分对象集合指明的各类实体。

      5,获取部分内容的范围请求

        在下载资源时可以指定下载的实体范围,这种请求叫范围请求。

        执行范围请求时,会用到首部字段Range来指定资源的byte范围。

      6,内容协商返回最适合的内容

        同一个web网站可能存在多分相同内容的页面。当默认语言不同时,访问相同URI会显示对应语言的web页面,这样的机制为内容协商

        内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。

        包含在请求报文中的某些首部字段就是判断的基准。

    四,返回结果的HTTP状态码

      1,状态码告知从服务器端返回的请求结果

        状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。(是正常处理还是出现错误)

        状态码的分类:

          1xx :  信息性状态码(接收的请求正在处理)

          2xx :  成功状态码(请求正常处理完毕)

          3xx:  重定向状态码(需要进行附加操作以完成请求)

          4xx: 客户端错误状态码(服务器无法处理请求)

          5xx: 服务器错误状态码(服务器处理请求出错)

      2,2xx 成功

        200 OK :表明请求被正常处理了。    

        204 NO Content: 表明服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分。另外也不允许返回任何实体的主体。 比如发出请求返回204,那么浏览器的页面不会发生更新。(一般在只需要往服务器发信息,而对客户端不需要发送新信息的页面使用)

        206 Partial Content: 表明客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。

      3, 3xx重定向

        表明浏览器需要执行某些特殊的处理以正确处理请求。

        301 Moved Permanently: 永久性重定向,表示请求的资源被分配了新的URI,以后应使用资源现在所指的URI。

        302 Found: 临时性重定向, 资源被分配了新的URI, 希望用户本次能使用新的URI访问。

        303 See Other: 状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

        当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,删除请求报文内的主体,之后请求会自动再次发送。

        304 Not Modified: 客户端发送附带条件的请求,服务端允许请求,但因为条件未改变。可以使用客户端未过期的缓存。 304状态码返回时不包含任何响应的主体部分。

        307 Temporary Redirect: 临时重定向,和302含义相同,但不会从POST变为GET

      4, 4xx 客户端错误

        表明客户端是发生错误的原因所在

        400 Bad Request: 表示请求报文中存在语法错误。

        401 Unauthorized: 表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。若之前已经进行过一次请求,则表示用户认证失败。

        403 Forbidden:表示对请求资源的访问被服务器拒绝了。

        404 Not Found: 服务器上无法找到请求的资源。

      5, 5xx服务器错误

        表明服务器本身发生了错误。

        500 Internal Server Error : 表示服务器端在执行请求时发生了错误。

        503 Service Unavailable: 表示服务器暂时处于超负载或正在停机维护,无法处理请求。如果事先得知解决状况需要的时间,最好写入Retry-After首部字段再返回给客户端。

    五,与HTTP协作的web服务器

      1,用单台虚拟主机实现多个域名

        http1.1规范允许一台http服务器搭建多个web站点。这是因为利用了虚拟主机的功能。

        所以如果一台服务器内托管了多个域名,收到请求的时候就要弄清楚要访问哪个域名。因为部署在同一个服务器上不同域名的访问IP地址会相同。 所以在发送HTTP请求时,必须在Host首部内完整指定主机名或者域名的URI。

      2,通信数据转发程序:代理、网关、隧道

        HTTP通信时,除了客户端和服务器外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。

        这些应用程序和服务器可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服务器发送的响应再转发给客户端。

        代理: 有转发功能的应用程序。接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

          使用理由: 利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制。

          分类:

            缓存代理:代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上。当再次接受到相同的资源请求,可以直接使用。

            透明代理:转发请求或者响应时,不对报文做任何加工的代理类型被称为透明代理。          

        网关:转发其他服务器通信数据的服务器。接收从客户端发送来的请求时,它就像自己拥有资源资源的源服务器一样对请求进行处理。

          网关能使通信线路上的服务器提供非HTTP协议服务。

        隧道:在相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序。

          隧道可以按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。确保客户端能与服务器进行安全的通信。

      3,保存资源的缓存

        缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可以减少对源服务器的访问。节省流量和通信时间。

        缓存的有效期限:

          即便有缓存,也会因为客户端的要求、缓存的有效期等原因,向源服务器确认资源的有效性。

        客户端缓存:

          浏览器缓存如果有效,就不必再向服务器请求相同的资源。

    六:HTTP首部

      1,HTTP报文首部

        HTTP协议的请求和响应报文中必定包含HTTP首部。

      2,HTTP首部字段

        构成报文的要素之一。 包括 通用首部字段、请求首部字段、响应首部字段和实体首部字段。

      3,通用首部字段

        Cache-Control: 操作缓存的工作机制。

        Connection: 控制不再转发给代理的首部字段、管理持久连接。 HTTP1.1版本默认的都是持久连接,如果服务器端想明确断开连接时,则指定Connection首部字段的值为Close。

        Date: 创建HTTP报文的日期和时间。

        Pragma: 历史遗留字段,向后兼容的写法, 定义不缓存。

        Trailer: 事先说明在报文主体后记录了哪些首部字段。

        Transfer-Encoding: 传输报文主体时采用的编码方式

        Upgrade: 用于检测HTTP协议及其他协议是否可以使用更高的版本进行通信。

        Via: 追踪客户端与服务器之间的请求和响应报文的传输路径。

        Warning:告知用户一些与缓存相关的问题的警告。

      4,请求首部字段

        Accept: 告知服务器 用户代理能够处理的媒体类型及媒体类型的相对优先级。

        Accept-Charsest: 通知服务器用户代理能够支持的字符集和字符集的相对优先顺序。

        Accept-Encoding: 告知服务器用户代理支持的内容编码及优先级顺序。

        Accept-Language: 告知用户代理能够处理的语言 和语言优先级。

        Authorization: 告知服务器用户代理的认证信息。

        Expect: 告知服务器期望出现的某种特定行为。

        From: 告知服务器用户的电子邮件地址。

        Host:必须字段, 告知服务器请求的资源所处的互联网主机名和端口号。

        If-Match:条件请求。

        Referer: 告知服务器请求的原始资源的URI。

        User-Agent: 传达给服务器 浏览器的名称和用户代理名称。

      5,响应首部字段

        Accept-Ranges:告知客户端 服务器是否能处理范围请求,以指定获取服务器端某个部分的资源

        Server: 告知客户端当前服务器上安装的HTTP服务器应用程序的信息。

      6,实体首部字段

        Allow: 通知客户端能够支持Request-URI指定资源的所有HTTP方法。

        Content-Encoding: 告知客户端服务器对实体的主体部分选用的内容编码方式。

        Content-MD5:

        Content-Type: 说明实体主体内对象的媒体类型

        Expires: 将资源失效的日期告知客户端。

      7,为Cookie服务的首部字段

        Set-Cookie: 

          expires属性: 指定浏览器可发送Cookie的有效期。

          path属性: 限制指定Cookie的发送范围

          domain属性: 匹配结尾一致的域名。

          secure属性:限制web页面仅在HTTPs安全连接时才可以发送Cookie。

          HttpOnly: 使js无法获得Cookie。

        

    七,确保web安全的HTTPS

      1,HTTP的缺点

        通信使用明文、

          由于HTTP本身不具备加密功能,所以HTTP报文使用明文方式发送。可以采用加密技术。

          一种是将通信加密:用SSL建立安全通信线路,就可以在这个线路上进行HTTP通信了, 这种技术被称为HTTPS。

          另一种是内容加密:把HTTP报文的内容进行加密。(客户端和服务端同时具备加密和解密机制)

        不验证通信方的身份、

          无法确定客户端和服务器是 目标的客户端和服务器。无法阻止DoS攻击。

          使用SSL则可以确认通信方,通过证书的确认。

         无法证明报文的完整性

          请求或响应的内容容易遭到篡改,

      2,HTTP + 加密 + 认证 + 完整性保护 = HTTPS

        HTTPS就是身披SSL外壳的HTTP,

     

    八: 确认访问用户身份的认证

      1,基于表单认证

        Session管理及Cookie应用

          服务端发送用以识别用户的Session ID,响应的时候会在首部字段Set-Cookie内写入Session ID。客户端接收到session后,会将其作为cookie保存在本地,下次发送请求时,会自动发送cookie。服务器通过cookie中的session进行验证。

    九: 基于HTTP的功能追加协议

      1,消除HTTP瓶颈的SPDY

        Ajax的解决办法

          js和DOM的操作,以达到局部Web页面替换加载的异步通信手段。

          核心技术是XMLHttpRequest的API,通过js就能调用和服务器进行HTTP通信。

        comet的解决方法

          服务器内容更新,Comet就直接给客户端返回响应。

        SPDY

          在TCP/IP的应用层与传输层之间通过新加入 会话层的形式运作。 并规定使用SSL。

          SPDY有以下的功能:

            多路复用流:通过单一的TCP连接,可以处理多个HTTP请求。

            赋予请求优先级: 可以给请求逐个分配优先级

            压缩HTTP首部: 压缩HTTP请求和响应的首部

            推送功能: 支持服务器主动向客户端推送数据。

            服务器提示功能: 服务器可以主动提示客户端请求所需的资源

      2,使用浏览器进行全双工通信的WebSocket

        websocket就是 web浏览器与web服务器之间全双工通信标准。

        一旦web服务器和客户端之间建立起了websocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。

        连接的发起方还是客户端,而一旦建立了websocket连接,任意一方都可以直接向对方发送报文。

        为了实现websocket,需要用到http的Upgrade首部字段,告知服务器通信协议发生变化,以达到握手的目的。

        sec-WebSockte-Key 字段记录着握手过程中必不可少的键值。Sec-webSocket-Protocol字段内记录使用的子协议。

      3,web服务器管理文件的WebDAV

        webDAV是一个可对web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。

    十,构建web内容的技术

      1,HTML

      2,CSS

     

    十一, Web的攻击技术

      1,针对web的攻击技术

        HTTP不具备必要的安全功能

        在客户端即可篡改请求

        针对web应用的攻击模式

          以服务器为目标的主动攻击: 直接访问web应用,把攻击代码传入的攻击模式(SQL注入和OS命令注入)

          以服务器为目标的被动共计

        因输出值转义不完全引发的安全漏洞

          跨站脚本攻击:  XSS是攻击者利用预先设置的陷阱触发的被动攻击

           对用户Cookie的窃取攻击

        SQL注入攻击

        OS命令注入

        HTTP首部注入攻击

          向响应首部字段添加任意响应首部或主体的一种攻击。

        

        加密过的数据导出明文通常有以下几种方法:

          1,穷举法 、字典攻击进行类推

          2,彩虹表

          3,拿到密钥

          4,加密算法的漏洞

        DoS攻击

          让运行中的服务呈停止状态的攻击。(发送大量的请求)

        

        

        

  • 相关阅读:
    UVALive2287 POJ1047 HDU1313 ZOJ1073 Round and Round We Go【大数+数学计算】
    HDU1559 最大子矩阵【DP】
    51Nod-1050 循环数组最大段和【最大子段和+最小子段和+DP】
    51Nod-1051 最大子矩阵和【最大子段和+DP】
    UVALive2288 POJ1050 HDU1081 ZOJ1074 To The Max【最大子段和+DP】
    UVALive2363 POJ1005 HDU1065 ZOJ1049 I Think I Need a Houseboat【数学计算】
    UVALive6050 Primes【素数筛选+前缀和】
    POJ3978 Primes【素数筛选+前缀和】
    sql里的多行多列转一行多列小技巧
    实体类作为另一个实体类的属性
  • 原文地址:https://www.cnblogs.com/wjyz/p/10475569.html
Copyright © 2011-2022 走看看