ionic XMLHttpRequest cannot load http://localhost:8080/...

本文介绍如何在Ionic项目中解决HTTP请求访问本地API时遇到的跨域问题。通过安装cordova-plugin-whitelist插件,并在config.xml文件中配置相应的访问控制,以及调整Chrome浏览器设置来禁用网页安全检查。

在ionic项目里http请求访问本地API,出现跨域的问题。错误信息:XMLHttpRequest cannot load http://localhost:8080/Moonlighting/area/getAreas Response to preflight request doesn't pass access control check: A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:8100' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.

解决步骤:

1.在终端项目目录下输入 cordova plugin add cordova-plugin-whitelist

2.在config.xml里添加 :

  <access origin="*"/>


  <allow-intent href="*"/>


  <allow-navigation href="http://*/*" />

3.关闭chrome浏览器,在图标上右键选择属性,快捷方式,在目标栏目的后面添加 --disable-web-security --user-agent="Android" --user-data-dir="C:/temp-chrome-eng,确定

### 验证 URL 格式及本地测试的有效性 #### 1. URL 格式验证 `http://127.0.0.1:8080` 是一个标准的本地测试 URL,其中: - `http` 表示协议。 - `127.0.0.1` 是本地回环地址,用于指向本机。 - `8080` 是指定的端口号。 这种格式完全符合 HTTP 协议的标准,并广泛用于本地开发和测试环境中[^5]。 #### 2. 本地测试的有效性 在本地环境中,`http://127.0.0.1:8080` 可以有效访问的前提条件是: - 确保目标服务已启动并监听在 `127.0.0.1:8080` 地址上。 - 检查防火墙或安全软件是否阻止了该端口的访问。 可以通过以下命令验证服务是否正在运行: ```bash netstat -an | grep 8080 ``` 如果输出中包含类似 `TCP 127.0.0.1:8080 LISTENING` 的内容,则说明服务已正确启动[^5]。 此外,可以使用浏览器或工具(如 `curl` 或 `Postman`)测试连接: ```bash curl http://127.0.0.1:8080 ``` 如果返回预期的结果,则表明 URL 配置正确且服务可用[^5]。 #### 3. 问题与代理配置 如果在前端应用中访问 `http://127.0.0.1:8080` 出现问题,可能需要配置反向代理。例如,在 `ionic.config.json` 中添加以下配置: ```json { "proxies": [ { "path": "/api", "proxyUrl": "http://127.0.0.1:8080/api" } ] } ``` 这将确保所有对 `/api` 的请求都被转发到 `http://127.0.0.1:8080/api`[^3]。 #### 4. 微信小程序中的限制 在微信小程序中,直接使用 `http://127.0.0.1:8080` 作为请求地址是无效的,因为小程序要求服务器名必须为 HTTPS,并且需要在后台配置合法名列表[^4]。因此,建议在正式环境中使用经过 ICP 备案的名。 #### 5. 远程访问的注意事项 如果服务部署在远程服务器上,直接访问 `http://127.0.0.1:8080` 将无法成功,因为 `127.0.0.1` 是本地回环地址,仅限于本机访问。此时需要通过服务器的公网 IP 或名进行访问,例如 `http://xx.xx.xx.xxx:8080`[^1]。 对于需要从本地访问远程服务器上的服务,可以使用 SSH 隧道实现端口转发: ```bash ssh -L 8080:127.0.0.1:8080 user@server_ip ``` 这样,本地的 `http://127.0.0.1:8080` 请求会被转发到远程服务器上的对应服务[^5]。 ### 结论 `http://127.0.0.1:8080` 是一个有效的本地测试 URL,但其可用性取决于服务是否正确启动以及环境配置是否恰当。在、远程访问或特定平台(如微信小程序)中使用时,需注意相关限制并采取适当的解决方案。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值