Converse.JS - BOSH 服务器端对 CORS(选项)请求的响应
Converse.JS - BOSH Server side Response to CORS (OPTIONS) Request
我基于另一个(开源)项目在 C# 上编写了一个 XMPP 服务器。该项目有很多处理程序可以帮助我处理 XMPP 协议,但没有 BOSH 连接管理器 - 所以我写了一个。
我的想法是在浏览器上使用标准客户端(通过 TCP 连接)和 Converse.JS。
标准客户端工作正常,但 Converse.JS 有问题。我的问题不是自己处理 bosh 请求,而是处理 Converse.JS 发送的初始 OPTIONS 请求(空 body)。
根据他们的论坛(我发帖的地方Issue)
The OPTIONS request is a so-called preflight request to determine whether the domain being queried supports CORS. IIRC this only happens when making cross-domain requests. If you intend to support CORS, then you'll need to respond appropriately to OPTIONS requests.
经过一点点研究,我想到了这个解决方案(这是行不通的,因为 Converse.JS 一遍又一遍地发送 OPTIONS 请求,直到连接失败):
internal static void SendCORSResponse(HttpListenerContext ctx)
{
ctx.Response.StatusCode = (int)HttpStatusCode.OK; //200
ctx.Response.AddHeader("Access-Control-Allow-Origin", "*");
ctx.Response.AddHeader("Access-Control-Allow-Methods", "GET,POST,HEAD,PUT,DELETE,OPTIONS");
ctx.Response.AddHeader("Access-Control-Allow-Headers", "content-type");
ctx.Response.AddHeader("Access-Control-Max-Age", "86400");
ctx.Response.AddHeader("Accept-Encoding", "gzip");
ctx.Response.AddHeader("Accept-Charset", "utf-8");
ctx.Response.AddHeader("Accept-Language", "*");
ctx.Response.AddHeader("Accept", "*");
ctx.Response.Close(); //sends the response
}
当 header 包含 OPTIONS 标签时,在处理连接的 class 上调用该函数。我该怎么做,或者我做错了什么?
仅供以后参考——问题不在这个函数中;我用来检测请求是否为 null 的函数是错误的,每次都返回 true。
问题已解决。
我基于另一个(开源)项目在 C# 上编写了一个 XMPP 服务器。该项目有很多处理程序可以帮助我处理 XMPP 协议,但没有 BOSH 连接管理器 - 所以我写了一个。
我的想法是在浏览器上使用标准客户端(通过 TCP 连接)和 Converse.JS。
标准客户端工作正常,但 Converse.JS 有问题。我的问题不是自己处理 bosh 请求,而是处理 Converse.JS 发送的初始 OPTIONS 请求(空 body)。
根据他们的论坛(我发帖的地方Issue)
The OPTIONS request is a so-called preflight request to determine whether the domain being queried supports CORS. IIRC this only happens when making cross-domain requests. If you intend to support CORS, then you'll need to respond appropriately to OPTIONS requests.
经过一点点研究,我想到了这个解决方案(这是行不通的,因为 Converse.JS 一遍又一遍地发送 OPTIONS 请求,直到连接失败):
internal static void SendCORSResponse(HttpListenerContext ctx)
{
ctx.Response.StatusCode = (int)HttpStatusCode.OK; //200
ctx.Response.AddHeader("Access-Control-Allow-Origin", "*");
ctx.Response.AddHeader("Access-Control-Allow-Methods", "GET,POST,HEAD,PUT,DELETE,OPTIONS");
ctx.Response.AddHeader("Access-Control-Allow-Headers", "content-type");
ctx.Response.AddHeader("Access-Control-Max-Age", "86400");
ctx.Response.AddHeader("Accept-Encoding", "gzip");
ctx.Response.AddHeader("Accept-Charset", "utf-8");
ctx.Response.AddHeader("Accept-Language", "*");
ctx.Response.AddHeader("Accept", "*");
ctx.Response.Close(); //sends the response
}
当 header 包含 OPTIONS 标签时,在处理连接的 class 上调用该函数。我该怎么做,或者我做错了什么?
仅供以后参考——问题不在这个函数中;我用来检测请求是否为 null 的函数是错误的,每次都返回 true。
问题已解决。