Converse.JS - BOSH服务器端响应CORS(OPTIONS)请求

时间:2018-01-24 11:27:09

标签: c# cors converse.js

我在C#上编写了一个基于另一个(OPEN SOURCE)项目的XMPP服务器。该项目有很多帮助我使用XMPP协议的处理程序,但没有BOSH连接管理器 - 所以我写了一个。

我们的想法是在浏览器上使用标准客户端(通过TCP连接)和Converse.JS。

标准客户端工作正常,但Converse.JS存在问题。我的问题不是处理bosh请求本身,而是处理Converse.JS发送的初始OPTIONS请求(带有空体)。

根据他们的论坛(我在哪里发布了这个Issue

  

OPTIONS请求是一个所谓的preflight request,用于确定被查询的域是否支持CORS。 IIRC仅在发出跨域请求时发生。如果您打算支持CORS,那么您需要对OPTIONS请求做出适当的响应。

稍微研究一点,我想出了这个解决方案(这是行不通的,因为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
}

当标题包含OPTIONS标记时,在处理连接的类上调用该函数。我该怎么做,或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

仅供将来参考 - 问题不在此功能中;我用来检测请求是否为null的函数,并且每次都返回true。

问题解决了。