客户端通过HTTP协议与服务端交换数据
Posted 自由自在
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了客户端通过HTTP协议与服务端交换数据相关的知识,希望对你有一定的参考价值。
客户端(包括浏览器)通过HTTP协议与服务端交换数据的描述
发起请求
http method
- 写请求使用POST
- 读请求使用GET
参数提交
提交一个普通对象,使用键值对参数
x-www-form-urlencoed
当同名参数有多个值时,使用http表单数组的方式
- options[]:a
- options[]:b
- options[]:c
…
当参数对应的值是复杂对象或多维数组时,json序列化该对象/多维数组
处理服务端响应
预先准备
提交一个普通对象,使用键值对参数
x-www-form-urlencoed
当同名参数有多个值时,使用http表单数组的方式
- options[]:a
- options[]:b
- options[]:c
…
当参数对应的值是复杂对象或多维数组时,json序列化该对象/多维数组
根据业务需求,确定当前响应返回的是业务数据,还是系统消息。(此步骤不是代码处理)
代码处理
- 检查http状态码。在检查状态码(例如:200。必须根据实际需求决定,此处只是举例)后可能不再需要进一步处理并就此结束处理流程。
- 如果响应返回的是业务数据,当http状态码表明响应成功时,可从http body中读取。
- 如果响应返回的是系统消息,可使用消息代码来确定消息种类,再根据实际需求决定是否使用消息描述及有效载荷。
API签名机制
不需要签名的会以
SignFree
标记。
- 用请求参数生成键值对,键值对为“参数名=参数值”;其中上传文件的参数值为文件内容sha1结果的小写形式。
- 所有键值对按照键自然排序,然后用“&”连接为内容字符串。
- 使用内容字符串生成待签名字符串,如“{应用ID}{应用密钥}”。
注意:${}表示占位符。
- 待签名字符串用sha1生成签名,结果忽略大小写。
操作结果状态说明
http状态码
- 200 操作成功
- 400 请求有问题;如:表单验证失败、请求签名验证失败等
- 401 认证失败。
- 403 无访问权限。
- 409 请求处理完成但因为业务规则限制或其他原因并未真正成功的响应
- 500 服务器错误
- 503 服务器维护中
消息结构
{"code":CODE,"msg":MSG,"payload":PAYLOAD}
- CODE:消息代码。字符串,肯定不为空。对一个API来说,消息代码用于区分消息的种类,一旦确定就不再改变。
- MSG:消息描述。字符串。
- PAYLOAD:有效载荷。JSON对象或数组。
返回结果约定
- 凡是应该返回集合的操作,无结果时返回空集
- 均用JSON表示
安全防护
不是完全必须的,根据业务需求而定。
CSRF(跨站请求伪造) Token提交
- 读取服务端返回的名为 XSRF-TOKEN 的Cookie
- 提交请求时,携带Token值
- 通过HTTP header,X-XSRF-TOKEN
- 通过系统级参数,_xsrf_token
应用ID、时间戳、签名提交
ID
通过HTTP header ,X-CLIENT-ID。
通过系统级参数,_clientId。时间戳
通过HTTP header ,X-TIMESTAMP。
通过系统级参数,_timestamp。签名
通过HTTP header ,X-CLIENT-SIGN。
通过系统级参数,_clientSign。
以上是关于客户端通过HTTP协议与服务端交换数据的主要内容,如果未能解决你的问题,请参考以下文章