post和get都是Http协议中定义的两种发送请求的方法
HTTP是基于TCP/IP的关于数据如何在网络中如何通信的协议
所以其实GET 和 POST 只是HTTP发送请求的两种形式,本质上都是TCP/IP链接
最直观来说,非得给get带上body,给post带上url参数,也是可以的
Get VS Post 之前还是搞明白Http协议规定了哪些东东
HTTP是’Hyper Text Transfer Protocol’(超文本传输协议)的缩写, 是用于从WWW服务器传输超文本到本地浏览器的传送协议,HTTP协议一般承载于TCP协议之上,有时候也承载于TLS、SSL协议之上(HTTPS),默认http端口为80,https端口为443
协议承载图如下
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系,且永远是客户端发送请求(request),服务端返回响应(reponse),因此无法实现在客户端没有发送请求时,服务器将消息推送给客户端
一次响应过程大致分为以下几步
request是由客户端发送给服务端的请求信息,协议规定了4个部分:请求行,请求头,空行,请求数据
实例:
POST /test HTTP/1.1
Host: com.test.test
Connection: keep-alive
Content-Length: 124
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Content-Type: application/json;charset=UTF-8
Origin: https://com.test.test
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://com.test.test/html/test
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: userId=1
{"object":"test"}
response是服务定返回给客户端的响应报文,也规定了4个部分:状态行、响应头、空行、响应正文
实例:
HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Wed, 12 Aug 2020 11:53:45 GMT
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://com.test.test
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: Origin, Accept-Language, Accept-Encoding,X-Forwarded-For, Connection, Accept, User-Agent, Host, Referer,Cookie, Content-Type, Cache-Control
Access-Control-Request-Method: GET,POST,OPTIONS
{"object":"test"}
http实际上定义了8种请求方式: