# 网络

小组件（Block）框架提供了网络通信能力，开发者通过 API 可以向服务端发送请求并获取结果。

## 发送 HTTP 请求

小组件（Block）框架提供了 `tt.request` API 用于发送 HTTP 请求。例如：

```
tt.request({
  method: 'GET',
  url: 'https://www.feishu.cn/api/downloads',
  success(result) {
    console.log('请求成功', result);
  },
  fail() {
    console.log('请求失败');
  }
});
```

如果请求的资源需要鉴权，可通过在请求头携带凭证的方式鉴权。

```
tt.request({
  method: 'POST',
  url: 'https://www.feishu.cn/api/test',
  header: {
    Authorization: '鉴权凭证'
  },
  success(result) {
    console.log('请求成功', result);
  },
  fail() {
    console.log('请求失败');
  }
});
```

`tt.request` 的更多参数和用法参见:[request](https://open.feishu.cn/document/uAjLw4CM/uYjL24iN/block/api/network/request)。
## 注意事项
在使用网络相关的 API 时，需要注意下列问题，请开发者提前了解：

1.  无需开发者配置服务器域名。
1.  网络请求超时时间为 `60s`（暂不可修改），请求最大并发数 `5`。
1.  网络请求头中的关键字应当遵守 HTTP 标准，具体参见 [HTTP Headers](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers)；同时 header 字段不支持设置 Referer、Cookie 等，具体参见 [禁止修改的 Headers](https://developer.mozilla.org/zh-CN/docs/Glossary/Forbidden_header_name)。因此，开发者不能通过 Cookie 鉴权。可以通过 `Authorization` 在请求头携带凭证的方式鉴权。
1.  不允许在小组件中直接调用飞书开放平台的接口（open.feishu.cn），应通过服务端调用。
1.  只要成功接收到服务器返回，无论 `statusCode` 是多少，都会进入 `success` 回调，开发者需根据业务逻辑对返回值进行判断。
1.  小组件必须使用 HTTPS 发起网络请求。请求时会对服务器域名使用的 HTTPS 证书进行校验，如果校验失败，则请求不能成功发起。建议开发者按照最高标准进行证书配置，并使用相关工具检查现有证书是否符合要求。
1.  建议开发者服务器返回值使用 UTF-8 编码。对于非 UTF-8 编码，小组件会尝试进行转换，但是会有转换失败的可能。
1.  开发者服务器需要开启 CORS 以允许 https://example.feishu.cn 跨域访问。其中，`Access-Control-Allow-Origin` 的值不能包含星号，需要设置为确定的域名，可根据请求头部中的 Origin 字段确定。例如：

```
	Access-Control-Allow-Credentials: true
	Access-Control-Allow-Headers: Content-Type
	Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
	Access-Control-Allow-Origin: https://example.feishu.cn
	```

如果需要获取到响应头中某个字段（常用于登录场景），还需要服务端配置如下字段。具体参见 [跨域资源共享](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS)。

```
	Access-Control-Expose-Headers: 字段名
	```

## WebSocket

小组件(Block)框架暂不提供建立 WebSocket 连接的能力，如需实现数据实时更新的功能，可参考以下技术实现：

-   [数据协同](https://open.feishu.cn/document/uAjLw4CM/uYjL24iN/block/service/collaborative)
-   HTTP 长轮询