对于从浏览器端对 IBM MQ on Cloud 的 REST 调用,“跨源请求被阻止”JavaScript

“Cross-Origin Request Blocked” for REST calls to IBM MQ on Cloud from browser-side JavaScript

我正在尝试将 REST 调用发送到 IBM MQ on Cloud 以从队列中 PUT 和 GET 消息。我想在浏览器端 JavaScript 执行此操作,但收到“跨源请求已阻止”错误消息。 我的偏好是让客户端浏览器代码发送消息,但我将满足于我的服务器端 Node.js 代码发送消息。

从浏览器直接向 IBM MQ on Cloud 发送消息

由于 CORS 被阻止,这是不可能的,但有一个解决方法。

本质上,为了防止在用户无法控制的情况下滥用 API,您的浏览器将阻止您从另一个站点访问资源,除非该站点明确允许从您的站点访问它们,使用 Access-Control-Allow-Origin header(值 * 可用于允许从所有站点访问)。

IBM MQ on Cloud 的 REST API 不允许 CORS,也不允许您修改任何 Web 控制台或 REST API 属性,这意味着您无法将消息发送到 IBM MQ直接从浏览器云。

从浏览器使用 REST API 通常不是一个好主意的另一个原因是,它鼓励开发人员在他们的 browser-side JavaScript 代码中分发凭据,这是一个糟糕的安全做法。

解决方法是让浏览器客户端向您的服务器发出请求,您将其配置为代表它们将消息发送到 IBM MQ on Cloud。这使您可以完全控制将哪些消息发送到 queue,这有其自身的好处。

正在从 Node.js 服务器向 IBM MQ on Cloud 发送消息

您可能希望使用 ibmmq npm 包来为您处理一切。 https://www.npmjs.com/package/ibmmq

如果您不想使用该包,那么您可以使用您最喜欢的请求包并使用 GET https://web-qmanager-example.qm.us-south.mq.appdomain.cloud/ibmmq/rest/v1/login.

等调用来调用 API

即使使用 server-side Node.js 代码,您仍可能 运行 遇到 CORS 请求被阻止错误消息的问题。根据我多年前的个人经验,我努力让 jQuery 运行ning 在我的后端应用程序中忽略 CORS 检查,这很可能已经被修复,但其他一些 npm 包可能有类似的问题. 如果您遇到这些问题,可以尝试几件事。首先检查您正在使用的包的文档,您可能需要启用一个跳过 CORS 检查选项。下一个选项是尝试使用不同的包来处理您的 REST 调用。最后的选择是用另一种编程语言编写一个简单的代理,例如 Python 和 http.server.