Http

作者: Junting | 来源:发表于2016-09-28 00:22 被阅读37次

    HTTP 协议


    HTTP 协议详解

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

    HTTP 百度百科

    HTTP协议工作流程

    Http协议与其他协议一样,也需要以特定的方式进行数据包的封装,并按照一定的流程实现通信交互,而基于HTTP协议的请求/响应模式的信息交互过程可分为四个步骤。

    • (1) 客户端与服务器需要建立连接,如:TCP连接
    • (2) 连接建立后,客户端向服务器发送一个请求,请求报文由三部分组成:请求行、消息报头、响应内容。
    • (3) 服务器接到请求后,解析该请求并返回响应信息,响应报文由三部分组成:状态行、消息头、响应内容。
    • (4) 客户端接收服务器所返回的信息并进行解析、处理和显示。

    通常,浏览器访问一个页面,需要发出多次请求获取不同的响应内容,在HTTP/1.0版本中默认是传输一次数据就关闭连接,而在HTTP/1.1版本中默认为是持久连接,即一次TCP连接可以完成多次HTTP请求。是否支持持久连接,是由消息报头中的connection字段决定的,如果请求或响应中的connection设置为close,则客户端和服务器的连接为非持久连接。

    请求报文和响应的报文结构简介

    HTTP协议的请求和响应数据包一般被称为请求报文和响应报文,根据协议标准,请求报文和响应报文是由报文首部、空行和报文主题组成的,而请求报文的首部又由请求行、请求首部字段、通用首部字段、实体首部字段组成,响应报文的首部由状态行、响应首部字段、通用首部字段、实体首部字段组成。结构图请看往下看:

    请求报文和响应报文的结构图.png

    根据以上结构,可以将HTTP协议报文包含的内容分为五类:

    • 一、请求行,由请求方法、请求URL、HTTP版本组成;
    • 二、是状态行,由HTTP版本、状态码、原因短语组成;
    • 三、首部字段,包含了请求首部、响应首部、通用首部、实体首部四种类型,一般有名字和值组成;
    • 四、是其他报文首部字段,包含了一些RFC()未定义的首部内容;
    • 五、是报文主体,由任意数据组成。

    分析下 Laravel 官网的Http协议

    这里我们访问 laravel官网 的请求报文和响应报文,来具体分析

    请求报文 响应报文 请求行

    (1) 请求行 (火狐可以查看到)

    请求行中的请求方法用来描述服务器应该执行的操作,而请求URL指定了操作的资源,HTTP版本用来标识客户端使用的HTTP版本。图中 访问的Laravel网站请求报文的请求方法为“GET”,请求URL为“https://laravel.com/”,HTTP版本位 “HTTP/1.1”。在HTTP规范中定义了一组方法,用于指定服务器的响应动作,如GET方法是指从服务器获取一个文本,具体请求报文头方法及其功能描述见下表:

    HTTP请求报文方法及其功能

    方法名称 功能描述 是否包含主体数据
    GET 从服务器获取文本
    POST 向服务器发送客户端数据
    PUT 上传客户端的文件到服务器
    DELETE 从服务器删除一个文件
    HEAD 只获取服务器可以执行的方法
    OPTIONS 获取服务器可以执行的方法
    TRACE 对经过代理服务器的报文进行追踪

    (2) 状态行

    状态行包含响应报文服务器使用的HTTTP版本、数字状态码和原因短语,对于图响应报文的状态行,其中HTTP版本为“HTTP/1.1”,数字状态码位 “200”,原因短语“OK”。HTTP的状态共分为五大类,用于描述返回的响应结果。实际HTTP规范中定义的状态码有十几种,比较具有代表性的状态码及含义如下:

    HTTP响应报文状态码及其含义

    状态码范围 状态码类别 含义
    100~199 信息类状态码 收到请求初始部分,请继续发送
    200~299 成功状态码
    300~399 重定向状态码
    400~499 客户端错误状态码
    500~599 服务器错误状态码

    典型状态码

    典型状态码 原因短语 含义
    100 continue 收到请求初始部分,请继续发送
    200 OK 请求已经被正常处理
    204 No Content 请求被成功处理,但没有主体数据
    206 Partial Content 对资源部分请求成功
    301 Moved Permanently 请求的URL资源已被更新,响应首部包含新的URL
    302 Found 请求的URL资源临时更新
    304 Not Modified 请求不符合条件,需要更改条件
    400 Bad Request 客户端发送一个错误请求
    401 Unauthorized 请求需要包含通过HTTP认证的信息
    403 Forbiden 访问被拒绝
    404 Not Found 没有找到请求的URL
    500 Internal Server Error 服务器出现错误,无法提供请求的资源
    503 Service Unavailable 服务器正忙,无法提供正常请求的服务

    (3) 首部字段

    首部字段是构成HTTP报文的基本要素之一,这部分包含的信息也是最为丰富,主要用于规定客户端和服务端在处理请求和响应时的操做。通常,根据首部字段的用途可以分为四类:

    • 通用首部字段
    • 请求首部字段
    • 响应首部字段
    • 实体首部字段

    首部字段通常由字段名和字段值构成,中间通过“:”分隔。下面简要介绍下四类字段的作用和部分首部字段含义。

    通用首部字段

    通用首部字段一般用来提供HTTP报文的最基本信息,这些信息无论是请求报文还是响应报文都可以使用,主要用于描述HTTP协议本身。比如描述HTTP是否支持久连接的Connetion 字段、HTTP发送日期的Date字段、用于缓存控制的Cache-Control 字段等。下面列出了通用首部字段及含义:

    通用首部字段名 功能说明
    Connection 用于指定客服端/服务器间连接选项,例如指定连续连接或者通过“close”选项通知服务器在响应完成后关闭连接
    Date 报文创建日期
    Transfer-Enocoding 指定报文主体数据的编码方式
    Update 发送端协议准备升级为新版本
    Via 报文经过中间节点(网关、代理等)的信息
    Cache-Control 指定缓存行为
    Warning 错误通知

    请求首部字段

    请求首部字段一般用于HTTP请求报文中,主要描述客户端的版本、处理能力等信息,用于帮助服务器更好的地提供请求响应字段,如告诉服务器只接收某种响应内容的Accept字段、发送Cookies的Cookie字段等。下面列出的是常用的请求首部字段及含义:

    HTTP 报文请求首部字段及含义

    请求首部字段名 功能说明
    Accept 客户端可处理的媒体类型
    Accept-Charset 客户端优先接收的字符集
    Accept-Encoding 客户端优先接收的编码格式,如 zip
    Accept-Langular 客户端希望的语言种类
    Authorization 授权信息,通常用于对服务器发送的WWW-Authenticate
    Cookie 用于客户端向服务器发送一个令牌
    Cookie2 用来说明客户端支持的Cookie版本
    From 客户端的E-mail 地址,由一些特殊的Web客户程序使用,浏览器不会用到它
    Host 请求资源所在服务器的主机和端口
    If-Modified-Since 只有当所有请求的内容在指定的日期之后又经过修改才会返回它,否则返回 304 “Not Modified”应答
    Referer 包含一个URL页面出发访问请求页面
    User-Agent 客户端信息,如客户端应用程序名称、版本等
    UA-OS 客户端主机上的操作系统名称、版本等信息
    UA-Pixels 客服端显示器像素信息

    响应首部字段

    响应首部字段是描述HTTP 响应本身的字段,一般用于HTTP响应报文中,主要用于描述响应主机的信息、功能等,通过响应首部字段有助于客户端处理响应,并在将来发出更适合服务器的请求,如定时刷新的Refresh头、设置Cookie的Set-Cookie头等。下面列出常用的响应首部字段及含义:

    响应首部字段名 功能含义
    Age 响应资源创建的时间
    Set-Cookie 在客户端设置一个Cookie,服务器用来对客户端进行标识
    Server 服务器应用程序软件的名称、版本等信息
    Retry-After 当资源不可用时,在此期间再次发送请求
    Refresh 表示浏览器应该在多长时间之后刷新文档,以秒计

    实体首部字段

    实体首部字段用于描述HTTP报文体数据字段。由于报文主体可以存在于请求报文和响应报文中,所以这种类型首部字段可以应用在这两种类型的报文中。实体首部字段用于描述主体内容的元信息,包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效性等,以便告诉接收者如何进行处理,如Content-Language 用于描述报文主体的语言等。下面列出常用的实体首部字段及含义:

    实体首部字段名 功能含义
    Allow 资源主体可以支持的HTTP请求方法
    Content-Location 通知接收端主体的URL,用于接收端定位到该资源
    Content-Encoding 主体适用的编码方式
    Content-Language 解释主体时适用的语言
    Content-Length 主体的大小,通常以字节数表示
    Content-MD5 主体的MD5校验和
    Content-Type 主体的对象类型

    HTTP协议作为应用层协议离不开TCP/IP协议的支持!

    相关文章

      网友评论

        本文标题:Http

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