http请求和响应格式说明,http的get和post请求方式说明,http的请求体body的几种数据格式

HTTP内容说明

请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,
请求报文的一般格式

<request-line>
<headers>
<blank line>
<request-body>

1、第一行必须是一个请求行(request-line),用来说明请求类型,要访问的资源以及所使用的HTTP版本
2、紧接着是一个请求头(header),用来说明服务器要使用的附加信息
3、紧接着是一个空行(blank line)
4、紧接着是请求体(request-body)

request请求,例如:

GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    http://www.imooc.com/
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8

请求行(request line)

请求行由请求方法字段URL字段HTTP协议版本字段3个字段组成,它们用空格分隔
例如:GET /index.html HTTP/1.1

  • GET说明请求类型为GET,
  • /index.html为要访问的资源,
  • 最后一部分说明使用的是HTTP1.1版本

请求头部(header)

紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息

从第二行起为请求头部,

  • HOST将指出请求的目的地.
  • User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础,该信息由你的浏览器来定义,并且在每个请求中自动发送等等

空行

即使第四部分的请求数据为空,也必须有空行。通知服务器以下不再有请求头

请求数据

请求数据不在GET方法中使用,而是在POST方法中使用,因为上面的举例中是使用的GET,所以并没有请求数据

请求数据举例

举例1

有请求数据的举例如下:
在这里插入图片描述
与请求数据相关的最常使用的请求头是

  • Content-Type:指示响应的内容,这里是text/html表示HTML网页,浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是http://example.com/abc.jpg,它也不一定就是图片

    例如:Content-Type: text/html;charset=utf-8表示响应类型是HTML文本,并且编码是UTF-8,Content-Type: image/jpeg表示响应类型是JPEG格式的图片;

  • Content-Length。

举例2
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

第一部分:请求行,第一行明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。

响应报文

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文

<status-line>
<headers>
<blank line>
[<response-body>]

1、第一行必须是一个状态行(status-line)
2、紧接着是一个响应头(header)
3、紧接着是一个空行(blank line)
4、紧接着是响应体(response-body)

response响应举例如下:

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

状态行(status-line)

状态行:由HTTP协议版本号, 状态码, 状态消息 三部分组成
第一行为状态行,

  1. (HTTP/1.1)表明HTTP版本为1.1版本,
  2. 状态码为200,
  3. 状态消息为(ok)

消息报头(header)

第二行和第三行为消息报头,

  1. Date:生成响应的日期和时间;
  2. Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

空行(blank line)

消息报头后面的空行是必须的

响应正文(response-body)

空行后面的html部分为响应正文。

HTTP请求方式

GET

GET /test/?!name=Professional?abc!&publisher=?abc HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: 127.0.0.1
Connection: Keep-Alive

注意最后一行是空行

说明:

  1. 第1部分是请求行,说明了该请求是一个GET请求。该行的第二部分,用来说明请求的是什么,该行的最后一部分说明使用的是HTTP1.1版本。
  2. 第2部分请求头,HOST将指出请求的目的地,User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础。该信息由你的浏览器来定义,并且在每个请求中自动发送,Connection通常将浏览器操作设置为Keep-Alive,而没有响应后立即close这个连接。
  3. 第3部分是空行,即使不存在请求主体,这个空行也是必需的。

GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接

如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

POST

POST /text.html HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional?abc!%20Ajax&publisher=?abc!

把提交的数据放置在是HTTP包的包体中

说明:

  1. 请求行开始处的GET改为POST,以表示不同的请求类型。
  2. Content-Type说明了请求主体的内容是如何编码的,浏览器始终以application/x-www-form-urlencoded的格式编码来传送数据,这是针对简单URL编码的MIME类型.Content-Length说明了请求主体的字节数。
  3. 最后请求主体.名称-值对的形式

区别

GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如上. POST方法是把提交的数据放在HTTP包的Body中.

GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

http的请求体body的几种数据格式

multipart/form-data

以表单形式提交,主要是上传文件用它
在这里插入图片描述

application/x-www-from-urlencoded

以键值对的数据格式提交
在这里插入图片描述

raw

选择text,则请求头是: text/plain
选择javascript,则请求头是: application/javascript
选择json,则请求头是: application/json (如果想以json格式传参,就用raw+json就行了)
选择html,则请求头是: text/html
选择application/xml,则请求头是: application/xml

在这里插入图片描述

binary

相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。

在这里插入图片描述

postman中 Params和Body的区别

Params 它会将参数放入url的?后面提交到后台(带到请求的接口链接里)

Body是放在请求体里面
在这里插入图片描述

参考:https://www.cnblogs.com/ranyonsue/p/5984001.html

参考2:https://blog.csdn.net/qq_41063141/article/details/101505956

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值