vertx 应用程序中的 CORS 问题无法正常工作

2024-02-11

我的 Vertx 服务器驻留在服务器 A 中,客户端驻留在服务器 B 中。当我尝试访问 vertx 服务器时,弹出 CORS 错误。我添加了一些服务器端代码来处理 CORS 问题,但它不起作用。我们是否需要在客户端添加一些标头。我在这里缺少什么?任何人都可以帮忙吗

Vertx 服务器端:

Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
router.route().handler(io.vertx.rxjava.ext.web.handler.CorsHandler.create("*")
.allowedMethod(io.vertx.core.http.HttpMethod.GET)
.allowedMethod(io.vertx.core.http.HttpMethod.POST)
.allowedMethod(io.vertx.core.http.HttpMethod.OPTIONS)
.allowedHeader("Access-Control-Request-Method")
.allowedHeader("Access-Control-Allow-Credentials")
.allowedHeader("Access-Control-Allow-Origin")
.allowedHeader("Access-Control-Allow-Headers")
.allowedHeader("Content-Type"));

客户端实现:

    function(url, user) {
    eventBus = new EventBus(url);
    eventBus.onopen = function() {
            //Do Something
    }
 }

Update:

我删除了 header 中的 withCredential 属性。现在我的代码看起来像

if (ar.succeeded()) {
routingContext.response().setStatusCode(200).setStatusMessage("OK")
.putHeader("content-type", "application/json")
.putHeader("Access-Control-Allow-Origin", "*")
.putHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS")
.end(
Json.encodePrettily(ar.result().body())
//(String) ar.result().body()
);
routingContext.response().close(); 

但仍然弹出以下错误。你能帮我吗?

XMLHttpRequest cannot load https://192.168.1.20:7070/Notify/571/rn4nh0r4/xhr_send?t=1471592391921. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'https://login.com' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.

Update2:添加我的客户地址后

.putHeader("Access-Control-Allow-Origin", "*")

我得到以下日志:

XMLHttpRequest cannot LOAD https://192.168.1.20:7070/Notify/773/k3zq1z2z/xhr_send?t=1471601521206. Credentials flag IS 'true', but the 'Access-Control-Allow-Credentials' header IS ''. It must be 'true' TO allow credentials. Origin 'https://login.com' IS therefore NOT allowed access.

我的代码如下:

 if (ar.succeeded()) {
routingContext.response().setStatusCode(200).setStatusMessage("OK")
.putHeader("content-type", "application/json")
.putHeader("Access-Control-Allow-Origin", "https://login.com")
.putHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS")
.putHeader("Access-Control-Allow-Credentials", "true")
.end(
Json.encodePrettily(ar.result().body())
//(String) ar.result().body()
);
routingContext.response().close();

这是因为定义路线时顺序很重要。 只需在 CORS 和 BodyHandler 之间切换即可:

Router router = Router.router(vertx);
router.route().handler(io.vertx.rxjava.ext.web.handler.CorsHandler.create("*")
.allowedMethod(io.vertx.core.http.HttpMethod.GET)
.allowedMethod(io.vertx.core.http.HttpMethod.POST)
.allowedMethod(io.vertx.core.http.HttpMethod.OPTIONS)
.allowedHeader("Access-Control-Request-Method")
.allowedHeader("Access-Control-Allow-Credentials")
.allowedHeader("Access-Control-Allow-Origin")
.allowedHeader("Access-Control-Allow-Headers")
.allowedHeader("Content-Type"));
router.route().handler(BodyHandler.create());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vertx 应用程序中的 CORS 问题无法正常工作 的相关文章

随机推荐

  • 如何使用 CodeIgniter 在 SQL Server 数据库中存储多字节字符

    我正在将 MS SQL Server 和 CodeIgniter 2 与 Active Record 用于我正在从事的一个项目 我偶然发现了这个问题 当我提交包含中文或印地语字符的表单时 我将其存储在表格中 当我查看它时 我得到的只是问号
  • 显示其他属性值(如果 django 模板中已知)

    我在 django 中有这个应用程序 我正在尝试制作 这是index html页面 h1 Choose the name of student h1
  • 在 C# 中将 lambda 函数作为命名参数传递

    编译这个简单的程序 class Program static void Foo Action bar bar static void Main string args Foo gt Console WriteLine 42 那里没什么奇怪的
  • 使用 Simple Injector 注册 FluentValidation 的正确方法是什么?

    我可以注册 FluentValidationAbstractValidators用一个FluentValidatorFactory 然而 它并没有feel是的 因为并非所有 IoC 容器注册都发生在引导 组合根期间 相反 The 成分根 p
  • 创建表格时如何提高 iText 性能

    嘿 很棒的 Stackoverflow 人 我目前正在评估我们是否应该使用 iText 7 1 9 for Java 还是 C 为此 我创建了一个测试用例 其中我编写了一个包含一堆页面的 PDF 每个页面都包含一个大表格 代码如下 在 Ja
  • 堆栈里面有什么?

    如果我运行一个程序 就像 include
  • 使用 JavaScript 上传文件夹及其所有内容

    如何使用 JavaScript 客户端 上传文件夹的内容 FileSystem API尚未被Chrome以外的浏览器采用 我只得到一个带有文件夹名称的文件项 这应该是可能的 因为 Google Drive 允许删除文件夹 所有内容 文件夹和
  • 为视频添加标签

    我必须编写一个简单的视频播放器 可以在特定时间显示一些字幕 链接或图片 如 YouTube 上的图片 我不知道如何使用 QVideoWidget 显示任何内容 我找不到任何有用的课程来做到这一点 您能给我一些建议吗 我按照你的方式做了 但是
  • 更改数据框的列类型

    我有一个包含大量值的数据框 数据框如下 gt datedPf date ticker quantity 96828 2013 01 11 ABT 700 96829 2013 01 11 AMD 9600 96830 2013 01 11
  • Android删除SIM卡联系人的方法

    下面是我从手机中删除联系人的代码 Uri contactUri Uri withAppendedPath PhoneLookup CONTENT FILTER URI Uri encode phone Cursor cur mContext
  • 单击外部链接时更改谷歌地图标记图标?

    我有一个谷歌地图 上面有很多标记 从 MySQL 数据库收集 我当前正在使用以下代码在单击标记时更改标记的图标 var redbikeicon images bike red png marker new google maps Marke
  • 即时应用程序功能模块中的资源合并

    在即时应用程序功能模块中 我导入一个 aar 使用来自 Maven 存储库的 api 语句 其中包含其清单中的活动声明以及此声明中使用的 样式 资源 由于在基本功能项目中找不到样式资源 因此清单合并失败 功能模块中导入的 aar 的资源似乎
  • IE 11 添加类 + 删除类

    我无法让此代码在 Internet Explorer 11 上运行 我知道此段导致了问题 如果我在激活此代码的情况下上传文件 IE 11 会将我网站的整个部分完全显示为空白 没有它 它会在我的网站上显示信息 但它的功能显然不一样 我查过各种
  • select2 动态改变项目

    我有两个链接的选择 第一个选择的每个值决定哪些项目将显示在第二个选择中 第二个选择的值存储在二维数组中 id 1 text a id 2 text b id 1a text aa id 1b text ba 第一个选择值确定用于填充第二个选
  • LDA Mallet 调用进程错误

    我正在尝试实现以下代码 import os os environ update MALLET HOME r c mallet 2 0 8 mallet path C mallet 2 0 8 bin mallet ldamallet gen
  • seasonal_decompose:操作数无法与系列上的形状一起广播

    我知道关于这个话题有很多问题 但没有一个能帮助我解决这个问题 我真的很坚持这个 用一个简单的系列 0 2016 01 31 266 2016 02 29 235 2016 03 31 347 2016 04 30 514 2016 05 3
  • 带有外部图像的 box2d-js 元素

    到目前为止 在各种 box2d js 实现的示例中 我只能找到形状 球 盒子 等 中定义的元素 有没有办法创建由图像定义的元素 例如一块巨石 您可以使用b2PolyDef and b2PolyShape对象来创建多边形 本文档 http w
  • Haskell - 简单构造函数比较(?)函数

    在我的项目中 我创建了一种数据类型 它可以保存几种类型的值之一 data PhpValue VoidValue IntValue Integer BoolValue Bool 我现在想做的是有一种简单的方法来检查两个值是否PhpValue类
  • Google 身份验证器作为公共服务提供吗?

    是否有公共 API 可以使用 双因素身份验证 在自运行 例如 LAMP 堆栈 Web 应用程序上 The project http code google com p google authenticator 是开源的 我没用过 但它使用记
  • vertx 应用程序中的 CORS 问题无法正常工作

    我的 Vertx 服务器驻留在服务器 A 中 客户端驻留在服务器 B 中 当我尝试访问 vertx 服务器时 弹出 CORS 错误 我添加了一些服务器端代码来处理 CORS 问题 但它不起作用 我们是否需要在客户端添加一些标头 我在这里缺少