• 【ASP.NET】Http协议学习笔记


    HTTP(Hypertext Transfer Protocol, 超文本传输协议),用于从WWW服务器传输超文本到本地浏览器的传输协议。你可以通过协议定制传送的内容,从而减少网络传输。由于HTTP协议支持的服务不限于WWW,还可以是其它服务,因而HTTP协议允许用户在统一的界面下,采用不同的协议访问不同的服务,如FTP、Archie、SMTP、NNTP等。另外,HTTP协议还可用于名字服务器和分布式对象管理。

    HTTP是以明文方式发送数据.


    HTTP协议是建立在TCP/IP协议之上的应用层协议。不同的协议对应着不同的应用。

    现在广泛使用的版本HTTP/1.1。


    HTTP协议基于请求/响应模式(Request/Response).客户与服务器建立连接后,按照协议规定格式,发送请求到服务器,客户得到请求后,返回响应信息给客户。

    HTTP使用的端口号,通常为80。
    ----------------------------------------------------------------------------------------------
    HTTP协议简介
      HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
      HTTP协议的主要特点可概括如下:
    1.支持客户/服务器模式。
    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
    由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
    ----------------------------------------------------------------------------------------------
    HTTP历史介绍:

    HTTP的早期版本为HTTP/0.9,它适用于各种数据信息的简洁快速协议,但是其远不能满足日益发展各种应用的需要。但HTTP/0.9作为HTTP协议具有典型的无状态性:每个事务都是独立进行处理的,当一个事务开始就在客户与服务器之间建立一个连接,当事务结束时就释放这个连接。HTTP/0.9包含Simple-Request&Simple-Responsed的报文结构。但是客户无法使用内容协商,所以服务器也无法返回实体的媒体类型。
      1982年,Tim Berners-Lee提出了HTTP/1.0,在此后的不断丰富和发展中,HTTP/1.0成为最重要的面向事务的应用层协议。该协议对每一次请求/响应,建立并拆除一次连接。其特点是简单、易于管理,所以它符合了大家的需要,得到了广泛的应用。其缺点是仍会发生下列问题:对用户请求响应慢、网络拥塞严重、安全性等。
      1997年形成的HTTP/1.1,也就是现在普遍使用的协议,在持续连接操作机制中实现流水方式,即客户端需要对同一服务器发出多个请求时,其实现在多数的网页都是有多部分组成(比如多张图片),可用流水线方式加快速度,流水机制就是指连续发出多个请求并等到这些请求发送完毕,再等待响应。这样就大大节省了单独请求对响应的等待时间,使我们得到更快速的浏览。
      另外,HTTP/1.1服务器端处理请求时按照收到的顺序进行,这就保证了传输的正确性。当然,服务器端在发生连接中断时,会自动的重传请求,保证数据的完整性。
      HTTP/1.1还提供了身份认证、状态管理和Cache缓存等机制。这里,我想特别提一下关于HTTP/1.1中的Cache缓存机制对HTTP/1.0的不足之处的改进,它严格全面,既可以减少时间延迟、又节省了带宽。HTTP/1.1采用了内容协商机制,选择最合适的用户的内容表现形式。
      现在,很多地方都有用到的虚拟主机技术在HTTP/1.1中也可以实现。所谓的虚拟主机技术,就是同一主机地址实际对应多台主机。通俗的讲,当你同时在一个网站申请两个主页时,用协议分析仪可以发现其实这两个主页对应的是同一个IP地址。这样用多台完全相同的机器形成WWW服务器就可以提高处理的吞吐量。
      传统的解决方案是改造域名服务器使其可以根据一定的算法将同一域名解释成不同的IP地址。分别对应虚拟主机的每台机器,其缺点是要求每台机器占用完全独立的IP地址,这与IP地址的缺乏是相矛盾的。
      HTTP/1.1提供的解决方案在HTTP协议自身中加入了指定不同主机的功能,从而多台主机可以共享一个IP地址,既提高了性能又便于管理。
      因为HTTP/1.1是Internet现行的标准协议,这里详细介绍其相关语法。
         首先,HTTP/1.1格式可写为:
      其中请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:
      GET: 请求指定的页面信息,并返回实体主体。
      HEAD: 只请求页面的首部。
      POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
      PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
      DELETE: 请求服务器删除指定的页面。
      OPTIONS: 允许客户端查看服务器的性能。
      TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
      PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
      MOVE: 请求服务器将指定的页面移至另一个网络地址。
      COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
      LINK: 请求服务器建立链接关系。
      UNLINK: 断开链接关系。
      WRAPPED: 允许客户端发送经过封装的请求。
      Extension-mothed:在不改动协议的前提下,可增加另外的方法。比如:
      GET /index.html HTTP/1.1
      Accept: text/plain /*纯ASCII码文本文件*/
      Accept: text/html /*HTML文本文件*/
      User-Agent:Mozilla/4.5(WinNT)
      说明浏览器使用Get方法请求文档/index.html。浏览器则只允许接收纯ASCII码文本文件和HTML文本文件,其使用的引擎是Mozilla/4.5(Netscape)。
    ----------------------------------------------------------------------------------------------
    HTTP协议的几个重要概念
      1.连接(Connection):一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。
      2.消息(Message):HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。
      3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号
      4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。
      5.资源(Resource):由URI标识的网络数据对象或服务。
      6.实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。
      7.客户机(Client):一个为发送请求目的而建立连接的应用程序。
      8.用户代理(User agent):初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。
      9.服务器(Server):一个接受连接并对请求返回信息的应用程序。
      10.源服务器(Origin server):是一个给定资源可以在其上驻留或被创建的服务器。
      11.代理(Proxy):一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。
      代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。
      12.网关(Gateway):一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。
      网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
      13.通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。
      14.缓存(Cache):反应信息的局域存储。
    ----------------------------------------------------------------------------------------------
    HTTP协议的运作方式
    HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
      许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理(UA)和源服务器(O)之间通过一个单独的连接来完成。
         当一个或多个中介出现在请求/响应链中时,情况就变得复杂一些。中介由三种:代理(Proxy)、网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。
        在用户代理(UA)和源服务器(O)之间有三个中介(A,B和C)。一个通过整个链的请求或响应消息必须经过四个连接段。这个区别是重要的,因为一些HTTP通讯选择可能应用于最近的连接、没有通道的邻居,应用于链的终点或应用于沿链的所有连接。尽管图2-2是线性的,每个参与者都可能从事多重的、并发的通讯。例如,B可能从许多客户机接收请求而不通过A,并且/或者不通过C把请求送到A,在同时它还可能处理A的请求。
      任何针对不作为通道的汇聚可能为处理请求启用一个内部缓存。缓存的效果是请求/响应链被缩短,条件是沿链的参与者之一具有一个缓存的响应作用于那个请求。下图说明结果链,其条件是针对一个未被UA或A加缓存的请求,B有一个经过C来自O的一个前期响应的缓存拷贝。
          在Internet上,HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP 80,但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可靠的传输。
      以上简要介绍了HTTP协议的宏观运作方式,下面介绍一下HTTP协议的内部操作过程。
      首先,简单介绍基于HTTP协议的客户/服务器模式的信息交换过程,如图2-4所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。
          在WWW中,“客 户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。WWW服务器运行时,一直在TCP80端口(WWW的缺省端口)监听,等待连接的出现。
    ----------------------------------------------------------------------------------------------
    HTTP协议下客户/服务器模式中信息交换的实现:
    1、客户机与服务器建立联系
        与服务器建立连接,就是与Socket建立连接,因此要指定机器名称、资源名称和端口号,可以通过URL来提供这些信息。URL的格式为:
              HTTP://<IP地址>/[端口号]/[路径][?<查询信息>]
        资源的缺省值是INDEX或DEFAULT,断口号缺省为80.

    2、客户向服务器提出请求
        请求信息包括希望返回的文件名和客户机信息.客户机信息以请求头发送给服务器,请求头包括HTTP方法和头字段.
        HTTP方法常用的有GET、HEAD、POST,而PUT、DELETE、LINK、UNLINK方法许多HTTP服务器都不使用。
        头字段包括:
              。DATE:请求发送的日期和时间
              。PARGMA:用于向服务器传输与实现无关的信息。这个字段还用于告诉代理服务器,要从实际服务器而不是从高速缓存取资源
              。FORWARDED:可以用来追踪机器之间,而不是客户机和服务器的消息。这个字段可以用来追踪在代理服务器之间的传递路由。
              。MESSAGE_ID:用于唯一地标识消息
              。ACCEPT: 通知服务器客户所能接受的数据类型和尺寸。(*/*表示可以接受所有类型的数据。
              。AOTHORIZATION:向服务器提供旁路安全保护和加密机制,若服务器不需要这个字段,则不提供这个字段
              。FROM:当客户应用程序希望想服务器提供有关其电子邮件地址时使用
              。IF-MODEFIED-SINCE用于提供条件GET。如果所请求的文档自从所指定的日期以来没有发生变化,则服务器应不发送该对象。如果所发送的日期格式不合
    法,或晚于服务器的日期,服务器会忽略该字段
              。BEFERRER:向服务器进行资源请求用到的对象
              。MIME-VERTION:用于处理不同类型文件的MIME协议版本号
              。USER-AGENT:有关发出请求的客户信息

    3、 服务器对请求作出应答
        服务器收到一个请求,就会立刻解释请求中所用到的方法,并开始处理应答。服务器的应答消息也包含头字段形式的报文信息。
        。报文第一行是状态行,格式为 <HTTP版本号><状态代码><解释短语>状态码是个三位数字码,分为四类:
               。以2开头,表示请求被成功处理
               。以3开头,表示请求被重定向
               。以4开头,表示客户的请求有错
               。以5开头,表示服务器不能满足请求
               解释短语是对状态码的解释。
        。报文还向客户返回几个头字段,如:
              。STATUS CODE/REASON PHRASE
              。DATE
              。LAST-MODIFIED
              。SERVER
              。CONTENT _TYPE
              。RETRY_AFTER:服务器太忙时返回这个字段
              。WWW_AUTHENTICATE:当服务器的安全机制要求客户发送某中授权信息时使用该字段
        。报文最后是实体信息,即客户请求得到的HTTP服务器上的资源内容。

    4、关闭客户与服务器之间的连接
    ----------------------------------------------------------------------------------------------
    相关链接:
    中国协议分析网:     http://www.cnpaf.net/

    ----------------------------------------------------------------------------------------------

    H1.  HTTP协议状态码的含义

    ① 客户方错误
    "100" : Continue  继续
    "101" : witching Protocols  交换协议

    ② 成功
    "200" : OK
    "201" : Created 已创建
    "202" : Accepted 接收
    "203" : Non-Authoritative Information 非认证信息
    "204" : No Content 无内容
    "205" : Reset Content 重置内容
    "206" : Partial Content 部分内容

    ③ 重定向
    "300" : Multiple Choices 多路选择
    "301" : Moved Permanently  永久转移
    "302" : Found 暂时转移
    "303" : See Other 参见其它
    "304" : Not Modified 未修改
    "305" : Use Proxy 使用代理
    "307" : Temporary Redirect

    ④ 客户方错误
    "400" : Bad Request 错误请求
    "401" : Unauthorized 未认证
    "402" : Payment Required 需要付费
    "403" : Forbidden 禁止
    "404" : Not Found 未找到
    "405" : Method Not Allowed 方法不允许
    "406" : Not Acceptable 不接受
    "407" : Proxy Authentication Required 需要代理认证
    "408" : Request Time-out 请求超时
    "409" : Conflict 冲突
    "410" : Gone 失败
    "411" : Length Required 需要长度
    "412" : Precondition Failed 条件失败
    "413" : Request Entity Too Large 请求实体太大
    "414" : Request-URI Too Large 请求URI太长
    "415" : Unsupported Media Type 不支持媒体类型
    "416" : Requested range not satisfiable
    "417" : Expectation Failed

    ⑤ 服务器错误
    "500" : Internal Server Error 服务器内部错误
    "501" : Not Implemented 未实现
    "502" : Bad Gateway 网关失败
    "503" : Service Unavailable
    "504" : Gateway Time-out 网关超时
    "505" : HTTP Version not supported  HTTP版本不支持

  • 相关阅读:
    MySQL密码复杂度与密码过期策略介绍
    mysql 5.7安装密码校验插件validate_password
    MySQL安装控制插件(Connection-Control)--可有效的防止客户端暴力登录的风险(攻击)
    Liunx 无法杀掉reids进程解决方法
    Linux安装Kafka
    ZooKeeper安装及简单操作
    关于数组的算法题(一)
    集合框架方法(用于算法)
    Spring简答题(一)
    java选择题(三)
  • 原文地址:https://www.cnblogs.com/a311300/p/1243136.html
Copyright © 2020-2023  润新知