Междоменный GET-запрос не работает в jQuery с бэкэнд-сервером C # - PullRequest
0 голосов
/ 08 октября 2011

У меня есть отдельный HTTP-сервер, размещенный в другом домене, который я использую в качестве внутреннего сервера (C #).Он создает TcpListener и при соединении создает новый поток для обработки соединения.

Я использую jQuery для запроса ajax get на этот сервер, и вместо этого jQuery отправляет запрос OPTIONS.После некоторых исследований я добавил этот сегмент в свою программу в надежде, что после этого он продолжит HTTP-запрос.(ns является экземпляром NetworkStream, из TcpClient.GetStream ())

if (req1.StartsWith("OPTIONS"))
            {
                //req1 = req1.Split('\n')[0].Substring(9);
                string headers = string.Format(
                    "HTTP/1.0 200 OK\r\n"+
               "Access-Control-Allow-Origin: *\r\n"+
               "Access-Control-Allow-Methods: *\r\n"+
               "Access-Control-Max-Age: 1728000\r\n"+
               "Access-Control-Allow-Headers: *\r\n"+
               "Connection: Keep-Alive\r\n"+
               "Content-Type: text/plain\r\n\r\n");
                ns.Write(Encoding.ASCII.GetBytes(headers), 0, Encoding.ASCII.GetBytes(headers).Length);
                ns.Close(); client.Close();  return;
            }

К сожалению, браузер продолжает отправлять запросы OPTIONS на сервер, даже если сервер отправляет обратно заголовки Access-Control, которые должны позволить емуиметь неограниченный доступ.

Вот сетевые журналы для 1 из этих запросов: http://pastebin.com/T07Whvem

Какие-либо предложения, чтобы сделать эту работу?Код javascript довольно тривиален, но я включу его:

//this is just a long-poll
function waitForMsg(){

    $.ajax({
        url: "http://127.0.0.1:6969/2|||ub",
        dataType: "text",

       async: true, 
       cache: true,
        timeout:50000, 

        success: function(data){ 
            addmsg("new", data); 
            setTimeout(
                'waitForMsg()', 
                1000 
            );
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            addmsg("error", textStatus + " (" + errorThrown + ")");
            setTimeout(
                'waitForMsg()', 
                "1000"); 
        },
    });
};

$(document).ready(function(){
    waitForMsg(); /* Start the inital request */
});

Я не могу использовать существующий веб-сервер, потому что это не совсем стандартный веб-сервер;просто сервер, который может принимать инструкции через http.

Спасибо!

1 Ответ

0 голосов
/ 08 октября 2011

Вам необходимо включить приведенную ниже настройку в jQuery

$(document).ready(function()
{
    $.support.cors = true;
});

см .: http://api.jquery.com/jQuery.support/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...