【问题标题】:Enable CORS on Azure Service Bus Namespace在 Azure 服务总线命名空间上启用 CORS
【发布时间】:2016-01-29 11:41:59
【问题描述】:

我想在 JavaScript 中使用 Azure 服务总线 REST API。不幸的是,我遇到了跨源问题,因为我的服务总线命名空间与我的站点不在同一个域中。

我知道您可以为许多 Azure 服务启用 CORS,但我在 Azure 文档或其他地方找不到任何资源告诉我如何为服务总线执行此操作。

有谁知道这是否可以做到以及如何做到?

【问题讨论】:

    标签: azure cors azureservicebus


    【解决方案1】:

    我已经通过使用以下 Web.config 创建一个单独的 Web 应用程序解决了这个问题,这只是一个简单的代理。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="Proxy" stopProcessing="true">
              <match url=".*" />
              <conditions>
                <add input="{CACHE_URL}" pattern=".*" />
              </conditions>
              <action type="Rewrite" url="https://mynamespace.servicebus.windows.net/{R:0}" logRewrittenUrl="true" />
          <serverVariables>
            <set name="HTTP_ACCEPT_ENCODING" value="" />
          </serverVariables>
        </rule>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Expose-Headers" value="BrokerProperties" />
          </customHeaders>
        </httpProtocol>
      </system.webServer>
    </configuration>
    

    【讨论】:

    • 这基本上就是我最终所做的。在提供此功能之前,这似乎是目前最好的解决方法
    • 2 个问题:A)这仍然是您所知道的最佳可用解决方案吗(2018 年)。 B) 你用这个 web.config 做了什么?感觉好像你在谈论拥有一个网络服务器,它有这个配置,实际上什么都没有(因为除了代理请求到 Azure 并因此绕过 CORS 之外,它没有做任何事情。)你是如何设置网络服务器的没有实际代码?
    • ad A) 我不再维护使用它的项目,也不再为 Azure 开发应用程序,但我正在与 Microsoft 的专家讨论这个解决方案,他们告诉我这是最好的/首选的解决方案,但应将某种用户身份验证(如 OAuth 2.0)添加到服务中。广告 B)是的,端点/微服务纯粹只是代理。应用程序的实际后端正在其他服务中运行。
    【解决方案2】:

    Azure 服务总线 REST API 默认支持 CORS。接受所有来源。

    【讨论】:

      【解决方案3】:

      老实说,这不是 Azure 特有的。如果您使用 jQuery,则需要启用跨域请求选项,请在此处阅读更多信息 http://api.jquery.com/jQuery.ajax/。还有一个 JavaScript ServiceBus SDK:https://github.com/ddobric/ServiceBusJavaScriptSdk

      通常从纯度的角度来看,从客户端调用服务总线看起来并不好,我宁愿将该调用包装到您自己的 API 中。但我不知道你的情况,它可能是有效的。

      【讨论】:

      • 我不同意这个问题不是 Azure 特有的。 CORS 是在服务器端设置的,如果没有设置,我将无法解决我的问题。
      • 是的,我有同样的问题,在我们的网站上通过 JavaScript 使用 Service Bus REST API。当日志中有错误消息时,它通常会以某种方式起作用,但在极少数情况下,会出现“对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头. Origin 'myweb.com' 因此不允许访问。响应的 HTTP 状态代码为 404。”消息阻止从总线接收消息。我无法解释为什么这有时有效,有时无效。
      • 这是 100% Azure 特定的。这个应该的正确解决方案是“这里是 Azure Web 门户中可以为服务配置 CORS 设置的地方”。不幸的是,微软还没有实现这一点(插入发誓),所以我们留下了糟糕的重定向解决方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多