POST VS GET(一次传参问题解决之旅)
post和get都是Http协议中定义的两种发送请求的方法
HTTP是基于TCP/IP的关于数据如何在网络中如何通信的协议
所以其实GET 和 POST 只是HTTP发送请求的两种形式,本质上都是TCP/IP链接
最直观来说,非得给get带上body,给post带上url参数,也是可以的
HTTP协议
Get VS Post 之前还是搞明白Http协议规定了哪些东东
HTTP是’Hyper Text Transfer Protocol’(超文本传输协议)的缩写, 是用于从WWW服务器传输超文本到本地浏览器的传送协议,HTTP协议一般承载于TCP协议之上,有时候也承载于TLS、SSL协议之上(HTTPS),默认http端口为80,https端口为443
协议承载图如下
响应模型
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系,且永远是客户端发送请求(request),服务端返回响应(reponse),因此无法实现在客户端没有发送请求时,服务器将消息推送给客户端
一次响应过程大致分为以下几步
- 客户端和服务器建立连接(使用url)
- 客户端发送request,包含统一资源标识符(url)、协议版本号、MIME信息(修饰符、客户机信息等内容)
- 服务端返回reponse,包含协议版本号、状态码、MIME信息(服务器信息、实体信息等内容)
- 断开连接
request
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
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"}
Request Method
http实际上定义了8种请求方式:
- options:针对特定资源的请求方式,一般用于测试服务是否可用
- head:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息
- get:向特定的资源发出请求
- post:向指定资源提交数据进行处理请求(例如提交表单或者上传文