Make QNAM handle all informational HTTP replies
Make QNetworkAccessManager to discard all informational (1xx) replies from HTTP servers with the exception of 101. According to RFC 9110: "A client MUST be able to parse one or more 1xx responses received prior to a final response, even if the client does not expect one. A user agent MAY ignore unexpected 1xx responses." Status code 101 is an exception because we use it to upgrade to http2 cleartext when it is enabled. Fixes: QTBUG-108068 Change-Id: I415ff053180a43f0c7ff1b4b2a60fd114ce08ac9 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
This commit is contained in:
parent
7fa6d09ca2
commit
bb34c6fa6b
@ -93,7 +93,8 @@ void QHttpProtocolHandler::_q_receiveReply()
|
||||
} else {
|
||||
replyPrivate->autoDecompress = false;
|
||||
}
|
||||
if (m_reply->statusCode() == 100) {
|
||||
const int statusCode = m_reply->statusCode();
|
||||
if (statusCode == 100 || (102 <= statusCode && statusCode <= 199)) {
|
||||
replyPrivate->clearHttpLayerInformation();
|
||||
replyPrivate->state = QHttpNetworkReplyPrivate::ReadingStatusState;
|
||||
break; // ignore
|
||||
|
@ -322,8 +322,8 @@ private Q_SLOTS:
|
||||
#endif
|
||||
void ioGetFromHttpBrokenServer_data();
|
||||
void ioGetFromHttpBrokenServer();
|
||||
void ioGetFromHttpStatus100_data();
|
||||
void ioGetFromHttpStatus100();
|
||||
void ioGetFromHttpStatusInformational_data();
|
||||
void ioGetFromHttpStatusInformational();
|
||||
void ioGetFromHttpNoHeaders_data();
|
||||
void ioGetFromHttpNoHeaders();
|
||||
void ioGetFromHttpWithCache_data();
|
||||
@ -4280,7 +4280,7 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer()
|
||||
QVERIFY(reply->error() != QNetworkReply::NoError);
|
||||
}
|
||||
|
||||
void tst_QNetworkReply::ioGetFromHttpStatus100_data()
|
||||
void tst_QNetworkReply::ioGetFromHttpStatusInformational_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("dataToSend");
|
||||
QTest::addColumn<int>("statusCode");
|
||||
@ -4291,9 +4291,25 @@ void tst_QNetworkReply::ioGetFromHttpStatus100_data()
|
||||
QTest::newRow("minimal+404") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 204 No Content\r\n\r\n") << 204;
|
||||
QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
|
||||
QTest::newRow("normal-custom") << QByteArray("HTTP/1.1 133 Custom\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
QTest::newRow("minimal-custom") << QByteArray("HTTP/1.1 133 Custom\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
QTest::newRow("minimal2-custom") << QByteArray("HTTP/1.1 133 Custom\n\nHTTP/1.0 200 OK\r\n\r\n") << 200;
|
||||
QTest::newRow("minimal3-custom") << QByteArray("HTTP/1.1 133 Custom\n\nHTTP/1.0 200 OK\n\n") << 200;
|
||||
QTest::newRow("minimal+404-custom") << QByteArray("HTTP/1.1 133 Custom\n\nHTTP/1.0 204 No Content\r\n\r\n") << 204;
|
||||
QTest::newRow("with_headers-custom") << QByteArray("HTTP/1.1 133 Custom\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
QTest::newRow("with_headers2-custom") << QByteArray("HTTP/1.1 133 Custom\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
|
||||
QTest::newRow("normal-custom2") << QByteArray("HTTP/1.1 179 Custom2\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
QTest::newRow("minimal-custom2") << QByteArray("HTTP/1.1 179 Custom2\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
QTest::newRow("minimal2-custom2") << QByteArray("HTTP/1.1 179 Custom2\n\nHTTP/1.0 200 OK\r\n\r\n") << 200;
|
||||
QTest::newRow("minimal3-custom2") << QByteArray("HTTP/1.1 179 Custom2\n\nHTTP/1.0 200 OK\n\n") << 200;
|
||||
QTest::newRow("minimal+404-custom2") << QByteArray("HTTP/1.1 179 Custom2\n\nHTTP/1.0 204 No Content\r\n\r\n") << 204;
|
||||
QTest::newRow("with_headers-custom2") << QByteArray("HTTP/1.1 179 Custom2\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
QTest::newRow("with_headers2-custom2") << QByteArray("HTTP/1.1 179 Custom2\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
|
||||
}
|
||||
|
||||
void tst_QNetworkReply::ioGetFromHttpStatus100()
|
||||
void tst_QNetworkReply::ioGetFromHttpStatusInformational()
|
||||
{
|
||||
QFETCH(QByteArray, dataToSend);
|
||||
QFETCH(int, statusCode);
|
||||
|
Loading…
x
Reference in New Issue
Block a user