【基础知识】HTTP协议中“POST“和“GET”两种请求方式区别

本文对比了HTTPGET和POST请求,讨论了GET用于获取数据、参数显示在URL,POST用于提交数据、参数隐藏在请求体的特点。通过实例展示了POST在用户注册中的应用和GET在搜索请求中的使用。
摘要由CSDN通过智能技术生成

0x01:两种方法对比

在我们客户端与服务器之间进行请求和响应的时候,最常用的两种方法是:GET和POST

POST —— 向指定的资源提交要被处理的数据。

GET —— 向指定的资源请求数据

GET请求参数呢一般显示在URL上面

POST请求参数是在请求体里面,而不是在URL上面,相对于GET,更具有隐蔽性。

0x02:POST请求

POST请求的一个具体例子可以是用户注册的场景。当用户在一个网站上填写注册表单时,通常需要输入用户名、密码、邮箱等信息。当用户点击提交按钮后,这些信息会通过POST请求发送到服务器进行处理。

在这个过程中,浏览器会构建一个包含注册信息的POST请求。请求头中会指定请求方法为POST,以及请求的URL地址(通常是处理注册的服务器接口)。请求体则会包含用户填写的表单数据,这些数据通常以键值对的形式存在。

一个POST请求包一般包含以下几个部分:

  1. 请求行:这是数据包的第一行,包含请求方法(在这个例子中是POST)、请求的资源路径(即目标URL)以及HTTP协议的版本和类型。例如,请求行可能类似于“POST /register HTTP/1.1”,其中“/register”是用户想要访问的服务器上的特定资源或页面。

  2. 消息头:消息头包含了若干键值对,这些键值对由w3c定义,具有特殊的含义。它们描述了请求的各种属性,如内容类型(Content-Type)、字符集(Charset)、客户端类型(User-Agent)等。对于POST请求,通常还会包含描述请求体长度的Content-Length头。这些消息头有助于服务器正确解析和处理请求。

  3. 请求体:这是POST请求数据包的核心部分,包含了实际要发送给服务器的数据。对于用户注册的场景,请求体可能包含用户填写的表单数据,如用户名、密码、邮箱等。这些数据通常以特定的格式编码,如application/x-www-form-urlencoded或multipart/form-data(用于文件上传)。

如下就是一个POST的一个请求包,他的参数在最下面请求体里面。

POST /register HTTP/1.1

Host: www.example.com

Content-Type: application/x-www-form-urlencoded

Content-Length: 31

username=张三&password=123456&email=zhangsan@example.com
  • 请求行指定了使用POST方法,目标资源路径是“/register”,并且使用的是HTTP/1.1协议。
  • 消息头中包含了Host、Content-Type和Content-Length等字段,用于描述请求的属性。
  • 请求体则包含了表单数据,这些数据已经被编码为“application/x-www-form-urlencoded”格式,并通过“&”符号分隔不同的字段。

实际的POST请求数据包可能会更复杂,包含更多的消息头和请求体数据,具体取决于应用程序的需求和HTTP协议的实现。

0x03:GET请求

GET请求主要用于从服务器获取资源。它通过URL传递参数,并返回服务器响应的数据。GET请求是一种无状态、幂等的请求方法,适用于无副作用的操作,如展示网页内容、读取数据、搜索等。它经常用于浏览器URL的地址栏中。

如下就是一个GET的一个请求包,它的参数在URL地址后面。

GET /search?keyword=apple&page=1 HTTP/1.1  
Host: www.example.com  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9  
Accept-Encoding: gzip, deflate  
Accept-Language: en-US,en;q=0.9
  • 请求行GET /search?keyword=apple&page=1 HTTP/1.1,指定了使用GET方法,请求的URL地址是/search,并附加了查询参数keyword=applepage=1
  • 请求头部:包含了关于请求的各种信息,如Host指定了请求的主机名,User-Agent描述了发出请求的浏览器类型和版本,Accept表示客户端接受的响应内容类型,Accept-EncodingAccept-Language分别表示客户端接受的编码方式和语言。

请注意,GET请求通常不包含请求体,因为GET请求是用来从服务器获取数据的,而不是发送数据。附加的参数是通过URL的查询字符串(即?后面的部分)来传递的。

此外,实际的GET请求数据包可能还包含其他请求头部字段,具体取决于客户端和服务器之间的通信需求。同时,HTTP请求和响应的详细格式和内容可能因HTTP版本和特定实现的不同而有所差异

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值