理解http协议

理解http协议

Posted by odin on March 31, 2020

1.HTTP概述

http是一种超文本传输协议。是基于TCP的应用层协议,是基于请求与响应模式的无状态的应用层协议。

2.HTTP结构

2.1)请求报文结构

引用网上图片:

  • 请求行:包含请求方法、请求地址、http版本号。
  • 常用请求Method有:GET、POST、PATCH、DELETE、PUT五种,另外还有HEAD、TRACE、OPTIONS、CONNECT。

    请求方法介绍
    GET:显示的请求资源,一般用于读取数据资源。GET方法一般认为是不安全的请求方法,他将请求信息完全的暴露在外面,容易被抓取爬取、任意访问。
    POST:向url地址提交数据(提交表单、上传文件等)获取响应。
    PATCH:与PUT请求类似,用于向服务端请求更新资源。PATCH方法出现在HTTP/1.1版本之后,但是与PUT有些许不同:
    > * PATCH一般用于部分更新,而PUT一般用于整体更新。
    > * 当资源不存在时,PATCH会创建资源,而PUT不会只会对已有资源进行更新。
    DELETE:用于向服务器请求删除资源。
    PUT:用于向服务器请求数据修改,新增或者修改。
    HEAD:与GET方法一样都是向服务器发送指定资源的请求,但是服务器在响应HEAD请求时不会回传资源的内容部分。一般用于客户端查看服务端性能。
    TRACE:请求服务器回显其收到的请求信息,该方法主要用于HTTP请求的测试或诊断。
    OPTIONS:请求与HEAD类似,一般也是用于客户端查看服务器的性能。 这个方法会请求服务器返回该资源所支持的所有HTTP请求方法,该方法会用’ * ‘来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常。
    CONNECT:方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

  • 消息报头: 由一系列的键值对组成,http允许客户端向服务端发送一些附加信息或者客户端的自身信息,主要包括:

    header 解释 示例
    Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html
    Accept-Charset 可以接受的字符编码集 Accept-Charset: utf-8
    Accept-Encoding 指定可以支持的web服务器返回内容压缩编码类型 Accept-Encoding: compress, gzip
    Accept-Language 指定可以接受的语言 Accept-Language: en,zh
    Accept-Ranges 可以请求网页实体的一个或者多个自范围字段 Accept-Ranges: bytes
    Authorization HTTP授权的授权证书类型  
    Cache-Control 请求遵循的缓存机制 Cache-Control: no-cache
    Connection 是否需要持久连接(http/1.1默认长连接) Connection: close
    Cookie cookie Cookie: aa=1; vv=2;
    Content-Length 请求内容长度 Content-Length: 500
    Content-Type 请求的实体对应的MIME信息 Content-Type: application/x-www-form-unlencodod
  • 请求正文 请求提交的表单数据,GET方法没有请求正文。

2.2)响应报文结构

同样引用网络图片,响应报文结构如下。

响应报文也由四个部分组成:

  • 响应状态行:包含http版本、响应状态码、对应响应状态码的描述以及换行。 常用状态码

    2xx:成功请求
    200 OK 从客户端发送的请求在服务端被正常处理了。
    204 No Content 服务器接受的请求已成功处理,但返回的响应报文的主体部分不包含实体(浏览器页面不更新,仅发送信息给服务器) 206 Partial Content 客户端进行了范围请求,而服务器成功执行了这部分请求

    3XX重定向浏览器需要执行某些特殊的处理以正确处理请求。
    301 Moved Permanently 永久性重定向,请求的资源已经分配了新的URI,以后应该使用资源现在所指的URI
    302 Found 临时性重定向,请求的资源临时分配了新的URI,希望用户本次可以使用新的URI访问
    注意:当301,302,303响应状态码返回时,几乎所有的浏览器会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送304 Not Modified 服务器端资源未改变,可直接使用客户端未过期的缓存,不包含任何响应的主体部分

    4XX客户端错误客户端是发生错误的原因所在。
    400 Bad Request 请求报文中存在语法错误
    401 Unauthorized 请求需要有通过HTTP认证的认证信息。另外如果之前已进行一次请求,则表示用户认证失败
    403 Forbidden 对请求资源的访问被服务器拒绝了,如未获得文件系统的访问授权,访问权限出现某些问题
    404 Not Found 服务器上没有请求的资源
    408   Request Timeout(请求超时)  服务器等候请求时发生超时。
    499 client has closed connection 服务器端处理的时间过长,客户端主动断开链接,ngix定义的状态码

    5XX服务器错误服务器是发生错误的原因所在。
    500 Internal Server Error 服务器在执行请求时发生了错误,Bug或临时故障
    502   Bad Gateway(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
    503 Service Unavailable 服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求