React Native fetch()会在Android 7上引发“网络请求失败”,但在Android 6上运行正常

时间:2017-07-18 14:57:41

标签: android react-native fetch

我发现(question)获取请求在Android SDK平台23(Android 6)上成功结束,但在Android SDK平台24(Android 7)上我有错误'网络请求失败':

try {
   let res = await fetch('https://pricesea.ru/api/auth/login', {
     method: 'POST',
     credentials: 'include',
     headers: new Headers({'Accept': 'application/json', 'Content-type': 'application/x-www-form-urlencoded'}),
     body: `username=${this.state.username}&password=${this.state.password}`
   });

   if (res.ok) {
     ...
   }
} catch (e) {
   console.log(e);
}

错误:

TypeError: Network request failed
at XMLHttpRequest.xhr.onerror (fetch.js:441)
at XMLHttpRequest.dispatchEvent (event-target.js:172)
at XMLHttpRequest.setReadyState (XMLHttpRequest.js:546)
at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:381)
at XMLHttpRequest.js:485
at RCTDeviceEventEmitter.emit (EventEmitter.js:181)
at MessageQueue.__callFunction (MessageQueue.js:260)
at MessageQueue.js:101
at MessageQueue.__guard (MessageQueue.js:228)
at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:100)

我正在使用RN 0.46.3。

这可能是什么原因?

编辑:我测试了22到26的API版本,问题仅出在API 24(Android 7.0)上。在其他API版本上,请求结束成功。

编辑2: Github RN问题:https://github.com/facebook/react-native/issues/15100

1 个答案:

答案 0 :(得分:2)

这是Android 7.0上的一个错误,described here。 Vicky Chijwani提出的解决方法:

  

将服务器配置为使用椭圆曲线prime256v1。对于   例如,在Nginx 1.10中,您可以通过设置ssl_ecdh_curve来完成此操作   prime256v1;