• HTTP 请求行


    HTTP 有两类报文


    请求报文——从客户向服务器发送请求报文。(发送哪些请求,如GET获取网页内容。账户名,密码提交给服务器,需要POST)

    响应报文——从服务器到客户的回答。(服务器收到请求给客户端一个状态,请求成功或者失败,有没有权限访问)

    由于 HTTP 是面向正文的 (text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。(明文的,不加密

     

    HTTP 的报文结构(请求报文)


    http报文有两种,一种是请求报文(从请求端发出的),另外一种叫响应报文(从服务器发出的),而里面的信息就是HTTP协议交互的信息。

     

     

     

    HTTP 请求报文


    HTTP 请求报文由 3 大部分组成:

    • 请求行(必须在 HTTP 请求报文的第一行

    • 请求头(从第二行开始,到第一个空行结束。请求头和请求体之间存在一个空行

    • 请求体(通常以键值对 {key:value}方式传递数据

    报文分为三个部分,请求行,请求头,请求体,需要说明一点,请求体是可以忽略的。

    比如请求方法header方法,它就不会去获取请求体,而对于请求头来说,它是由多行数据构成的字符串文本,数据都是通过换行符隔开。

    请求行开头的 POST 表示请求访问服务器的类型,称为方法(method)。随后的字符串 /form/login 指明了请求访问的资源对象,也叫做请求 URI(request-URI)。

    最后的 HTTP/1.1 即 HTTP 的版本号,用来提示客户端使用的 HTTP 协议功能。

    综上来看,这段请求的意思就是:请求访问某台 HTTP 服务器上的 /form/login 页面资源,并附带参数 name = veal、age = 37。

    注意,无论是 HTTP 请求报文还是 HTTP 响应报文,请求头/响应头和请求体/响应体之间都会有一个“空行”,且请求体/响应体并不是必须的。

     

     

     

    请求行(一)


    request-line = method SP request-target SP HTTP-version CRLF

    请求行定义是Request line,方法+request target+HTTP版本

    如同所示GET就是一个方法,中间request target就是这个的path,最后是版本号。

    method 方法:指明操作目的,动词
    • request-target = origin-form / absolute-form / authority-form / asterisk-form

     

     

    请求行(二)


    request-target有四种格式,最常用的格式是origin-form,它是向源服务器,产生响应内容的服务器发起请求的。

    在浏览器当中配置了正向代理proxy之后,这个时候使用的request target就采用了absolute-form,就是后面会跟着完整的url。

    connect方法,将建立VPN等隧道的时候才会使用到CONNECT www.example.com:80 HTTP/1.1。

    request-target = origin-form / absolute-form / authority-form / asterisk-form
    origin-form = absolute-path [ "?" query ]
             • 向 origin server 发起的请求,path 为空时必须传递 /
    absolute-form = absolute-URI
             • 仅用于向正向代理 proxy 发起请求时,详见正向代理与隧道
    authority-form = authority
             • 仅用于 CONNECT 方法,例如 CONNECT www.example.com:80 HTTP/1.1
    asterisk-form = "*“
             • 仅用于 OPTIONS 方法

     

     

     

    请求行(三)


    HTTP-version 版本号发展历史:https://www.w3.org/Protocols/History.html

    HTTP/0.9:只支持 GET 方法,过时
    HTTP/ 1.0:RFC1945,1996, 常见使用于代理服务器(例如 Nginx 默认配置)
    HTTP/ 1.1:RFC2616,1999(对1.0做了改进,支持缓存,支持长连接,对于域名的支持通过host头部)
    HTTP/ 2.0:2015.5 正式发布

     

     

     

    常见方法(RFC7231)


    • GET:主要的获取信息方法,大量的性能优化都针对该方法,幂等方法

    HEAD:类似 GET 方法,但服务器不发送 BODY,用以获取 HEAD 元数据,幂等方法
    POST:常用于提交 HTML FORM 表单、新增资源等
    PUT:更新资源,带条件时是幂等方法
    DELETE:删除资源,幂等方法
    CONNECT:建立 tunnel 隧道
    OPTIONS:显示服务器对访问资源支持的方法,幂等方法
    TRACE:回显服务器收到的请求,用于定位问题。有安全风险
    Changes with nginx 0.5.17 02 Apr 2007
    *) Change: now nginx always returns the 405 status for the TRACE method

     可以看到资源支持哪些方法的访问。

  • 相关阅读:
    OpenCV计算机视觉学习(14)——浅谈常见图像后缀(png, jpg, bmp)的区别(opencv读取语义分割mask的坑)
    面试官:你认为一个优秀的测试工程师需要具备哪些知识和经验?
    数据分析入门,深入浅出的数据分析
    使用Python进行数据可视化
    Docker从入门到进阶之进阶操作(3) —— 使用 supermin5来构建镜像
    408-2013
    【FreeCodeCamp】 ResponsiveWebDesign网页设计 测试1学习笔记
    2023年【G2电站锅炉司炉】考试资料及G2电站锅炉司炉新版试题
    tomcat高并发下优化详解及连接数和线程池
    C++ 多态语法点
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/126181550