这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战。
想要使用HTTP协议向服务器索取数据,首先要了解HTTP通信的完整过程,主要分为两大步骤:
-
- 请求:客户端向服务器索要数据
-
- 响应:服务器返回给客户端响应的数据
1. HTTP通信过程之请求
HTTP协议规定,一个完整的有客户端给服务器的HTTP请求中包含请求行、请求头、请求体三个部分:\
- 请求行:包含了请求方法,请求URL,HTTP希望回忆版本
'Method: POST'
'URL: http://sy.aerozhonghuan.com:81/test/qingqi/visitreport-agent-qk/getDropDownList'
'Protocol: HTTP/1.1'
- 请求头:包含了客户端请求的主机地址,对客户端的环境描述等信息
'Host: sy.aerozhonghuan.com:81'
'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'
'Accept: application/json, text/javascript, */*;'
'Accept-Language: zh-cn' // 客户端的语言环境
'Accept-Encoding: gzip, deflate' // 客户端支持的数据压缩格式
'cookie' // HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给服务器。
'Connection: keep-alive' // (HTTP/1.1协议开始默认进行持久连接)
'Referer: url' // 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
- 请求体:客户端发给服务器的具体数据
{token: "xxx", startDate: "2020-06-01", endDate: "2020-06-30"}
2. HTTP通信过程之 响应
客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端。HTTP协议规定一个完整的HTTP响应中包含以下内容:\
- 状态行:包含了HTTP协议版本,状态码,短语(状态描述)
'Protocol: HTTP/1.1'
'Status Code: 200'
'OK'
- 响应头:包含了对服务器的描述,对返回数据的描述
'Server: nginx/1.10.1'
'Content-Type: application/json;charset=UTF-8'
'Date: Sun, 28 Jun 2020 11:09:06 GMT'
- 实体内容:服务器返回给客户端的具体数据
{"resultCode":200,"message":"OK","data":{"list":[{"value":1,"name":"大客户拜访"},{"value":2,"name":"代理商检核"}]}}
- 常见响应状态码 状态码 | 短语(状态描述) | 中文描述 | | --- | --------------------- | -------------------- | | 200 | OK | 请求成功 | | 300 | | 重定向 | | 400 | Bad Request | 客户端请求语法错误,服务器无法解析 | | 404 | Not Found | 服务端无法根据客户端的请求URL找到资源 | | 500 | Internal Server Error | 服务器内部错误,无法完成请求
3. 发送HTTP请求的方法
-
在HTTP/1.1协议中,定义了8种发送http请求的方法: HTTP请求方法 | 作用 | | -------- | -------------------------- | | GET | 查: 向服务器请求一个文件 | | POST | 改: 向服务器发送数据,让服务器进行修改更新 | | PUT | 增: 向服务器发送数据并存储在服务器内部 | | DELETE | 删: 从服务器删除数据 | | HEAD | 检查一个对象是否存在 | | CONNECT | 对通道提供支持 | | TRACE | 跟踪到服务器的路径 | | OPTIONS | 查询服务器的性能
-
GET和POST请求
- GET和POST请求介绍
- GET:在请求URL后面以?的形式拼接发给服务器的参数,多个参数之间用&隔开,参数长度有限。
- POST:发给服务器的参数全部放在请求体中,理论上传递的数据量没有限制(具体要看服务器的处理能力)。
- GET和POST请求响应的不同
- GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
- 在响应时,GET产生一个TCP数据包;POST产生两个TCP数据包:
- 对于GET方式的请求,浏览器会把Header和实体主体一并发送出去,服务器响应200(返回数据);
- 而对于POST,浏览器先发送Header,服务器响应100 Continue,浏览器再发送实体主体,服务器响应200 OK(返回数据)。 3.GET和POST优缺点
- GET优点:
- 请求方便:直接用一个完整的路径去请求获取数据。
- 对服务器来说比较安全:发送请求过程中不会发送请求体,不会破坏服务器的封装性。从这个角度来讲,GET相对于POST安全。
- GET缺点:
- 数据不安全:GET请求数据会暴露参数信息,任何人都可见。
- 参数长度受限:GET方式通过直接拼接参数向服务器请求数据,网址输入的长度有上限,参数特别多的时候,会被截断。(注意:GET参数长度限制为2048个字符)
- POST优点:
- 数据安全:发送请求时,参数封装在请求体中发送,不会直接暴露参数信息。从这角度讲,POST相对GET安全一些。(注意:如果被抓包,明文参数一样不安全。)
- 参数大小不受限:使用POST请求数据时,通过请求体来传递参数,参数的大小远远要大于通过GET方式传递的参数大小,比较灵活。
- POST缺点:
- 请求不方便:请求时要通过请求体发送参数,不如GET请求便捷。
- 对服务器来说不安全:POST请求时,会向服务器发送请求体,破坏了服务器的封装性。从这个角度讲,相对于GET不安全。