Change default Content-Type for http POST to match 4.7.4
authorShane Kearns <ext-shane.2.kearns@nokia.com>
Wed, 13 Jun 2012 16:27:31 +0000 (17:27 +0100)
committerQt by Nokia <qt-info@nokia.com>
Wed, 20 Jun 2012 22:58:05 +0000 (00:58 +0200)
Qt 4.7.3 sent no Content-Type header by default.
This was fixed independently on 4.8.0 and 4.7.4 branches, with
different defaults.
Since this is often used for web service logins, the 4.7.4
default of x-www-form-urlencoded seems more likely to work.

The warning message is left in place, since not specifying the
content type is still an application bug.

Task-number: QTBUG-23350
Change-Id: I30bf50fd216ee9894d0168e904cea1ed4251ec68
Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
src/network/access/qhttpnetworkrequest.cpp

index 1325f10..cd6acc8 100644 (file)
@@ -158,8 +158,11 @@ QByteArray QHttpNetworkRequestPrivate::header(const QHttpNetworkRequest &request
     if (request.d->operation == QHttpNetworkRequest::Post) {
         // add content type, if not set in the request
         if (request.headerField("content-type").isEmpty()) {
-            qWarning("content-type missing in HTTP POST, defaulting to application/octet-stream");
-            ba += "Content-Type: application/octet-stream\r\n";
+            //Content-Type is mandatory. We can't say anything about the encoding, but x-www-form-urlencoded is the most likely to work.
+            //This warning indicates a bug in application code not setting a required header.
+            //Note that if using QHttpMultipart, the content-type is set in QNetworkAccessManagerPrivate::prepareMultipart already
+            qWarning("content-type missing in HTTP POST, defaulting to application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix this problem.");
+            ba += "Content-Type: application/x-www-form-urlencoded\r\n";
         }
         if (!request.d->uploadByteDevice && request.d->url.hasQuery()) {
             QByteArray query = request.d->url.query(QUrl::FullyEncoded).toLatin1();