Как сделать?? Помогите.

Тема в разделе "JavaScript", создана пользователем mariner, 22 июл 2012.

Модераторы: ZiX
  1. mariner

    mariner Писатель

    Регистр.:
    16 июл 2012
    Сообщения:
    3
    Симпатии:
    0
    Делаю проект в котором реализовано междоменное общение с помощью Javascript. Все работает хорошо. Проблема в том что, если я к другому домену обращаюсь через через Http, то выскакивает алерт безопасности "Mixed content". Если ставлю свой сертификат(выписанный мной) и обращаюсь через Https то выскакивает сообщение "IE заблокировал отображение содержимого ошибочным сертификатом". Необходимо сделать так чтоб этих сообщений не было. Вариант, чтоб отключить эти настройки в браузере не предлагать, он не подходит. Как сделать это программно???
     
  2. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Такое через javascript вряд ли можно реализовать. Если бы у меня была задача реализовать аякс или вебсокет соединения на разные домены или ip, я бы прописал все серверы, к которым нужно обращаться из js в конфиг nginx через proxy_pass (в таком духе), а в самом js обращаться только на один домен (чтобы не было кроссдоменных обращений), и туда же (в nginx) в конфиг прописал сертификат. Получается реализация без хаков.
     
  3. mariner

    mariner Писатель

    Регистр.:
    16 июл 2012
    Сообщения:
    3
    Симпатии:
    0
    Дело в том что у меня нет доступа к ngix, чтобы там писать что либо. И доступа по определению однозначно быть не может.

    Что б Вы понимали, происходит подмена выдачи. А вот каким образом убрать этот "Mixed content" я ума не приложу.
     
  4. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Ну блин, с подменой выдачи нужно прокси человеческий поднимать. Так чтобы скрипты закачивались и выдавались а ссылки в них подменялись. Вот например мое решение для размещения сайта сотмаркета на собственном поддомене (решение nginx+node:(
    Код:
    var http = require('http');
    http.createServer(function(request, response) {
        var localHost = request.headers['host'];
        request.headers['host'] = 'www.sotmarket.ru'
        if(request.headers['referer'])
            request.headers['referer'] = request.headers['referer']
                .replace(localHost,'www.sotmarket.ru')
        var proxy = http.createClient(80, request.headers['host'])
        var proxy_request = proxy.request(request.method, request.url, request.headers)
        proxy_request.on('response', function (proxy_response) {
            if(proxy_response.headers['set-cookie']) {
                var cc = proxy_response.headers['set-cookie']
                for(var i=0; i<cc.length; i++)
                    cc[i] = cc[i].replace('.sotmarket.ru', '.'+localHost)
                        .replace(':32001', '')
                proxy_response.headers['set-cookie'] = cc
            }
    //        console.log(proxy_response.headers['set-cookie'])
            proxy_response.pipe(response)
            response.writeHead(proxy_response.statusCode, proxy_response.headers)
        })
        request.pipe(proxy_request)
    }).listen(32001)
    
    Урезанный для ясности (но рабочий) пример на JavaScript. Транслирует сайт sotmarket.ru:80 на моем сервере на порту 32001. Далее создаю виртуальный хост в nginx и собственно делаю для него proxy_pass 127.0.0.1:32001. Все работает и не возникает никаких проблем. Куки передаются, get, post запросы проходят. Для сайта сотмаркета все прозрачно, они даже заподозрить ничего не смогут.

    Далее можно подменять любой файл или менять что-либо в передаваемых данных.