summaryrefslogtreecommitdiffstats
path: root/src/network/access/qhttpnetworkrequest.cpp
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2025-03-16 13:15:09 +0100
committerMårten Nordheim <marten.nordheim@qt.io>2025-03-20 20:37:24 +0100
commit4c9a4ecd358da3bf371a2441cccd8a66c86f2d3c (patch)
treeda93ef81da960ccf3655cb4e44f2c08d8197abe9 /src/network/access/qhttpnetworkrequest.cpp
parent7a238e1225f49b81772516ed5d0a5a4f4f2e9268 (diff)
QNetworkAccessManager: don't resend non-idempotent requests
Requests that may lead to a different state when performed multiple times (non-idempotent) should not be automatically re-transmitted if an error occurs after we have written the full request. We assume all custom methods are potentially non-idempotent. [ChangeLog][QtNetwork][QNetworkAccessManager][Behavior Change] Non-idempotent requests are no longer incorrectly re-sent if the connection breaks down while reading the response. Fixes: QTBUG-134694 Pick-to: 6.9 6.8 6.5 Change-Id: Ie8ba7828ce9375359c2326f06426fe1a1e568fef Reviewed-by: Mate Barany <mate.barany@qt.io>
Diffstat (limited to 'src/network/access/qhttpnetworkrequest.cpp')
-rw-r--r--src/network/access/qhttpnetworkrequest.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/network/access/qhttpnetworkrequest.cpp b/src/network/access/qhttpnetworkrequest.cpp
index 23a3972638a..03af2573e54 100644
--- a/src/network/access/qhttpnetworkrequest.cpp
+++ b/src/network/access/qhttpnetworkrequest.cpp
@@ -394,5 +394,13 @@ void QHttpNetworkRequest::setFullLocalServerName(const QString &fullServerName)
d->fullLocalServerName = fullServerName;
}
+bool QHttpNetworkRequest::methodIsIdempotent() const
+{
+ using Op = Operation;
+ constexpr auto knownSafe = std::array{ Op::Get, Op::Head, Op::Put, Op::Trace, Op::Options };
+ return std::any_of(knownSafe.begin(), knownSafe.end(),
+ [currentOp = d->operation](auto op) { return op == currentOp; });
+}
+
QT_END_NAMESPACE