zoukankan      html  css  js  c++  java
  • HTTP协议

    HTTP协议

    1、简介
    超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

    HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。
    HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,
    最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

    2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。

     

    2、概述
    HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

    尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。

    通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。
    一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

     

    3、工作原理
    HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。
    客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。
    服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

    HTTP 请求/响应的步骤:
    1. 客户端连接到Web服务器
    一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如:https://www.baidu.com/

    2. 发送HTTP请求
    通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

    3. 服务器接受请求并返回HTTP响应
    Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

    4. 释放连接TCP连接
    若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

    5. 客户端浏览器解析HTML内容
    客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

    例如:

    在浏览器地址栏键入URL,按下回车之后会经历以下流程:
    浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
    解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
    浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
    服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
    释放 TCP连接;
    浏览器将该 html 文本并显示内容;  

     


    4、HTTPS和HTTP的区别
    0. http默认端口80,https默认端口是443

    1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

    2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

    3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

    4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    扩展资料:
    HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的      传输协议,它可以使浏览器更加高效,使网络传输减少。
    HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
    HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

     


    5、请求方法
    HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:
    GET
    向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

    HEAD
    与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

    POST
    向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

    PUT
    向指定资源位置上传其最新内容。

    DELETE
    请求服务器删除Request-URI所标识的资源。

    TRACE
    回显服务器收到的请求,主要用于测试或诊断。

    OPTIONS
    这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

    CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

    注意事项:
    1.方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
    2.HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当匹配下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。例如PATCH(由 RFC 5789 指定的方法)用于将局部修改应用到资源。

     

     

    6、状态码
    所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

    状态代码的第一个数字代表当前响应的类型:
    1xx消息被接收等待处理——请求已被服务器接收,等待后续处理
    2xx消息成功被接收——请求已成功被服务器接收、理解
    3xx重定向——需要后续操作才能完成这一请求
    4xx客户端请求错误——请求含有词法错误或者无法被执行
    5xx服务器错误——服务器在处理某个正确请求时发生错误
    虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。

     

    2开头 (请求成功)表示成功处理了请求的状态代码。
    
    200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 
    201 (已创建) 请求成功并且服务器创建了新的资源。 
    202 (已接受) 服务器已接受请求,但尚未处理。 
    203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 
    204 (无内容) 服务器成功处理了请求,但没有返回任何内容。 
    205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
    206 (部分内容) 服务器成功处理了部分 GET 请求。
    
    
    3开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
    
    300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 
    301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
    302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
    304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 
    305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 
    307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    
    
    4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
    
    400 (错误请求) 服务器不理解请求的语法。 
    401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 
    403 (禁止) 服务器拒绝请求。
    404 (未找到) 服务器找不到请求的网页。
    405 (方法禁用) 禁用请求中指定的方法。 
    406 (不接受) 无法使用请求的内容特性响应请求的网页。 
    407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
    408 (请求超时) 服务器等候请求时发生超时。 
    409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 
    410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。 
    411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 
    412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 
    413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 
    414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。 
    415 (不支持的媒体类型) 请求的格式不受请求页面的支持。 
    416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。 
    417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。
    
    
    5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
    
    500 (服务器内部错误) 服务器遇到错误,无法完成请求。 
    501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 
    502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 
    503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 
    504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。 
    505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
    常见状态码
    1xx - 信息提示
    这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。
    
    · 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 
    · 101 - Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)
    
    2xx - 成功
    这类状态代码表明服务器成功地接受了客户端请求。
    
    · 200 - OK 一切正常,对GET和POST请求的应答文档跟在后面。 
    · 201 - Created 服务器已经创建了文档,Location头给出了它的URL。 
    · 202 - Accepted 已经接受请求,但处理尚未完成。 
    · 203 - Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息(HTTP 1.1新)。
    · 204 - No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。 
    · 205 - Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。 
    · 206 - Partial Content 客户发送了一个带有Range头的GET请求(分块请求),服务器完成了它(HTTP 1.1新)。
    
    3xx - 重定向
    客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
    
    · 300 - Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。 
    · 301 - Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。 
    · 302 - Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使 用。例如,如果浏览器错误地请求 http://host/~user (缺少了后面的斜杠),
    有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。 
    · 303 - See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。 
    · 304 - Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
    · 305 - Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。 
    · 307 - Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时 才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只 能跟随对GET请求的重定向。(HTTP 1.1新)
    
    4xx - 客户端错误
    发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。
    
    · 400 - Bad Request 请求出现语法错误。 
    · 401 - Unauthorized 访问被拒绝,客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在 填写合适的Authorization头后再次发出请求。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示:
    · 401.1 - 登录失败。
    · 401.2 - 服务器配置导致登录失败。
    · 401.3 - 由于 ACL 对资源的限制而未获得授权。
    · 401.4 - 筛选器授权失败。
    · 401.5 - ISAPI/CGI 应用程序授权失败。
    · 401.7 – 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
    · 403 - Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因:
    · 403.1 - 执行访问被禁止。
    · 403.2 - 读访问被禁止。
    · 403.3 - 写访问被禁止。
    · 403.4 - 要求 SSL。
    · 403.5 - 要求 SSL 128。
    · 403.6 - IP 地址被拒绝。
    · 403.7 - 要求客户端证书。
    · 403.8 - 站点访问被拒绝。
    · 403.9 - 用户数过多。
    · 403.10 - 配置无效。
    · 403.11 - 密码更改。
    · 403.12 - 拒绝访问映射表。
    · 403.13 - 客户端证书被吊销。
    · 403.14 - 拒绝目录列表。
    · 403.15 - 超出客户端访问许可。
    · 403.16 - 客户端证书不受信任或无效。
    · 403.17 - 客户端证书已过期或尚未生效。
    · 403.18 - 在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。
    · 403.19 - 不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。
    · 403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。
    · 404 - Not Found 无法找到指定位置的资源。这也是一个常用的应答。 
    · 404.0 -(无) – 没有找到文件或目录。
    · 404.1 - 无法在所请求的端口上访问 Web 站点。
    · 404.2 - Web 服务扩展锁定策略阻止本请求。
    · 404.3 - MIME 映射策略阻止本请求。
    · 405 - Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用,用来访问本页面的 HTTP 谓词不被允许(方法不被允许)(HTTP 1.1新) 
    · 406 - Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容,客户端浏览器不接受所请求页面的 MIME 类型(HTTP 1.1新)。 
    · 407 - Proxy Authentication Required 要求进行代理身份验证,类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新) 
    · 408 - Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)
    · 409 - Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新) 
    · 410 - Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新) 
    · 411 - Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新) 
    · 412 - Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。
    · 413 – Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。 
    · 414 - Request URI Too Long URI太长(HTTP 1.1新)。 
    · 415 – 不支持的媒体类型。
    · 416 – Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新) · 417 – 执行失败。
    · 423 – 锁定的错误。
    
    5xx - 服务器错误
    服务器由于遇到错误而不能完成该请求。
    
    · 500 - Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。 
    · 500.12 - 应用程序正忙于在 Web 服务器上重新启动。
    · 500.13 - Web 服务器太忙。
    · 500.15 - 不允许直接请求 Global.asa。
    · 500.16 – UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
    · 500.18 – URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。
    · 500.100 - 内部 ASP 错误。
    · 501 - Not Implemented 服务器不支持实现请求所需要的功能,页眉值指定了未实现的配置。例如,客户发出了一个服务器不支持的PUT请求。
    · 502 - Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。 亦说Web 服务器用作网关或代理服务器时收到了无效响应
    
    。
    · 502.1 - CGI 应用程序超时。
    · 502.2 - CGI 应用程序出错。
    · 503 - Service Unavailable 服务不可用,服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个
    
    Retry-After头。这个错误代码为 IIS 6.0 所专用。
    · 504 - Gateway Timeout 网关超时,由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新) 。
    · 505 - HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)
    具体状态码

     

     

    7、URL
    超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:

    传送协议
    层级URL标记符号(为[//],固定不变)
    访问资源需要的凭证信息(可省略)
    服务器(通常为域名,有时为IP地址)
    端口号(以数字方式表示,若为HTTP的默认值“:80”可省略)
    路径(以“/”字符区别路径中的每一个目录名称)
    查询(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
    片段   以“#”字符为起点


    例如:
    https://www.cnblogs.com:443/Zzbj/p/9844520.html

    https:协议;
    www.cnblogs.com:服务器;
    443:服务器上的网络端口号;
    /Zzbj/p/9844520.html:路径;


    大多数网页浏览器不要求用户输入网页中“http://”的部分,因为绝大多数网页内容是超文本传输协议文件。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。
    一般来说用户只要键入统一资源定位符的一部分(www.cnblogs.com/Zzbj/p/9844520.html)就可以了。

    由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分,比如 www。
    从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地址是否通,服务器必须完成重定向的任务。

     


    8、HTTP请求格式

     

    9、HTTP响应格式

     

  • 相关阅读:
    [置顶] java 通过classloader加载类再通过classforname实例化
    Linux内核源代码解析——用户发送数据包的起源之sendto
    POJ 2774 Long Long Message&&HDU 1403 Longest Common Substring&&COJ 1203
    add-two-numbers-ii
    【转载】React初学者入门须知
    【Todo】【转载】ES6的学习记录
    【转载】Java中如何写一段内存泄露的程序 & ThreadLocal 介绍和使用
    【Todo】深入理解Javascript系列
    【转载】什么是优秀技术团队
    【转载】React入门-Todolist制作学习
  • 原文地址:https://www.cnblogs.com/yidashi110/p/10092034.html
Copyright © 2011-2022 走看看