Регистрация пользовательской схемы ``backend://`не работает в CEF

В моем приложении CEF

Я регистрирую пользовательский обработчик схемы для схемы backend://, Как и в примере с circuit_handler, я вызываю каждый процесс (Rendere Process и Browser-Process) AddCustomScheme:

void registerCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar)
    {
        for(auto& scheme : getCustomSchemes()) // "backend" and "client"
        {
            registrar->AddCustomScheme(scheme,
                                       true /* is standart*/,
                                       false /* is local */,
                                       false /* is display_isolated */,
                                       true /* is secure */,
                                       true /* is cors enabled*/,
                                       false /* is_csp_bypassing*/);
        }
    }

client:// На схеме также установлен обработчик.

Когда я не звоню AddCustomScheme с обоими client а также backend, backend:// обработчик работает (а также client обработчик), но я не получаю никаких данных после запроса (я посылаю некоторые двоичные данные).

Когда я использую AddCustomScheme обработчики схемы для client а также backendбольше не срабатывает.

Как мне настроить пользовательский обработчик backend такой, что он получает почтовые запросы данных? Я также пытался поиграть с bools в AddCustomHandler что не помогло.

1 ответ

Вы пытаетесь перекрестного происхождения XmlHttpRequest (XHR). Вам необходимо настроить общий доступ к ресурсам (CORS). смотреть на CefAddCrossOriginWhitelistEntry,

WebKit не проходит POST данные к запросу на синхронные XHR, выполненные по не-HTTP схемам. Увидеть AreMethodAndURLValidForSend() проверяет в XMLHttpRequest::send() in third_party/WebKit/Source/core/XMLHttpRequest.cpp,

bool XMLHttpRequest::AreMethodAndURLValidForSend() {
  return method_ != HTTPNames::GET && method_ != HTTPNames::HEAD &&
         url_.ProtocolIsInHTTPFamily();
}

Если вам нужно использовать XHR POST запросы вы должны зарегистрировать свой пользовательский обработчик с помощью HTTP или же HTTPS протокол. Так как это намеренное WebKit конструктивная особенность скорее всего не изменилась за CEF3,

Другие вопросы по тегам