从reactJS应用程序调用webAPI时AWS的CORS限制

时间:2019-05-16 22:00:21

标签: reactjs vb.net amazon-web-services cors

我有一个编写的可视化基本应用程序,安装在AWS Elastic beantalk环境中。我还在AWS S3实例上安装了reactJS应用程序。在reactJS应用程序中,我执行以下提取:

var url = "";  
var which = "login";
var passedData = "6007sP0001????DEMI0000000000%20%20%20%20INTERNET/093000050vista19%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20money19%20%20%20";   
switch (which) {
    case "login":        
            url = "https://webaccuapi-dv.accurecord-direct.com/api/login?mqRequest=" + passedData;
            break;
    case "homepage":
            url = "https://webaccuapi-dv.accurecord-direct.com/api/homepage?mqRequest=" + passedData;
            break;
}

const options = { method: 'GET' };

var returnString = "";

return new Promise((resolve, reject) => {
    console.log("do fetch at ", new Date().toLocaleString())
    fetch(url, options)
    .then(function(response) {
        return response.json();
    })
    .then(function(myJson) {
        if (myJson == undefined) 
        {
            returnString = "fetch failed";
        } 
        else 
        { 
            returnString = myJson[0];
            console.log("return from fetch at ", new Date().toLocaleString())
        }
        resolve(returnString);
    }); 
});

Visual Basic应用程序中的代码包含以下代码,这些代码是我几个月前在另一篇stackoverflow文章中找到的(但我不记得在哪里):

Imports System.Web.Http
Imports System.Web.Http.Cors

Public Module WebApiConfig
Public Sub Register(ByVal config As HttpConfiguration)
    ' Web API configuration and services
    Dim Cors = New EnableCorsAttribute("http://localhost:8080,http://401kmobileapp.s3-website.us-east-2.amazonaws.com,https://my401kapp.accurecord-direct.com", "*", "*")

    config.EnableCors(Cors)
    ' Web API routes
    config.MapHttpAttributeRoutes()

    config.Routes.MapHttpRoute(
        name:="DefaultApi",
        routeTemplate:="api/{controller}/{id}",
        defaults:=New With {.id = RouteParameter.Optional}
    )
End Sub
End Module

我的理解是有限的,即视觉基本应用程序中的代码应允许处理来自http://localhost:8080http://401kmobileapp.s3-website.us-east-2.amazonaws.comhttps://my401kapp.accurecord-direct.com的请求,以及来自任何其他网址将被CORS拒绝。

不幸的是,由于某种原因,CORS拒绝了我的reactJS的请求。当我启动reactJS应用程序(位于https://my401kapp.accurecord-direct.com/时,我输入用户ID和密码(用户ID为'vista19',密码为'money19')-我不介意共享它们,因为它们是测试用户ID和密码)在浏览器控制台中出现以下错误:

  

访问地址为   'https://webaccuapi-dv.accurecord-direct.com/api/login?mqRequest=6007sP0001????DEMI0000000000%20%20%20%20INTERNET/093000050vista19%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20money19%20%20%20'   来自来源“ https://my401kapp.accurecord-direct.com”的信息已被阻止   通过CORS策略:在上不存在“ Access-Control-Allow-Origin”标头   请求的资源。如果不透明的响应满足您的需求,请设置   将请求的模式设置为“ no-cors”以使用CORS来获取资源   禁用。

如果我将所有https替换为http,并且只要在我的Visual Basic应用程序的URL列表中有http://localhost:8080,我就可以在开发机器上的localhost上使整个过程正常运行。如果删除http://localhost:8080并在本地运行,则会收到CORS错误。如果我将http://localhost:8080重新放到列表中,我将获得数据。

因此,我知道该过程在http下可以正常工作,但无法在https下运行。

0 个答案:

没有答案