• http协议简述


    一、HTTP协议概述

           HTTP是一个简单的请求-响应协议,属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它通常运行在TCP之上。它指定了客户端发送给服务器什么样的消息得到什么样的响应。

    二、HTTP协议的主要特点可概括如下:

    1、B/S结构(Browser/Server,浏览器/服务器模式),这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器就可以访问服务器。

    2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

    3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

    4、无连接:每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

    5、无状态:HTTP无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    三、HTTP协议详解之请求篇

    http请求由三部分组成,分别是:请求行、消息报头(请求头)、请求正文(请求内容)。

    1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。

    格式如下:Method Request-URI HTTP-Version CRLF
    Method:表示请求方法如GET,POST等;

    Request-URI:是一个统一资源标识符如www.baidu.com;

    HTTP-Version:表示请求的HTTP协议版本如/ HTTP/1.1 

    CRLF:表示回车和换行( 除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

    2、请求头

    accept:浏览器通过这个头告诉服务器,它所支持的数据类型。
    Accept-Charset:浏览器通过这个头告诉服务器,它支持哪种字符集。
    Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式。
    Accept-Language:浏览器通过这个头告诉服务器,它的语言环境。
    Host:浏览器通过这个头告诉服务器,想访问哪台主机。
    If-Modified-Since:浏览器通过这个头告诉服务器,缓存数据的时间。
    Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链。
    Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接。
    X-Requested-With:XMLHttpRequest 代表通过ajax方式进行访问。
    User-Agent:请求载体的身份标识。

    3、请求方法(所有方法全为大写)有多种,各个方法的解释如下:

    方法描述
    GET 请求获取Request-URI所标识的资源(请求指定的页面信息),并返回实体主体。
    HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,响应消息报头,用于获取报头
    POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
    PUT 请求服务器存储一个资源,从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE 请求服务器删除指定的页面。
    CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求,允许客户端查看服务器的性能。
    TRACE 请求服务器回显服务器收到的请求,主要用于测试或诊断。
    PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

    四、HTTP协议详解之响应篇

    在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP响应也是由三个部分组成,分别是:状态行、消息报头(响应头)、响应正文。

    1、状态行

    状态行格式:HTTP-Version Status-Code Reason-Phrase CRLF

    HTTP-Version:表示请求的HTTP协议版本如/ HTTP/1.1

    Status-Code:表示服务器发回的响应状态代码,如200表示请求响应成功;

    Reason-Phrase:表示状态代码的文本描述。
    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值,如下列表所示:

    1xx

    消息
    描述
    100 Continue
    服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。
    101 Switching Protocols
    服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。

     2xx

    消息
    描述
    200 OK
    请求成功(其后是对GET和POST请求的应答文档。)
    201 Created
    请求被创建完成,同时新的资源被创建。
    202 Accepted
    供处理的请求已被接受,但是处理未完成。
    203 Non-authoritative Information
    文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。
    204 No Content
    没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
    205 Reset Content
    没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。
    206 Partial Content
    客户发送了一个带有Range头的GET请求,服务器完成了它。

     3xx

    消息
    描述
    300 Multiple Choices
    多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。
    301 Moved Permanently
    所请求的页面已经转移至新的url。
    302 Found
    所请求的页面已经临时转移至新的url。
    303 See Other
    所请求的页面可在别的url下被找到。
    304 Not Modified
    未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
    305 Use Proxy
    客户请求的文档应该通过Location头所指明的代理服务器提取。
    306 Unused
    此代码被用于前一版本。目前已不再使用,但是代码依然被保留。
    307 Temporary Redirect
    被请求的页面已经临时移至新的url。

    4xx

    消息
    描述
    400 Bad Request
    服务器未能理解请求。
    401 Unauthorized
    被请求的页面需要用户名和密码。
    401.1
    登录失败。
    401.2
    服务器配置导致登录失败。
    401.3
    由于 ACL 对资源的限制而未获得授权。
    401.4
    筛选器授权失败。
    401.5
    ISAPI/CGI 应用程序授权失败。
    401.7
    访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
    402 Payment Required
    此代码尚无法使用。
    403 Forbidden
    对被请求页面的访问被禁止。
    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
    请求中指定的方法不被允许。
    406 Not Acceptable
    服务器生成的响应无法被客户端所接受。
    407 Proxy Authentication Required
    用户必须首先使用代理服务器进行验证,这样请求才会被处理。
    408 Request Timeout
    请求超出了服务器的等待时间。
    409 Conflict
    由于冲突,请求无法被完成。
    410 Gone
    被请求的页面不可用。
    411 Length Required
    "Content-Length" 未被定义。如果无此内容,服务器不会接受请求。
    412 Precondition Failed
    请求中的前提条件被服务器评估为失败。
    413 Request Entity Too Large
    由于所请求的实体的太大,服务器不会接受请求。
    414 Request-url Too Long
    由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。
    415 Unsupported Media Type
    由于媒介类型不被支持,服务器不会接受请求。
    416 Requested Range Not Satisfiable
    服务器不能满足客户在请求中指定的Range头。
    417 Expectation Failed
    执行失败。
    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
    请求未完成。服务器不支持所请求的功能。
    502 Bad Gateway
    请求未完成。服务器从上游服务器收到一个无效的响应。
    502.1
    CGI 应用程序超时。 ·
    502.2
    CGI 应用程序出错。
    503 Service Unavailable
    请求未完成。服务器临时过载或当机。
    504 Gateway Timeout
    网关超时。
    505 HTTP Version Not Supported
    服务器不支持请求中指明的HTTP协议版本。

    2、消息报头(常见响应头)

    Location:服务器通过这个头,来告诉浏览器跳到哪里
    Server:服务器通过这个头,告诉浏览器服务器的型号
    Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式
    Content-Length:服务器通过这个头,告诉浏览器回送数据的长度
    Content-Language:服务器通过这个头,告诉浏览器语言环境
    Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
    Refresh:服务器通过这个头,告诉浏览器定时刷新
    Content-Disposition:服务器通过这个头,告诉浏览器以下载方式打数据
    Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
    Expires:-1 控制浏览器不要缓存
    Cache-Control:no-cache
    Pragma:no-cache

    3、响应体:根据客户端指定的请求信息,发送给客户端的指定数据

  • 相关阅读:
    博客园cnblogs for win8 托管到GitHub开源
    html5 canvas 画图表
    回文数
    SpringBoot+logback实现按业务输出日志到不同的文件
    Class.forName() 与 ClassLoader.loadClass()的区别
    Easypoi实现单模板生成多页word文档
    普通Java项目中使用Sl4j+Log4j2打印日志
    SpringBoot集成JWT
    Java8_Lambda表达式
    SpringBoot自定义Condition注解
  • 原文地址:https://www.cnblogs.com/caesar-id/p/11228740.html
Copyright © 2020-2023  润新知