全部产品
云市场

CSB 支持 HTTP 请求和响应的压缩传输

更新时间:2019-10-15 10:24:18

CSB 按照 HTTP 协议的规范实现了 HTTP 请求和响应内容的压缩传输。

使用约束

  • 仅支持新版本服务(serviceModel version: 2.0)。
  • 仅支持 gzip 压缩。

前提条件

使用 http-client-1.1.5.4.jar 及以上版本的csb sdk。

application/x-www-form-urlencoded 请求压缩

修改 CSB 客户端代码

示例代码:

  1. HttpParameters.Builder builder = new HttpParameters.Builder();
  2. builder.requestURL("http://localhost:8086/CSB") // 设置 CSB 服务地址。CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。
  3. .api("http2http1") // 设置服务名
  4. .version("1.0.0") // 设置版本号
  5. .method("post") // 设置调用方式, get/post
  6. .accessKey("ak").secretKey("sk"); // 设置 accessKey 和 secretKey
  7. try {
  8. builder.setContentEncoding(ContentEncoding.gzip);//设置请求消息压缩
  9. // 设置请求参数
  10. builder.putParamsMap("name", "name中文1").putParamsMap("times", "3");
  11. HttpReturn ret = HttpCaller.invokeReturn(builder.build());
  12. } catch (HttpCallerException e) {
  13. // error process
  14. }

HTTP 请求示例如下:

urlencoded

业务服务端处理方式

根据Content-Encoding: gzip判断请求消息是否压缩,并正确解压,然后再使用 URL 解码参数。

Content-Type: application/json 请求压缩

修改 CSB 客户端代码

示例代码:

  1. HttpParameters.Builder builder = new HttpParameters.Builder();
  2. builder.requestURL("http://localhost:8086/CSB") // 设置 CSB 服务地址。CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。
  3. .api("http2http1") // 设置服务名
  4. .version("1.0.0") // 设置版本号
  5. .method("post") // 设置调用方式, get/post
  6. .accessKey("ak").secretKey("sk"); // 设置accessKey 和 设置secretKey
  7. try {
  8. builder.setContentEncoding(ContentEncoding.gzip);//设置请求消息压缩
  9. // 设置请求参数
  10. builder.putParamsMap("name", "name1中文sdfs sdlkfsadfksdkfds").putParamsMap("times", "3");
  11. Map<String, String> kvMap = new HashMap<String, String>();
  12. for (int i = 0; i < 100; ++i) {
  13. kvMap.put(String.valueOf(i), "abc中文佛挡杀佛顶替枯lksd" + i);
  14. }
  15. builder.contentBody(new ContentBody(JSON.toJSONString(kvMap)));
  16. } catch (HttpCallerException e) {
  17. // error process
  18. }

示例http请求如下图:

Content-Type

业务服务端处理方式

根据Content-Encoding: gzip判断请求消息是否压缩,并正确解压。

application/octet-stream 请求压缩

修改 CSB 客户端代码

示例代码:

  1. HttpParameters.Builder builder = new HttpParameters.Builder();
  2. builder.requestURL("http://localhost:8086/CSB") // 设置 CSB 服务地址。CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。
  3. .api("http2http1") // 设置服务名
  4. .version("1.0.0") // 设置版本号
  5. .method("post") // 设置调用方式, get/post
  6. .accessKey("ak").secretKey("sk"); // 设置accessKey 和 设置secretKey
  7. try {
  8. builder.setContentEncoding(ContentEncoding.gzip);//设置请求消息压缩
  9. // 设置请求参数
  10. builder.putParamsMap("name", "name中文1").putParamsMap("times", "3");
  11. builder.contentBody(new ContentBody(new File("文件名.xxx")));
  12. HttpReturn ret = HttpCaller.invokeReturn(builder.build());
  13. } catch (HttpCallerException e) {
  14. // error process
  15. }

HTTP 请求示例如下:

multipart

业务服务端处理方式

根据Content-Encoding: gzip判断请求消息是否压缩,并正确解压。

multipart/form-data 请求压缩

示例代码:

  1. HttpParameters.Builder builder = new HttpParameters.Builder();
  2. builder.requestURL("http://localhost:8086/CSB") // 设置请求的URL
  3. .api("http2http1") // 设置服务名
  4. .version("1.0.0") // 设置版本号
  5. .method("post") // 设置调用方式, get/post
  6. .accessKey("ak").secretKey("sk"); // 设置 accessKey 和 secretKey
  7. try {
  8. builder.setContentEncoding(ContentEncoding.gzip);//设置请求消息压缩
  9. // 设置form请求参数
  10. builder.putParamsMap("times", "2").putParamsMap("name", "we中文wesdsfsfdsasdefds");
  11. //设置上传附件
  12. builder.addAttachFile("file1", new File("文件名1.xxx")); //默认按请求消息的压缩标记来判断是否压纹
  13. builder.addAttachFile("file2", "fileName2", new FileInputStream(new File("文件名2.yyy")),ContentEncoding.none); //明确不压缩
  14. HttpReturn ret = HttpCaller.invokeReturn(builder.build());
  15. } catch (Exception e) {
  16. // error process
  17. }

示例http请求如下图:

multipart

业务服务端处理方式

根据Content-Encoding: gzip判断请求消息是否压缩,并正确解压。

响应压缩

CSB HTTP SDK 会自动解析 HTTP 响应,并根据 HTTP Header 的Content-Encoding: gzip自动解压响应消息。