小马哥网络课笔记23------http

2022-02-23  本文已影响0人  夜凉听风雨

版本

标准

长连接、短连接

短连接:两个主机间请求建立连接后,发送完消息立马断开的连接。
长连接:两个主机间请求建立连接后,不会立马断开,会有很多次的通信,直到某个时间双方发送断开连接请求。

报文格式

下面2张图表示的是请求报文和响应报文的大致格式。最严谨的报文格式表示还是要看ABNF。

请求报文.png 响应报文.png

ABNF

ABNF核心规则

ABNF核心规则.png 报文表达式.png 请求行格式.png

如图所示:请求行=请求方法+空格+请求目标+空格+http版本+换行

状态行格式.png

如图所示:状态行=http版本+空格+状态码+空格+短语(可省略可多个)+换行

header-field格式.png message-body格式.png

URL编码

请求方法

OPTIONS请求.png

头部字段(Header Field)

头部字段可以分为4种类型

请求头字段

请求头字段说明1.png
请求头字段说明2.png
请求头字段说明3.png

响应头字段

响应头字段说明1.png 响应头字段说明2.png 响应头字段说明3.png

状态码

常用状态码

form表单提交

下面我们写一个demo来验证一下这几种方式请求。

<form action="/hello/info" method="get" enctype="application/x-www-form-urlencoded">
    <div>
        姓名
        <input type="text" name="name">
    </div>
    <div>
        年龄
        <input type="text" name="age">
    </div>
    <button type="submit">提交</button>
</form>

GET请求抓包数据发现参数是拼接在URI后面的,并且没有请求体。

抓包.png
<form action="/hello/info" method="post" enctype="application/x-www-form-urlencoded">
    <div>
        姓名
        <input type="text" name="name">
    </div>
    <div>
        年龄
        <input type="text" name="age">
    </div>
    <button type="submit">提交</button>
</form>

抓包结果发现POST请求比GET请求多了一个请求体,提交的参数是以请求体的形式传递的。

抓包结果.png
<form action="/hello/info" method="post" enctype="multipart/form-data">
    <div>
        姓名
        <input type="text" name="name">
    </div>
    <div>
        年龄
        <input type="text" name="age">
    </div>
    <div>
        头像
        <input type="file" name="portrait">
    </div>
    <button type="submit">提交</button>
</form>

可以看到请求头的Content-Type变为了multipart/form-data,并且有一个boundary。两个减号+boundary在请求体里分割了每个参数。

抓包上半部分.png

请求体参数最后以两个减号+分隔符+两个减号结尾
这里name和age获取到的参数都为空,因为获取multipart/form-data格式传递的参数和获取application/x-www-form-urlencoded格式的参数方式不一样,需要服务端修改取参方式。

抓包下半部分.png
上一篇 下一篇

猜你喜欢

热点阅读