场景:跨域问题只存在于浏览器端 ,App和小程序不存在跨域问题。

产生原因:由于uni-app是标准的前后端分离模式
开发h5应用时如果前端代码和后端接口没有部署在同域服务器,就会被浏览器报跨域。

前后端分离的开发模式越来越流行,目前绝大多数的公司与项目都采取这种方式来开发,它的好处是:
前端可以只专注于页面实现,而后端则主要负责接口开发,前后端分工明确,彼此职责分离,不再高度耦合。
但是由于这种开发模式将前后端项目分开来独立部署,所以将必不可免的会碰到跨域问题.

解决方案:uni-app官方推荐使用HBuilderX中内置的浏览器去预览,在内置的浏览器中不会存在跨域问题;
但是要是在Chrome 浏览器中预览的话就会出现这个跨域问题!官方推荐使用安装Allow-Control-Allow-Origin: * 插件的方式去解决。参考:uni-app H5跨域问题解决方案(CORS、Cross-Origin)。
拓展:在App、小程序等非H5平台,是不涉及跨域问题的。稍微例外的是iOS的wkWebview,在5+App,或uni-app的web-view组件及renderjs中,由于WKWebview限制也会产生跨域,这方面另见Appstore审核反馈废弃UIWebview APIs问题的说明。uni-app在App的普通js代码不运行在Webview下,不存在跨域问题。

那什么是跨域呢 我们来了解下!

1. 什么是跨域

跨域指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的(目前所有的浏览器都实行同源策略),是浏览器对javascript施加的安全限制。

同源策略:指协议、域名、端口都要相同,其中有一个不同都会产生跨域
跨域:指浏览器不能执行其他网站的脚本。(跨域限制访问,其实是浏览器的限制)

A B 分析 是否跨域
https://www.baidu.com/index.html https://www.baidu.com/index.php 同源
http://www.baidu.com/index.html https://www.baidu/index.php 协议不同(http/https)
http://www.123.com/index.php http://www.456.com/index.php 主域名不同(123/456)
https://123.baidu.com/index.html https://453.baidu.com/index.php 子域名不同(123/456)
http://www.123.com:8080/index.html http://www.123.com:8081/index.php 端口不同(8080/8081)

注意*:localhost和127.0.0.1虽然都指向本机,但也属于跨域;域名和域名对应的ip也属于跨域。

2. 调试时的跨域解决方案

前端工程师调试时,运行起来的前端代码在uni-app自带的web服务器中,而不是部署在后台业务服务器上,此时就会遇到跨域。除了协调后端配置允许跨域,其实也可以自己解决跨域问题。
共3种方案可选:

2.1 使用HBuilderX内置浏览器

内置浏览器:经过官方处理,不存在跨域问题,简单易用,推荐使用(需HBuilderX 2.6以上)。
使用:在打开页面后,点HBuilderX右上角的预览,即可打开内部浏览器;或者在运行菜单里选择运行到内置浏览器也可以。

2.2 配置webpack-dev-server代理
参考:配置指南

2.3 给浏览器安装跨域插件
(1) 当我们使用谷歌浏览器调试ajax请求的时候可能会遇到这两个问题:
跨域资源共享CORS:CORS是一种w3c标准,全称是"跨域资源共享(Cross-origin resource sharing)"。它允许浏览器向跨源服务器发出XMLHttpRequest请求,从而克服了同源使用的限制。(传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求。浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片或者脚本;但是Javascript脚本是不能获取这些资源的内容的,它只能被浏览器执行或渲染。)
跨源读取阻塞 CORB:如果实际响应的内容与浏览器预期的内容有差异可能被CORB策略所阻止。
最常见的就是关于跨域资源共享的问题,也就是我们通常说的跨域。当我们本地服务器预览页面,使用ajax访问远程服务器的内容时就会请求失败,比如:本地预览的地址是:http://localhost:8080/,访问的接口地址是http://dcloud.io/api。

(2) 如果仅仅是为了本地预览,可以使用Chrome浏览器插件Allow-Control-Allow-Origin: *来协助调试。

本插件并非万能,请仔细阅读与学习浏览器安全策略相关知识。本插件只能解决简单请求的跨域调试;对于非简单请求的OPTION预检请求以及线上服务器也有跨域需求的用户,需要服务端配合解决。即此插件适合本地调试使用,线上部署如果和接口不同域还需要服务端配合。

(3) 插件安装方式

在线安装:在谷歌浏览器直接打开插件地址安装插件即可
离线安装:国内用户如果无法在线安装,可点击本地下载后离线安装插件
(4) 若使用插件后跨域问题依旧存在。

分析:uni-app 中 manifest.json->h5->devServer 实际上对应 webpack 的 devServer,鉴于 manifest 为 json 文件,故 webpack.config.js->devServer配置项下的简单类型属性均可在manifest.json->h5->devServer节点下配置,funciton 等复杂类型暂不支持。参考:manifest.json官方配置文档和uniapp-admin。
解决:参考使用proxy配置反向代理的方式去实现跨域请求,未验证

3. 部署时的跨域解决方案

(1) 方案1:最直接的,当然还是将前端代码和后端接口部署在同域的web服务器上

(2) 方案2:由后台服务器配置策略,设为允许跨域访问。

