Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qhttpheaders.cpp File Reference

(466495fdf1524edc9607c9efd1a0fcf4cd8a2665)

#include "qhttpheaders.h"
#include <QtNetwork/private/qnetworkrequest_p.h>
#include <private/qoffsetstringarray_p.h>
#include <QtCore/qcompare.h>
#include <QtCore/qhash.h>
#include <QtCore/qloggingcategory.h>
#include <QtCore/qmap.h>
#include <QtCore/qset.h>
#include <QtCore/qttypetraits.h>
#include <QtCore/qxpfunctional.h>
#include <q20algorithm.h>
#include <array>
#include <limits>
#include <q20memory.h>
#include <string_view>
#include <variant>
#include <vector>
Include dependency graph for qhttpheaders.cpp:

Go to the source code of this file.

Classes

class  QHttpHeaderRangeSetPrivate
struct  HeaderName
struct  Header
class  QHttpHeadersPrivate

Functions

 Q_STATIC_LOGGING_CATEGORY (lcQHttpHeaders, "qt.network.http.headers")
bool comparesEqual (const QHttpHeaderRangeSet &lhs, const QHttpHeaderRangeSet &rhs)
size_t qHash (const QHttpHeaderRangeSet &key, size_t seed)
static QByteArray fieldToByteArray (QLatin1StringView s) noexcept
static QByteArray fieldToByteArray (QUtf8StringView s) noexcept
static QByteArray fieldToByteArray (QStringView s)
static QByteArray fieldToByteArray (QAnyStringView name)
static bool headerNameValidImpl (QUtf8StringView) noexcept
auto headerNameMatches (const HeaderName &name)
QDebug operator<< (QDebug debug, const QHttpHeaders &headers)
QDataStream & operator<< (QDataStream &out, const QHttpHeaders &headers)
QDataStream & operator>> (QDataStream &in, QHttpHeaders &headers)
static bool headerNameValidImpl (QLatin1StringView name) noexcept
static bool headerNameValidImpl (QStringView name) noexcept
static bool isValidHttpHeaderNameField (QAnyStringView name) noexcept
static bool headerValueValidImpl (QLatin1StringView value) noexcept
static bool headerValueValidImpl (QUtf8StringView value) noexcept
static bool headerValueValidImpl (QStringView value) noexcept
static bool isValidHttpHeaderValueField (QAnyStringView value) noexcept
static QByteArray normalizedValue (QAnyStringView value)
QDebug operator<< (QDebug debug, const QHttpHeaderRangeSpec &range)
QDebug operator<< (QDebug debug, const QHttpHeaderRangeSet &ranges)

Variables

static constexpr auto headerNames
static constexpr quint8 orderedHeaderNameIndexes []
constexpr auto NonWellKnownHeader = QHttpHeaders::WellKnownHeader{-1}
static constexpr auto isValidHttpHeaderNameChar
static constexpr auto isValidHttpHeaderValueChar

Function Documentation

◆ comparesEqual()

bool comparesEqual ( const QHttpHeaderRangeSet & lhs,
const QHttpHeaderRangeSet & rhs )
noexcept

Definition at line 347 of file qhttpheaders.cpp.

◆ fieldToByteArray() [1/4]

QByteArray fieldToByteArray ( QAnyStringView name)
static

Definition at line 1035 of file qhttpheaders.cpp.

◆ fieldToByteArray() [2/4]

QByteArray fieldToByteArray ( QLatin1StringView s)
staticnoexcept

Definition at line 1020 of file qhttpheaders.cpp.

◆ fieldToByteArray() [3/4]

QByteArray fieldToByteArray ( QStringView s)
static

Definition at line 1030 of file qhttpheaders.cpp.

◆ fieldToByteArray() [4/4]

QByteArray fieldToByteArray ( QUtf8StringView s)
staticnoexcept

Definition at line 1025 of file qhttpheaders.cpp.

◆ headerNameMatches()

auto headerNameMatches ( const HeaderName & name)

Definition at line 1161 of file qhttpheaders.cpp.

Referenced by QHttpHeaders::contains(), QHttpHeaders::contains(), QHttpHeadersPrivate::removeAll(), and QHttpHeadersPrivate::replaceOrAppend().

Here is the caller graph for this function:

◆ headerNameValidImpl() [1/3]

bool headerNameValidImpl ( QLatin1StringView name)
staticnoexcept

Definition at line 1445 of file qhttpheaders.cpp.

References isValidHttpHeaderNameChar.

◆ headerNameValidImpl() [2/3]

bool headerNameValidImpl ( QStringView name)
staticnoexcept

Definition at line 1458 of file qhttpheaders.cpp.

◆ headerNameValidImpl() [3/3]

bool headerNameValidImpl ( QUtf8StringView name)
staticnoexcept

Definition at line 1450 of file qhttpheaders.cpp.

◆ headerValueValidImpl() [1/3]

bool headerValueValidImpl ( QLatin1StringView value)
staticnoexcept

Definition at line 1494 of file qhttpheaders.cpp.

References isValidHttpHeaderValueChar.

◆ headerValueValidImpl() [2/3]

bool headerValueValidImpl ( QStringView value)
staticnoexcept

