Ios CORS:使用react native拒绝对本地主机的http请求

Ios CORS:使用react native拒绝对本地主机的http请求,ios,xcode,http,https,react-native,Ios,Xcode,Http,Https,React Native,我有一个Express.js服务器,支持运行在端口8080上的CORS头,我正试图从iPhone 5上的React本机应用程序向该端口发出http请求,但收到以下错误: [Error: Request has been terminated Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.]

我有一个Express.js服务器,支持运行在端口8080上的CORS头,我正试图从iPhone 5上的React本机应用程序向该端口发出http请求,但收到以下错误:

[Error: Request has been terminated
Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.]
请求如下所示:

import request from 'superagent'

const getMarkers = (url, callback) => {
  request
    .get(url)
    .set('Accept', 'application/json')
    .end(callback)
}

getMarkers('localhost:8080/markers, this.handleMarkers)
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept')
  next()
})
我的Express中间件如下所示:

import request from 'superagent'

const getMarkers = (url, callback) => {
  request
    .get(url)
    .set('Accept', 'application/json')
    .end(callback)
}

getMarkers('localhost:8080/markers, this.handleMarkers)
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept')
  next()
})
我允许对我的项目进行“任意加载”

当我使用ios模拟器时,这些请求运行良好。另外,当我下载ngrok,在我的express server目录中运行,并向ngrok提供的https地址发出客户端请求时,这些请求运行良好


我的问题是:我如何在不使用ngrok之类的工具的情况下促进这些请求?如果可能的话,我希望能够仅使用http和localhost快速开发。我非常感谢其他人在这个问题上提供的任何见解

我相信这是你的问题:

应用程序传输安全性是iOS 9中添加的一项安全功能,它拒绝所有未通过HTTPS发送的HTTP请求。这可能导致HTTP通信被阻塞,包括开发人员本地服务器

默认情况下,在使用React Native CLI生成的项目中禁用ATS,以简化开发。在构建应用程序进行生产之前,应通过从ios/文件夹中的Info.plist文件中删除NSAllowsArbitraryLoads条目来重新启用ATS

NSAppTransportSecurity
NSAllowsArbitraryLoads
NSExceptionDomains
**你的域名在这里**
NSTemporary ExceptionalLowsInSecureHttpLoads

如果这是一个bug,下面是一些我发现很有用的工作循环:

对于express应用程序:
-尝试显式添加http头:
“X-request-With”:“XMLHttpRequest”

-我有时需要将服务器设置为在IP 0.0.0.0而不是127.0.0.1上运行

对于react本机应用程序:

-我曾经有过这样的经历:在发出请求时,我需要使用127.0.0.1或特定主机的名称(而不是使用localhost)

谢谢@MattAft。但我很困惑——我认为将允许任意加载设置为true将允许我发出http请求,这正是我想要的。我弄错了吗?是的,你会想让它打开的。但是你必须设置你想让它工作的域。我会更新我的答案,让它生效。太棒了,谢谢。我也有相同的方法,使用
localhost
,但我仍然无法向localhost发出http请求。你知道我还可以尝试什么吗?我没有localhost,我认为设备不了解localhost是什么存在一些问题,这就是为什么它可以在模拟器上正常工作。尝试输入你的ip地址。嗯,你指定了你的公共ip,并且可以向传统上被防火墙阻止的端口发出请求?如果我运行
ifconfig | grep broadcast
并将来自该调用的IP放入
中,然后向
1.2.3.4:8080
发出请求,其中
1.2.3.4
是我的IP,我的请求仍然会被拒绝,并出现上述错误