Cors “;跨源请求被阻止”;用于从浏览器端JavaScript对云上IBM MQ的REST调用

Cors “;跨源请求被阻止”;用于从浏览器端JavaScript对云上IBM MQ的REST调用,cors,cloud,ibm-mq,Cors,Cloud,Ibm Mq,我正在尝试向云上的IBMMQ发送REST调用,以便从队列中放置和获取消息。我想在浏览器端JavaScript中执行此操作,但收到“跨源请求被阻止”错误消息。 我的首选是让客户端浏览器代码发送消息,但我会接受服务器端Node.js代码发送消息。从浏览器直接向云上IBM MQ发送消息。 这是不可能的,因为CORS被阻止,但有一个解决办法 本质上,为了防止在没有用户控制的情况下滥用API,您的浏览器将阻止您访问其他站点的资源,除非该站点特别允许从您的站点访问这些资源,请使用access control

我正在尝试向云上的IBMMQ发送REST调用,以便从队列中放置和获取消息。我想在浏览器端JavaScript中执行此操作,但收到“跨源请求被阻止”错误消息。
我的首选是让客户端浏览器代码发送消息,但我会接受服务器端Node.js代码发送消息。

从浏览器直接向云上IBM MQ发送消息。

这是不可能的,因为CORS被阻止,但有一个解决办法

本质上,为了防止在没有用户控制的情况下滥用API,您的浏览器将阻止您访问其他站点的资源,除非该站点特别允许从您的站点访问这些资源,请使用
access control Allow Origin
标题(值
*
可用于允许从所有站点访问)

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

从浏览器中使用RESTAPI的另一个原因通常是一个坏主意,因为它鼓励开发人员在浏览器端JavaScript代码中分发凭据,这是一种糟糕的安全实践

解决方法是让浏览器客户端向您的服务器发出请求,您将服务器配置为代表它们向云上的IBMMQ发送消息。这允许您完全控制发送到队列的消息,这有其自身的优点

从Node.js服务器向云上IBM MQ发送消息

您可能希望使用
ibmmq
npm包为您处理所有事情

如果您不希望使用该包,那么可以使用您最喜欢的请求包,并通过调用(如
GET)来调用APIhttps://web-qmanager-example.qm.us-south.mq.appdomain.cloud/ibmmq/rest/v1/login

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