Definition at line 1508 of file qhttpheaders.cpp.

◆ headerValueValidImpl() [3/3]

bool headerValueValidImpl ( QUtf8StringView value)
staticnoexcept

Definition at line 1499 of file qhttpheaders.cpp.

References isValidHttpHeaderValueChar.

◆ isValidHttpHeaderNameField()

bool isValidHttpHeaderNameField ( QAnyStringView name)
staticnoexcept

Definition at line 1465 of file qhttpheaders.cpp.

◆ isValidHttpHeaderValueField()

bool isValidHttpHeaderValueField ( QAnyStringView value)
staticnoexcept

Definition at line 1515 of file qhttpheaders.cpp.

◆ normalizedValue()

QByteArray normalizedValue ( QAnyStringView value)
static

Definition at line 1523 of file qhttpheaders.cpp.

◆ operator<<() [1/4]

QDataStream & operator<< ( QDataStream & out,
const QHttpHeaders & headers )

Definition at line 1402 of file qhttpheaders.cpp.

◆ operator<<() [2/4]

QDebug operator<< ( QDebug debug,
const QHttpHeaderRangeSet & ranges )

Definition at line 2292 of file qhttpheaders.cpp.

◆ operator<<() [3/4]

QDebug operator<< ( QDebug debug,
const QHttpHeaderRangeSpec & range )

Definition at line 2271 of file qhttpheaders.cpp.

◆ operator<<() [4/4]

QDebug operator<< ( QDebug debug,
const QHttpHeaders & headers )

Definition at line 1374 of file qhttpheaders.cpp.

◆ operator>>()

QDataStream & operator>> ( QDataStream & in,
QHttpHeaders & headers )

Definition at line 1418 of file qhttpheaders.cpp.

◆ Q_STATIC_LOGGING_CATEGORY()

Q_STATIC_LOGGING_CATEGORY ( lcQHttpHeaders ,
"qt.network.http.headers"  )

◆ qHash()

size_t qHash ( const QHttpHeaderRangeSet & key,
size_t seed )
noexcept

Definition at line 359 of file qhttpheaders.cpp.

Variable Documentation

◆ headerNames

constexpr auto headerNames
staticconstexpr
\class QHttpHeaders
\since 6.7
\ingroup
\inmodule QtNetwork

\brief QHttpHeaders is a class for holding HTTP headers.

The class is an interface type for Qt networking APIs that
use or consume such headers.

\section1 Allowed field name and value characters

An HTTP header consists of \e name and \e value.
When setting these, QHttpHeaders validates \e name and \e value
to only contain characters allowed by the HTTP RFCs. For detailed
information see
\l {https://datatracker.ietf.org/doc/html/rfc9110#name-field-values}
{RFC 9110 Chapters 5.1 and 5.5}.

In all, this means:
\list
    \li \c name must consist of visible ASCII characters, and must not be
        empty
    \li \c value may consist of arbitrary bytes, as long as header
        and use case specific encoding rules are adhered to. \c value
        may be empty
\endlist

The setters of this class automatically remove any leading or trailing
whitespaces from \e value, as they must be ignored during the
\e value processing.

\section1 Combining values

Most HTTP header values can be combined with a single comma \c {','}
plus an optional whitespace, and the semantic meaning is preserved.
As an example, these two should be semantically similar:
\badcode

Values as separate header entries myheadername: myheadervalue1 myheadername: myheadervalue2 Combined value myheadername: myheadervalue1, myheadervalue2

However, there is a notable exception to this rule: \l {https://datatracker.ietf.org/doc/html/rfc9110#name-field-order} {Set-Cookie}. Due to this and the possibility of custom use cases, QHttpHeaders does not automatically combine the values.

Definition at line 431 of file qhttpheaders.cpp.

◆ isValidHttpHeaderNameChar

constexpr auto isValidHttpHeaderNameChar
staticconstexpr
Initial value:
= [](uchar c) noexcept
{
return (('A' <= c && c <= 'Z')
|| ('a' <= c && c <= 'z')
|| ('0' <= c && c <= '9')
|| ('#' <= c && c <= '\'')
|| ('^' <= c && c <= '`')
|| c == '|' || c == '~' || c == '!' || c == '*' || c == '+' || c == '-' || c == '.');
}
const GLubyte * c
unsigned char uchar
Definition qtypes.h:38

Definition at line 1427 of file qhttpheaders.cpp.

Referenced by headerNameValidImpl().

◆ isValidHttpHeaderValueChar

constexpr auto isValidHttpHeaderValueChar
staticconstexpr
Initial value:
= [](uchar c) noexcept
{
return (c >= 0x80
|| (0x20 <= c && c <= 0x7E)
|| (c == 0x09));
}

Definition at line 1477 of file qhttpheaders.cpp.

Referenced by headerValueValidImpl(), and headerValueValidImpl().

◆ NonWellKnownHeader

auto NonWellKnownHeader = QHttpHeaders::WellKnownHeader{-1}
constexpr

Definition at line 1018 of file qhttpheaders.cpp.

◆ orderedHeaderNameIndexes

constexpr quint8 orderedHeaderNameIndexes
staticconstexpr

Definition at line 647 of file qhttpheaders.cpp.