1.运行环境

(1)WebGL运行浏览器:Firfox Quantum 67.0(64位)

(2)服务端API运行环境:IIS,.Net Core 2.1 API

2.问题:CORS 头缺少Access-Control-Allow-Origin

问题原因:由于浏览器的同源策略(了解同源策略详见文章结尾的参考资料),不同源(不同域名)之间的交互是受限的,即跨域访问

解决方案:使用 CORS 允许跨源访问

在.Net Core 2.1 API项目的Startup.cs中设置跨域允许访问的域名:

 public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
  // 跨域,允许所有域名访问
  services.AddCors(options => options.AddPolicy("AllowCorsDomain", p => p.WithOrigins("*")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()));
}
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
  }
  app.UseMvc();
  app.UseCors("AllowCorsDomain");
}

3.问题:不允许有多个 'Access-Control-Allow-Origin' CORS 头

WebGL请求Http有两种方式,分别位WWWUnityWebRequest。通过两种方式分别在Firefox浏览器中进行访问,都会出现程序中无法获取到数据的问题。通过监测发现,浏览器的HTTP请求是正常的,数据返回也正常,但是由于返回数据表头中有两个Access-Control-Allow-Origin字段,而导致WebGL无法解析到数据。

正常来说,服务器返回的数据表头是只包含一个Access-Control-Allow-Origin字段的,那么多余的一个是怎么来的呢?通过进一步测试发现,WebGL中的两种HTTP请求方式在请求数据发送的表头中都包含有一个Origin字段,服务器返回的数据中也包含了这一个,故会返回两个Access-Control-Allow-Origin

在测试中,通过删除请求头中的Origin字段,发现请求一切正常。但是,在Unity中,WWWUnityWebRequest两种请求方式都是封装好的,默认带了Origin字段,所以是无法删除Origin字段的,因此在Unity中暂时无法解决该问题

既然在Unity中无法解决该问题,那么只能在服务器端尝试解决。

在不断尝试各种办法无效后,发现在服务器端IIS中,有个HTTP响应标头,打开一看,是关于服务器端数据包表头的设置,OK,删掉Access-Control-Allow-Origin的,这样服务器将不会再返回Access-Control-Allow-Origin信息,问题解决。

4.参考资料

(1)启用 ASP.NET Core 中的跨域请求 (CORS)

(2)浏览器的同源策略

(3)WebGL在Firefox浏览器中已拦截跨源请求(CORS 头缺少)的解决方法(服务器为IIS)

Unity WebGL请求Http接口出现的Cors跨域问题的更多相关文章

  1. vue-resource post请求后台接口报400(跨域问题解决方法)

    1.打开config/index.js,在proxyTable中添写如下代码 proxyTable: { '/api': { //使用"/api"来代替"http://f ...

  2. CORS跨域请求

    一.问题: 服务器端代码 from flask import Flask from flask import make_response from flask import jsonify app = ...

  3. python 全栈开发,Day100(restful 接口,DRF组件,DRF跨域(cors组件))

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确.方便快速开发 - 针对pc,手机,ipad,微信,支付宝... 使用同一个接口 2. 简述http协议? - 基 ...

  4. 4 伪ajax:jsonp、cors 跨域请求

    一.同源策略 https://www.cnblogs.com/yuanchenqi/articles/7638956.html 同源策略(Same origin policy)是一种约定,它是浏览器最 ...

  5. 记一次 CORS 跨域请求出现 OPTIONS 请求的问题及解决方法

    今天前后端在联调接口的时候,发生了跨域请求资源获取不到的问题. 首先说明下跨域问题的由来.引自HTTP 访问控制 的一段话: 当 Web 资源请求由其它域名或端口提供的资源时,会发起跨域 HTTP 请 ...

  6. 关于CORS(跨域资源共享)的几个http请求头小实验

    对几种与跨域相关的请求头做一个总结 关于跨域可以看:9 种常见的前端跨域解决方案(详解) 看完后可以配合我的代码做些实验,看看注释掉某个响应头会发生什么,整体代码会在最后贴出 跨域简单请求 需要在服务 ...

  7. django之CORS跨域请求

    对于想要利用django框架实现前后端分离,首要的问题是解决跨域请求的问题,什么是跨域请求?简单来说就是当前发起的请求的域与该请求指向的资源所在的域不一致.当协议+域名+端口号均相同,那么就是同一个域 ...

  8. SpringBoot配置Cors跨域请求

    一.同源策略简介 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[or ...

  9. CORS跨域请求规则以及在Spring中的实现

    CORS: 通常情况下浏览器禁止AJAX从外部获取资源,因此就衍生了CORS这一标准体系,来实现跨域请求. CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origi ...

随机推荐

  1. HDU 1800 hash 找出现最多次数的字符串的次数

    乘法hash: 这类hash函数利用了乘法的不相关性 int Hash(char *str){    int seed = 131 , value=0;    while(*str != '\0'){ ...

  2. 51nod 1298 圆与三角形 (计算几何)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 求出圆心到三条线段的最短距离,然后判断是否有顶点在圆外,就把全部情 ...

  3. 51 nod 1007 正整数分组 (简单01背包) && csu 1547: Rectangle

    http://www.51nod.com/onlineJudge/questionCode.html#problemId=1007&noticeId=15020 求出n个数的和sum,然后用s ...

  4. 洛谷——P1832 A+B Problem(再升级)

    P1832 A+B Problem(再升级) 题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛 ...

  5. list循环删除单个元素

    摘自https://www.cnblogs.com/pcheng/p/5336903.html JAVA中循环删除list中元素的方法总结 JAVA中循环遍历list有三种方式for循环.增强for循 ...

  6. Eclipse编辑YAML插件-YEdit

    官网:https://github.com/oyse/yedit 离线版本:(链接: https://pan.baidu.com/s/1b1j2gQ 密码: wyyb) 安装方法:直接复制JAR包到P ...

  7. 未能找出类型或命名空间名称“T” 问题的解决方案

    在已经引用“using System.Collections.Generic;”时,还是提示急未能找出类型或命名空间名称“T”的问题.

  8. 关于错误 e297: write error in swap file;E297: 交换文件写入错误

    在linux系统下修改文件vim的时候,忽然报错 E297: 交换文件写入错误 或者 e297: write error in swap file 原因:硬盘空间不足,我去,就剩下16M了

  9. 删除子节点XML数据

    XmlDocument xDoc = new XmlDocument(); xDoc.Load(txtValueHelper.txtValue); XmlNodeList list = xDoc.Se ...

  10. Java 中 modifer 'public' is reduntant for interface methods

    http://androidren.com/index.php?qa=322&qa_1=java-%E4%B8%AD-modifer-public-is-reduntant-for-inter ...