Search code examples
javascriptinternet-explorerwebsync

The request is too large for IE to process properly


I am using Websync3, Javascript API, and subscribing to approximately 9 different channels on one page. Firefox and Chrome have no problems, but IE9 is throwing an alert error stating The request is too large for IE to process properly.
Unfortunately the internet has little to no information on this. So does anyone have any clues as to how to remedy this?

    var client = fm.websync.client;

    client.initialize({ 
        key: '********-****-****-****-************'
    });

    client.connect({
        autoDisconnect: true,
        onStreamFailure: function(args){
            alert("Stream failure");
        },
        stayConnected: true
    });

    client.subscribe({
        channel: '/channel',
        onSuccess: function(args) {
            alert("Successfully connected to stream");
        },

        onFailure: function(args){
            alert("Failed to connect to stream");
        },

        onSubscribersChange: function(args) {
            var change = args.change;
            for (var i = 0; i < change.clients.length; i++) {
                var changeClient = change.clients[i];

                // If someone subscribes to the channel
                if(change.type == 'subscribe') {

                // If something unsubscribes to the channel
                }else{

                }
            }
        },

        onReceive: function(args){
            text = args.data.text;
            text = text.split("=");
            text = text[1];
            if(text != "status" && text != "dummytext"){
                //receiveUpdates(id, serial_number, args.data.text);
            var update = eval('(' + args.data.text + ')');

    }
    }
});

Solution

  • This error occurs when WebSync is using the JSON-P protocol for transfers. This is mostly just for IE, cross domain environments. Meaning websync is on a different domain than your webpage is being served from. So IE doesn't want do make regular XHR requests for security reasons.

    JSON-P basically encodes the up-stream data (your 9 channel subscriptions) as a URL encoded string that is tacked onto a regular request to the server. The server is supposed to interpret that URL-encoded string and send back the response as a JavaScript block that gets executed by the page.

    This works fine, except that IE also has a limit on the overall request URL for an HTTP request of roughly 2kb. So if you pack too much into a single request to WebSync you might exceed this 2kb upstream limit.

    The easiest solution is to either split up your WebSync requests into small pieces (ie: subscribe to only a few channels at a time in JavaScript), or to subscribe to one "master channel" and then program a WebSync BeforeSubscribe event that watches for that channel and re-writes the subscription channel list.

    I suspect because you have a key in you example source above, you are using WebSync On-Demand? If that's the case, the only way to make a BeforeSubscribe event handler is to create a WebSync proxy.