Access-Control-Allow-Origin是HTML5中定义的一种解决资源跨域的策略。通过服务器端返回带有Access-Control-Allow-Origin标识的Response header,用来解决资源的跨域权限问题。即在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息:

  • Access-Control-Allow-Origin: * //允许所有域名的脚本访问该资源
  • Access-Control-Allow-Origin:www.google.com //允许特定的域名访问

4. 其他

如果资源是html页面,可通过如下设置 解决跨域问题

下面展示一些 内联代码片

<meta http-equiv="Access-Control-Allow-Origin" content="*">

*uni-app之H5端跨域问题解决方案相关推荐

  1. uniapp+uniCloud实现批量上传图片到云端(解决h5端跨域问题)

    批量上传图片到云端 流程: 1.uni.chooseImage选择图片,返回图片临时路径 2.根据图片临时路径数量,循环调用uniCloud.uploadFile上传图片到云存储,返回图片线上路径 3 ...

  2. 小程序适配H5端跨域问题解决

    小程序本身自带有解决跨域的方法,但是当小程序运行到浏览器的时候,由于写小程序的时候并没有处理跨域,所以H5端做相同的axios请求,小程序没有报错,H5端却会报错 解决方法: 我们需要到manifes ...

  3. H5项目中通过iframe引入语音导览解决微信jsapi关于同一级域名二级域名跨域问题解决方案

    H5项目中通过iframe引入语音导览解决微信jsapi关于同一级域名二级域名跨域问题解决方案 在项目的入口文件App.js中 <iframe src="https://www.abc ...

  4. java 服务端 处理跨域_javaweb服务端跨域支持

    项目开发为了支持web浏览器ajax的直接请求,涉及到了跨域的需求,通过学习对跨域有了更深入的认识,现在总结一下: 1.跨域说明 跨域指请求和服务的域不一致,浏览器和H5的ajax请求有影响,而对服务 ...

  5. 跨域调用webapi web端跨域调用webapi

    web端跨域调用webapi 在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的 ...

  6. 淘宝商品评价api接口(app、h5端),淘宝评论视频API接口,淘宝评论API接口

    淘宝商品评价api接口(app.h5端),淘宝评论视频API接口,淘宝评论API接口可以通过商品id,获取商品评价信息.评价内容.买家秀图片.评论浏览量.评价视频.评价追评等页面上展示的数据均可以拿到 ...

  7. 淘宝商品评价api接口,淘宝评论视频API接口,淘宝评论API接口(app、h5端)

    淘宝商品评价api接口,淘宝评论视频API接口,淘宝评论API接口(app.h5端)可通过商品id,获取商品评价信息.评价内容.买家秀图片.评论浏览量.评价视频.评价追评等页面上展示的数据均可以拿到, ...

  8. 淘宝商品详情API接口(app、h5端)

    淘宝商品详情接口(app.h5端)代码对接可获取到淘宝详情页面数据,包括商品标题,商品价格,商品图片,SKU属性,SKU信息,SKU详情图,库存,数量,销量,评论总数,掌柜昵称,国内运费,品牌等页面上 ...

  9. 淘宝天猫商品详情API接口(app、h5端)

    淘宝天猫商品详情接口(app.h5端)代码对接可获取到淘宝详情页面数据包括PC端,APP端,H5端,参数包括商品标题,商品价格,商品图片,SKU属性,SKU信息,SKU详情图,库存,数量,销量,评论总 ...

最新文章

  1. 3.3.2 差错控制(检错编码)
  2. js请求结果拦截机器_分享:一步一个脚印,vue入门之axios的应用及拦截封装
  3. linux安装mysql的分支mariadb
  4. 五子棋游戏设计VHDL语言
  5. 问题:循环元素,被选中元素个数,全选
  6. [每日一题] 11gOCP 1z0-052 :2013-09-23 Oracle11g 内存参数设置...................................C7...
  7. IntelliJ IDEA 如何设置编辑窗口的背景图片
  8. 用eclipse往mysql插入中文出现乱码解决方法
  9. 手机界的革命-云手机(华为云)
  10. Raki的读paper小记:Dark Experience for General Continual Learning: a Strong, Simple Baseline
  11. Java判断操作系统是32位还是64位
  12. 计算机网络系统有哪些核心技术,区块链核心技术体系架构的网络层主要包括什么...
  13. arcgis字段计算器赋值_ArcGIS中62个常用应用技巧汇总【必须收藏】
  14. 开关电源电路组成及常见各模块电路分析
  15. sc-RNA seq与Illumina测序
  16. 逊哥dp专题 总结(普通dp,斜率优化dp,数位dp)
  17. 想通过手机刷视频赚钱?这篇文章你有必要了解一下
  18. 传奇单机架设超详细图文教程
  19. 雨听 | 英语学习笔记(十二)~作文范文:成绩与能力
  20. 2022杭电多校八 1011-Stormwind(贪心)

热门文章

  1. Linux查看pcie槽位
  2. 软件加密系统Themida应用程序保护指南(三):保护宏的选择
  3. 赢鸡:2010年2月网络经典段子集锦
  4. DS3231的使用(一)
  5. 拉取项目pom文件报错,jai_core-1.1.3.jar,解决jar引入问题
  6. CA通信时候遇到的问题
  7. week9 B-东东学打牌
  8. Java连接Mysql(JDBC)
  9. 《拼音字母》 蓝桥杯复试试题
  10. 通过Python读写Excel,实现爬虫的两个方案