HTTP协议

作者: 逍遥游天下 | 来源:发表于2018-01-27 19:20 被阅读0次

    HTTP协议简介

    • HyperText Transfer Protocol,超文本传输协议;
    • 基于 TCP 的应用层协议;
    • 客户端发起请求,服务器响应请求。
    • 版本
    1. HTTP/ 0.9 ,最早于 1991 年发布,目前已不再用;
    2. HTTP/1.0, 1996 年发布,引入了多种功能,至今仍在使用当中。
    3. HTTP/1.1,1997 年 发布,持久连接被默认采用,目前最流行的版本。
    4. HTTP/2 ,2015 年 发布,引入了服务器推送等多种功能,目前最新的版本。

    HTTP 请求

    HTTP 请求由三部分组成:

    请求行:包含请求方法、请求地址和 HTTP 协议版本
    消息报头:包含一系列的键值对
    请求正文(可选):注意和消息报头之间有一个空行

    HTTP 请求
    举例: HTTP GET 请求
    GET / HTTP/1.1
    Host: httpbin.org
    Connection: keep-alive
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Encoding: gzip, deflate, sdch, br
    Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
    Cookie: _ga=GA1.2.475070272.1480418329; _gat=1
    

    上面的第一行:请求行

    GET 是请求方法,表示从服务器获取资源;/ 是一个请求地址;HTTP/1.1 表明版本是 1.1。

    请求行后面的一系列键值对就是消息报头。

    其中:
    Host 是请求报头域,用于指定被请求资源的 Internet 主机和端口号,它通常从 HTTP URL 中提取出来;
    Connection 表示连接状态,keep-alive 表示该连接是持久连接(persistent connection),即 TCP 连接默认不关闭,可以被多个请求复用,如果客户端和服务器发现对方有一段时间没有活动,就可以主动关闭连接;
    Cache-Control 用于指定缓存指令,它的值有 no-cache, no-store, max-age 等,max-age=秒表示资源在本地缓存多少秒;
    User-Agent 用于标识请求者的一些信息,比如浏览器类型和版本,操作系统等;
    Accept 用于指定客户端希望接受哪些类型的信息,比如 text/html, image/gif 等;
    Accept-Encoding 用于指定可接受的内容编码;
    Accept-Language 用于指定可接受的自然语言;
    Cookie 用于维护状态,可做用户认证,服务器检验等,它是浏览器储存在用户电脑上的文本片段;

    HTTP 请求方法

    HTTP 通过不同的请求方法以多种方式来操作指定的资源,常用的请求方法如下表:

    方法 描述
    GET 从服务器获取指定(请求地址)的资源的信息,它通常只用于读取数据,就像数据库查询一样,不会对资源进行修改。
    POST 向指定资源提交数据(比如提交表单,上传文件),请求服务器进行处理。数据被包含在请求正文中,这个请求可能会创建新的资源或更新现有的资源。
    PUT 通过指定资源的唯一标识(在服务器上的具体存放位置),请求服务器创建或更新资源。
    DELETE 请求服务器删除指定资源。
    HEAD 与 GET 方法类似,从服务器获取资源信息,和 GET 方法不同的是,HEAD 不含有呈现数据,仅仅是 HTTP 头信息。HEAD 的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获得资源的元信息(或元数据)。
    OPTIONS 该方法可使服务器传回资源所支持的所有 HTTP 请求方法。

    HTTP 响应

    HTTP 响应与 HTTP 请求相似,由三部分组成:
    • 状态行:包含 HTTP 协议版本、状态码和状态描述,以空格分隔
    • 响应头:即消息报头,包含一系列的键值对
    • 响应正文:返回内容,注意和响应头之间有一个空行
    image.png

    下面是一个 HTTP GET 请求的响应结果:

    HTTP/1.1 200 OK
    Server: nginx
    Date: Tue, 29 Nov 2016 13:08:38 GMT
    Content-Type: application/json
    Content-Length: 203
    Connection: close
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Credentials: true
    
    {
      "args": {}, 
      "headers": {
        "Host": "httpbin.org", 
        "User-Agent": "Paw/2.3.1 (Macintosh; OS X/10.11.3) GCDHTTPRequest"
      }, 
      "origin": "13.75.42.240", 
      "url": "https://httpbin.org/get"
    }
    

    上面的第一行就是一个状态行:

    其中,200 是状态码,表示客户端请求成功,OK 是相应的状态描述。
    状态码是一个三位的数字,常见的状态码有以下几类:

    1XX 消息 -- 请求已被服务接收,继续处理
    2XX 成功 -- 请求已成功被服务器接收、理解、并接受
    200 OK
    201 Created 已创建
    202 Accepted 接收
    203 Non-Authoritative Information 非认证信息
    204 No Content 无内容
    3XX 重定向 -- 需要后续操作才能完成这一请求
    301 Moved Permanently 请求永久重定向
    302 Moved Temporarily 请求临时重定向
    304 Not Modified 文件未修改,可以直接使用缓存的文件
    305 Use Proxy 使用代理
    4XX 请求错误 -- 请求含有词法错误或者无法被执行
    400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
    404 Not Found 请求的资源不存在,例如,输入了错误的URL
    5XX 服务器错误 -- 服务器在处理某个正确请求时发生错误
    500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求
    503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常
    504 Gateway Time-out 网关超时

    状态行后面的一系列键值对就是消息报头,即响应头:
    其中:

    Server 包含了服务器用来处理请求的软件信息,跟请求报头域 User-Agent 相对应;
    Content-Type 用于指定发送给接收者(比如浏览器)的响应正文的媒体类型,比如 text/html, text/css, image/png, image/jpeg, video/mp4, application/pdf, application/json 等;
    Content-Length 指明本次回应的数据长度;

    GET 和 POST

    表单提交的两种方式(method)get和post。


    说明:

    • get方式提交表单,参数会出现在URL中,而post不会
    • 浏览器对URL长度有限制,get提交数据时URL长度不能太长(2kB),而post提交理论上没有限制,携带的数据量比get多
    • get提交是以明文方式直接出现在URL中,不适合机密数据传递(如密码),post则更安全。
    • get请求有利于保存URL,可以再次访问及传播,post则不具有。

    参考资料

    相关文章

      网友评论

        本文标题:HTTP协议

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