【HarmonyOS NEXT】FAQ之系统开发(网络3)

1、http是否支持连接复用

A:http请求时,底层建立的连接是TCP/IP连接,其是支持连接复用的。

2、熄屏状态下网络请求失败

A:息屏状态下,应用会被切换到后台,此时应用会被底层系统进行能效资源管控,应用可能会被挂起,应用内的UIAbility不再运行。当应用被挂起后,网络请求将不会发起,也就无法获取到数据。

3、应用能否指定使用某一网络来发请求

A:应用可以使用connection.setAppNet()接口来将应用绑定到指定的网络上,此时该应用的所有网络请求都会使用该网络,不支持该应用的某个请求使用其他网络。如若需要使用其他网络,则需要再次通过connection.setAppNet()将应用绑定到其他网络上。

4、网络波动情况下,底层系统是否会关闭Socket连接

A:在网络波动时(网络一下断开,一下连上),底层系统采用的策略是断开连接,关闭Socket端口,不会等待超时返回。

5、网络相关的三方库有哪些

A:网络相关的三方库有Axios、httpclient、okdownload等,具体分类可以参考三四方库网络分类

6、三方件@ohos/axios中发起post请求,如何以queryParams形式传递参数

A:如下两种方式

  • 方式一:使用axios.post接口只接收一个参数,Url.URLParams需要转成字符串拼接在url后面。

    let params: Url.URLParams = new Url.URLParams()params.append("fod" :'1')params.append("bard" :'2')axios.post('https://developer.mozilla.org/?' + params.toString()).then(res => {  this.message = "request result: " + JSON.stringify(res.data);}).catch(err => {  this.message = "request error: " + err.message;})
  • 方式二:使用axios接口只接收一个config对象,请求参数写在config对象的params中。

    axios({ url: 'https://developer.mozilla.org/?', method: 'post', params: { fod: '1', bard: '2', } }).then(res => {  this.message = "request result: " + JSON.stringify(res.data);}).catch(err => {  this.message = "request error: " + err.message;})

7、ArkTS中HTTP请求如何以JSON形式进行传输

A:在HTTP协议消息头中,使用Content-Type来表示媒体类型信息。

设置该参数值为application/json,请求中的数据就会以JSON形式进行传输。参考代码如下:

import { http } from '@kit.NetworkKit';  class Header {   public contentType: string;   constructor(contentType: string) {     this.contentType = contentType;   } } let httpRequest = http.createHttp(); let promise = httpRequest.request("EXAMPLE_URL", {   method: http.RequestMethod.GET,   connectTimeout: 60000,   readTimeout: 60000,   header: new Header('application/json') });

8、手机网络正常,但是调用connection.hasDefaultNet()接口失败

A:connection.hasDefaultNet接口需要申请权限ohos.permission.GET_NETWORK_INFO,Stage模型中,在module.json5配置文件中声明权限ohos.permission.GET_NETWORK_INFO即可。参考代码如下:

{ 
  "module" : { 
    // ... 
    "requestPermissions":[ 
      { 
        "name" : "ohos.permission.GET_NETWORK_INFO", 
        "reason": "$string:reason", 
        "usedScene": { 
          "abilities": [ 
            "FormAbility" 
          ], 
          "when":"inuse" 
        } 
      }, 
}

9、如何使用http请求从网络上获取数据

A:使用@kit.NetworkKit模块来发起http网络请求。

10、按照Axios三方库的下载安装步骤安装Axios,报错404如何解决

A:错误码404表示找不到对应的资源文件。需要对镜像环境进行配置:

  1. 在DevEco中打开终端命令窗口。

  2. 输入命令:

    ohpm config set registry https://repo.harmonyos.com/ohpm/
  3. 执行安装Axios三方库命令:

    ohpm install @ohos/axios

11、在ArkTS中,HTTP请求头中header参数中的key是否区分大小写

A:在HTTP协议层对参数的大小写进行了处理,是不区分大小写的,默认为小写。在请求头和响应头中都是如此。

12、httpRequest.request 请求https接口ssl证书验证失败

A:HTTPS证书是一种数字证书,这种证书的主要作用是保护网站安全性。HTTPS证书校验则是指在建立HTTPS连接时对证书进行校验,保证连接的安全性,使网站的安全性更高。

HTTPS校验主要包括以下几个步骤:

  1. 客户端向服务器发送HTTPS请求

  2. 服务器返回SSL证书

  3. 客户端对证书进行校验

  4. 如果验证通过,客户端和服务器之间就建立起了安全的HTTPS连接。

本题中的报错出现在第三步,即客户端对证书校验报错。

客户端对证书的校验验证SSL证书的四个方面:

  1. 检查SSL证书是否是由浏览器中“受信任的根证书颁发机构”颁发。

  2. 检查SSL证书中的证书吊销列表,检查证书是否被证书颁发机构吊销。

  3. 检查此SSL证书是否过期。

  4. 检查部署此SSL证书校验的网站域名和证书域名是否一致。

客户端如果没有对证书进行校验,就会导致中间人攻击,中间人攻击分两种:SSL劫持和SSL剥离。

SSL劫持原理:第三方攻击者会先把自己接到请求方和接收方之间,然后通过自己伪造的证书先模拟成接收方和请求方交换数据,然后再模拟自己为请求方与接收方进行数据交互。一般SSL劫持容易被用于使用者在自己的浏览器等地方安装了未被权威CA认证的证书,因此需要进行证书校验。

图1 SSL劫持

点击放大

SSL剥离通常发生在HTTP请求中,不过现在的网站大部分强制使用HTTPS访问网站,这里不再赘述。

问题1:开发者应对服务端的证书进行上述四个方面的检查,确认无误。若服务端证书是自定义的CA,即SSL证书不是由浏览器中“受信任的根证书颁发机构”颁发,可以通过使用httpRequest.request接口的HttpRequestOptions参数中的caPath设置自定义CA的路径,如果设置了此参数,系统将使用用户指定路径的CA证书,(开发者需保证该路径下CA证书的可访问性),否则将使用系统预设CA证书,系统预设CA证书位置:/etc/ssl/certs/cacert.pem。

问题2:当前不支持忽略证书验证的能力。客户端需要对证书进行验证,否则会导致中间人攻击。

更多详情查看:文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值