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表示找不到对应的资源文件。需要对镜像环境进行配置:
-
在DevEco中打开终端命令窗口。
-
输入命令:
ohpm config set registry https://repo.harmonyos.com/ohpm/
-
执行安装Axios三方库命令:
ohpm install @ohos/axios
11、在ArkTS中,HTTP请求头中header参数中的key是否区分大小写
A:在HTTP协议层对参数的大小写进行了处理,是不区分大小写的,默认为小写。在请求头和响应头中都是如此。
12、httpRequest.request 请求https接口ssl证书验证失败
A:HTTPS证书是一种数字证书,这种证书的主要作用是保护网站安全性。HTTPS证书校验则是指在建立HTTPS连接时对证书进行校验,保证连接的安全性,使网站的安全性更高。
HTTPS校验主要包括以下几个步骤:
-
客户端向服务器发送HTTPS请求
-
服务器返回SSL证书
-
客户端对证书进行校验
-
如果验证通过,客户端和服务器之间就建立起了安全的HTTPS连接。
本题中的报错出现在第三步,即客户端对证书校验报错。
客户端对证书的校验验证SSL证书的四个方面:
-
检查SSL证书是否是由浏览器中“受信任的根证书颁发机构”颁发。
-
检查SSL证书中的证书吊销列表,检查证书是否被证书颁发机构吊销。
-
检查此SSL证书是否过期。
-
检查部署此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:当前不支持忽略证书验证的能力。客户端需要对证书进行验证,否则会导致中间人攻击。
更多详情查看:文档中心