美文网首页
HTTP简介

HTTP简介

作者: 辰牧殇 | 来源:发表于2017-04-18 10:35 被阅读34次

    引言

    HTTP(超文本传输协议)是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

    HTTP协议的主要特点:

    1. 支持客户/服务器模式
    2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。
    4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    HTTP-URL

    URI: 统一资源标识符

    URL: 统一资源定位符,URL是一种特殊类型的URI,描述了一台特定服务器上某资源的特定位置

    HTTP URL 的格式如下: http://host:port/abs_path

    • http 表示要通过 HTTP 协议来定位网络资源;
    • host 表示合法的 Internet 主机域名或者 IP 地址;
    • port 指定一个端口号,为空则使用缺省端口 80;
    • abs_path 指定请求资源的URI;如果URL中没有给出 abs_path,那么当它作为请求 URI 时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

    eg:

    1. 输入:www.baidu.com 浏览器自动转换成: http://www.baidu.com/

    2. http:192.168.0.116:8080/index.jsp

    HTTP-报文

    HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务器的相应。它们由三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)、包含数据的主体(body)。

    HTTP报文可以分为两类:请求报文响应报文

    请求报文格式:
    <methord> <request-URL> <version>
    <headers>
    
    <entity-body>
    
    响应报文格式:
    <version> <status> <reason-phrase>
    <headers>
    
    <entity-body>
    

    请求报文和响应报文的格式,只有起始行的语法有所不同

    • 方法(method)

      客户端希望服务器对资源执行的动作。是一个单独的词,如GET、HEAD或POST。

    • 请求URL(request-URL)

      统一资源标识符。

    • 版本(version)

      报文所使用的HTTP版本。其格式如这样:HTTP/<major>.<minor>

    • 状态码(status-code)

      服务器发回的响应状态代码。这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)。

    • 原因短语(reason-phrase)

      表示状态码的文字描述。

    • 首部(header)

      可以有零个或者多个首部,每个首部都包含一个名字,后面跟着一个冒号:,然后是一个可选的空格,接着是一个值,最后是一个CRLF(回车或者换行)。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。

    • 实体的主体部分(entity-body)

      实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。

    报文结构.png

    常用HTTP方法

    方法 描述 是否包含主体
    GET 请求获取 Request-URL 所标识的资源
    POST 在 Request-URL 所标识的资源后附加新的数据
    HEAD 请求获取由 Request-URL 所标识的资源的首部,不返回实体的主体部分
    PUT 将请求的主体部分存储在服务器,并用 Request-URL 作为其标识
    DELETE 请求服务器删除 Request-URL 所标识的资源
    TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
    OPTIONS 请求web服务器告知其支持的各种功能,可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法

    状态码

    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

    • 1xx:指示信息--表示请求已接收,继续处理
    • 2xx:成功--表示请求已被成功接收、理解、接受
    • 3xx:重定向--要完成请求必须进行更进一步的操作
    • 4xx:客户端错误--请求有语法错误或请求无法实现
    • 5xx:服务器端错误--服务器未能实现合法的请求

    常见的状态码

    状态码 状态描述 说明
    200 OK 客户端请求成功
    400 Bad Request 客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
    403 Forbidden 服务器收到请求,但是拒绝提供服务
    404 Not Found 请求资源不存在
    500 Internal Server Error 服务器发生不可预期的错误
    503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

    首部(消息报头)

    首部和方法配合工作,共同决定了客户端和服务器能做什么事情。

    在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些,可以将首部分为四个类型:

    通用首部

    这些是客户端和服务器都可以使用的通用首部。可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能。提供了与报文相关的最基本的信息。

    首部 描述
    Connection 允许客户端和服务器指定与请求/响应连接有关的选项,例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,断开连接
    Date 提供日期和时间标志,说明报文是什么时间创建的
    Cache-Control 用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)
    Pragma 另一种随报文传送只是的方式,但并不专用于缓存

    请求首部

    请求首部是请求报文特有的。他们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据。用于说明是谁或者什么在发送请求、请求源自何处,或者客户端的喜好及能力。服务器可以根据请求首部给出的客户端信息,试着为客户端提供更好的响应。

    请求的信息性首部
    首部 描述
    Client-IP 提供了运行客户端的机器的IP地址
    From 提供了客户端用户的E-mail地址
    Host 给出了接收请求的服务器的主机名和端口号
    User-Agent 将发起请求的应用程序名称告知服务器
    Accept首部

    Accept首部为客户端提供了一种能够将其喜好和能力告知服务器的方式,包括它们想要什么,可以使用什么,以及最重要的,它们不想要什么。这样服务器就可以根据这些额外的信息,对要发送的内容作出更明智的决定。

    首部 描述
    Accept 告诉服务器可以发送哪些媒体类型
    Accept-Charset 告诉服务器可以发送哪些字符集
    Accept-Encoding 告诉服务器可以发送哪些编码方式
    Accept-Language 告诉服务器可以发送哪些语言
    安全请求首部
    首部 描述
    Authorization 包含了客户端提供给服务器,以便对其自身进行认证的数据
    Cookie 客户端向服务器传送一个令牌——它并不是真正的安全首部,但确实隐含了安全功能

    响应首部

    响应首部是响应报文特有的。响应首部为客户端提供了一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。这些首部有助于客户端处理响应,并在将来发起更好的请求。

    首部 描述
    Age (从最初创建开始)响应持续时间
    Location 可以将响应接收方(客户端,如浏览器)引导至某个与请求URI位置不同的资源,当请求的资源位置改变时会返回该响应
    Server 服务器应用程序软件的名称和版本
    WWW-Authenticate 来自服务器的对客户端的质询列表,该首部必须被包含在状态码为401的响应报文中,客户端收到401响应消息的时候,发送含Authorization首部的请求报文请求服务器对其进行验证,服务器响应报文里就包含本首部

    实体首部

    实体首部提供了有关实体及其内容的大量信息,请求和响应报文中都可能包含实体部分,所以这两类报文都可能出现这些首部。总之,实体首部可以告知报文的接收者它在对什么进行处理。

    首部 描述
    Content-Base 解释主体中的相对 URL 时使用的基础 URL
    Content-Encoding 对主体执行的任意编码方式
    Content-Language 主体资源所用的自然语言
    Content-Length 主体的长度或尺寸
    Content-Locaton 资源实际所处的位置
    Content-Type 发送给接收者的实体正文的媒体类型
    Content-Range 在整个资源中此实体表示的字节范围
    Expires 响应过期的日期和时间,超过该事件,实体不再有效,要从原始的源端再次获取此实体
    Last-Modified 实体最后一次被修改的日期和时间

    相关文章

      网友评论

          本文标题:HTTP简介

          本文链接:https://www.haomeiwen.com/subject/vvrfzttx.html