客户端通过HTTP协议与服务端交换数据

客户端(包括浏览器)通过HTTP协议与服务端交换数据的描述

发起请求

http method
  • 写请求使用POST
  • 读请求使用GET
参数提交
  • 提交一个普通对象,使用键值对参数

    x-www-form-urlencoed

  • 当同名参数有多个值时,使用http表单数组的方式
    • options[]:a
    • options[]:b
    • options[]:c

  • 当参数对应的值是复杂对象或多维数组时,json序列化该对象/多维数组

处理服务端响应

预先准备

根据业务需求,确定当前响应返回的是业务数据,还是系统消息。(此步骤不是代码处理)

代码处理
  1. 检查http状态码。在检查状态码(例如:200。必须根据实际需求决定,此处只是举例)后可能不再需要进一步处理并就此结束处理流程。
  2. 如果响应返回的是业务数据,当http状态码表明响应成功时,可从http body中读取。
  3. 如果响应返回的是系统消息,可使用消息代码来确定消息种类,再根据实际需求决定是否使用消息描述及有效载荷。

API签名机制

不需要签名的会以 SignFree 标记。

  1. 用请求参数生成键值对,键值对为“参数名=参数值”;其中上传文件的参数值为文件内容sha1结果的小写形式。
  2. 所有键值对按照键自然排序,然后用“&”连接为内容字符串。
  3. 使用内容字符串生成待签名字符串,如“内容" role="presentation" style="font-size: 100%; display: inline-block; position: relative;">内容内容{应用ID}时间戳" role="presentation" style="font-size: 100%; display: inline-block; position: relative;">时间戳时间戳{应用密钥}”。

    注意:${}表示占位符。

  4. 待签名字符串用sha1生成签名,结果忽略大小写。

操作结果状态说明

http状态码
  • 200 操作成功
  • 400 请求有问题;如:表单验证失败、请求签名验证失败等
  • 401 认证失败。
  • 403 无访问权限。
  • 409 请求处理完成但因为业务规则限制或其他原因并未真正成功的响应
  • 500 服务器错误
  • 503 服务器维护中
消息结构

{"code":CODE,"msg":MSG,"payload":PAYLOAD}

  • CODE:消息代码。字符串,肯定不为空。对一个API来说,消息代码用于区分消息的种类,一旦确定就不再改变。
  • MSG:消息描述。字符串。
  • PAYLOAD:有效载荷。JSON对象或数组。
返回结果约定
  • 凡是应该返回集合的操作,无结果时返回空集
  • 均用JSON表示

安全防护

不是完全必须的,根据业务需求而定。

CSRF(跨站请求伪造) Token提交

  1. 读取服务端返回的名为 XSRF-TOKEN 的Cookie
  2. 提交请求时,携带Token值
    • 通过HTTP header,X-XSRF-TOKEN
    • 通过系统级参数,_xsrf_token

应用ID、时间戳、签名提交

  1. ID

    通过HTTP header ,X-CLIENT-ID。

    通过系统级参数,_clientId。

  2. 时间戳

    通过HTTP header ,X-TIMESTAMP。

    通过系统级参数,_timestamp。

  3. 签名

    通过HTTP header ,X-CLIENT-SIGN。

    通过系统级参数,_clientSign。

时间: 2024-08-06 11:54:39

客户端通过HTTP协议与服务端交换数据的相关文章

关于ntp(时间同步协议)服务端和客户端的配置说明

本文主要写了一些在Linux(CentOS)服务器上配置ntp的经验,事件缘由来源于配置Zabbix监控ntp服务时的测试配置. NTP时间同步协议的服务端(ntpd服务)和客户端(ntpdate服)不能同时运行,即在运行ntpd服务后不能运行ntpdate服务,否则ntpdate服务会提示启动失败,而且日志中也会提示"the NTP socket is in use, exiting",如下图所示. 但客户端运行时,服务端可以运行,但服务端运行时,客户端不能运行,要运行客户端服务,就

Android客户端采用Http 协议Post方式请求与服务端进行数据交互

本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议. HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响

winform 客户端 HTTP协议与服务端通信

本来从来没有仔细研究过Http协议,今天因为公司业务需求,调试了半天,终于现在会Winform用Http协议与服务端通信了,其中常用的有POST和Get方式: 仔细看了人人网和新浪等大部分都是采用GET方式获取数据的,MSN截图如下: 还是不要脱离本文的主要目的: 模拟实现登录代码如下: 1 private void pictureBox3_Click(object sender, EventArgs e) 2 { 3 string strUserName = textEdit1.Text.Tr

(8)Linux(客户端)和Windows(服务端)下socket通信实例

Linux(客户端)和Windows(服务端)下socket通信实例: (1)首先是Windows做客户端,Linux做服务端的程序 Windows   Client端 #include <stdio.h> #include <Windows.h> #pragma comment(lib, "ws2_32.lib") #define Port 5000 #define IP_ADDRESS "192.168.1.30"     //服务器地址

WebSocket安卓客户端实现详解(三)–服务端主动通知

WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 WebSocket安卓客户端实现详解(二)–客户端发送请求 终于是最后一篇啦,有点激动\ ( ≧▽≦ ) /啦啦啦, 服务端主动通知 热身完毕,我们先回顾下第一篇中讲到的服务端主动通知的流程 根据notify中事件类型找到对应的处理类,处理对应逻辑. 然后用eventbus通知对应的ui界面更新. 如果

如何创建一个客户端回调:js获得服务端的内容?

答案:表面上看去就是前端的js调用服务的C#方法,本质就是ajax,通过XMLHttpRequest对象和服务端进行交互.回调:就说回过头来调用,按理说js是一种脚本语言,怎么能用来调用服务端的呢?就是通过XMLHttpRequest实现的. 下面说一些具体的操作步骤 1.页面继承接口System.Web.UI.ICallbackEventHandler //继承接口使得:该页面可以作为服务器上的回调事件的目录 2.定义前端代码如下 <div> 请输入信息: <input type=&q

如何使用Ajax从服务端获取数据

在本文中将给出一个例子来介绍使用 Ajax 技术从服务端获得数据的三种方法.这个例子很简单,就是两个选择框(html中的<select>标签),通过选中第一个select的某一项后,会从服务端得到一些数据,并加载到第2个select中.金光大道娱乐城 从服务端获得XML格式的数据 从服务端获得数据的最容易想到的方法就是在服务端反加一定格式的数据,一般是XML格式,然后在服务端使用XMLDocument或其他技术来读取这些数据,并生成<select>标签中选项的格式文本(<op

http的post方式连接服务器,发送数据到服务端,并获取服务端的数据

大概的流程是:客户端填写了用户名和密码,在服务端进行判断,验证密码如果正确,则返回登录成功,如果密码错误,则返回登录失败 客户端是java程序,具体代码如下: package lgx.java.test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Unsupport

Android-低功耗蓝牙(BLE)-客户端(主机/中心设备)和服务端(从机/外围设备)

一.Android 低功耗蓝牙(BLE)的API简介 从Android 4.3(API 18)才支持低功耗蓝牙(Bluetooth Low Energy, BLE)的核心功能, BLE蓝牙协议是GATT协议, BLE相关类不多, 全都位于android.bluetooth包和android.bluetooth.le包的几个类: android.bluetooth. .BluetoothGattService 包含多个Characteristic(属性特征值), 含有唯一的UUID作为标识 .Bl