У меня есть подклассы QNetworkAccessManager и QNetworkReply, чтобы обрабатывать пользовательские запросы AJAX из приложения JavaScript. В основном это работает, за исключением того, что мои сетевые ответы лишены любых заголовков.Добавление заголовка HTML в QNetworkReply
Я могу проверить, что NetworkReply
, возвращенный QNetworkAccessManager::createRequest
, имеет правильный заголовок, однако я не могу получить к нему доступ из JavaScript. Рассмотрим код ниже:
В JavaScript:
var xhr = new XMLHttpRequest();
xhr.open("POST", "test.php"); // fake url
xhr.responseType = "json";
xhr.setRequestHeader("Test-Header", "42");
xhr.onload = onXHRLoad;
xhr.send();
Это затем найденную внутри QNetworkAccessManager
и используется для создания нового QNetworkReply
следующим образом:
NetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
{
if(request.url().host() == "test")
{
NetworkReply* nr = new NetworkReply(request, outgoingData);
if (nr->hasRawHeader("Test-Header"))
{
qDebug() << "[Qt] Sending Network Reply with Test-Header value: " << nr->rawHeader("Test-Header");
}
return nr;
}
return QNetworkAccessManager::createRequest(op, request, outgoingData);
}
Внутри NetworkReply
конструктор я получить значение заголовка с запросом и установить его на ответ:
if (request.hasRawHeader("Test-Header"))
{
this->setRawHeader("Test-Header", request.rawHeader("Test-Header"));
}
я могу проверить это значение установлено правильно и вновь созданный ответ действительно имеет заголовок настоящий, однако, когда JavaScripts получает ответ заголовок не присутствует (в то время как данные):
function onXHRLoad(event) {
var header = event.target.getResponseHeader("Test-Header"); // <- null
}