diff options
| author | Mårten Nordheim <marten.nordheim@qt.io> | 2025-03-16 13:15:09 +0100 |
|---|---|---|
| committer | Mårten Nordheim <marten.nordheim@qt.io> | 2025-03-20 20:37:24 +0100 |
| commit | 4c9a4ecd358da3bf371a2441cccd8a66c86f2d3c (patch) | |
| tree | da93ef81da960ccf3655cb4e44f2c08d8197abe9 /src/network/access/qhttpnetworkrequest.cpp | |
| parent | 7a238e1225f49b81772516ed5d0a5a4f4f2e9268 (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.cpp | 8 |
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 |
