Ios CORS:使用react native拒绝对本地主机的http请求
我有一个Express.js服务器,支持运行在端口8080上的CORS头,我正试图从iPhone 5上的React本机应用程序向该端口发出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.]
[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,我的请求仍然会被拒绝,并出现上述错误