Skip to content

Commit 4d21cd3

Browse files
committed
Support POST parameters in redbean server pages
See #97
1 parent da36e7e commit 4d21cd3

20 files changed

+1069
-658
lines changed

libc/str/memcasecmp.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
2+
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
3+
╞══════════════════════════════════════════════════════════════════════════════╡
4+
│ Copyright 2020 Justine Alexandra Roberts Tunney │
5+
│ │
6+
│ Permission to use, copy, modify, and/or distribute this software for │
7+
│ any purpose with or without fee is hereby granted, provided that the │
8+
│ above copyright notice and this permission notice appear in all copies. │
9+
│ │
10+
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
11+
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
12+
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
13+
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
14+
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
15+
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
16+
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
17+
│ PERFORMANCE OF THIS SOFTWARE. │
18+
╚─────────────────────────────────────────────────────────────────────────────*/
19+
#include "libc/str/str.h"
20+
21+
/**
22+
* Compares memory case-insensitively.
23+
* @return is <0, 0, or >0 based on uint8_t comparison
24+
*/
25+
int memcasecmp(const void *p, const void *q, size_t n) {
26+
int c;
27+
size_t i;
28+
const unsigned char *a, *b;
29+
if ((a = p) != (b = q)) {
30+
for (i = 0; i < n; ++i) {
31+
if ((c = kToLower[a[i]] - kToLower[b[i]])) {
32+
return c;
33+
}
34+
}
35+
}
36+
return 0;
37+
}

libc/str/str.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ int wcscmp(const wchar_t *, const wchar_t *) strlenesque;
123123
int wcsncmp(const wchar_t *, const wchar_t *, size_t) strlenesque;
124124
int wmemcmp(const wchar_t *, const wchar_t *, size_t) strlenesque;
125125
int strcasecmp(const char *, const char *) strlenesque;
126+
int memcasecmp(const void *, const void *, size_t) strlenesque;
126127
int strcasecmp16(const char16_t *, const char16_t *) strlenesque;
127128
int wcscasecmp(const wchar_t *, const wchar_t *) strlenesque;
128129
int strncasecmp(const char *, const char *, size_t) strlenesque;

net/http/escapeurl.c

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,13 @@ struct EscapeResult EscapeUrl(const char *data, size_t size,
3737
struct EscapeResult r;
3838
p = r.data = xmalloc(size * 6 + 1);
3939
for (i = 0; i < size; ++i) {
40-
switch (xlat[(c = data[i] & 0xff)]) {
41-
case 0:
42-
*p++ = c;
43-
break;
44-
case 1:
45-
*p++ = '+';
46-
break;
47-
case 2:
48-
p[0] = '%';
49-
p[1] = "0123456789ABCDEF"[(c & 0xF0) >> 4];
50-
p[2] = "0123456789ABCDEF"[(c & 0x0F) >> 0];
51-
p += 3;
52-
break;
53-
default:
54-
unreachable;
40+
if (!xlat[(c = data[i] & 0xff)]) {
41+
*p++ = c;
42+
} else {
43+
p[0] = '%';
44+
p[1] = "0123456789ABCDEF"[(c & 0xF0) >> 4];
45+
p[2] = "0123456789ABCDEF"[(c & 0x0F) >> 0];
46+
p += 3;
5547
}
5648
}
5749
r.size = p - r.data;

net/http/escapeurlfragment.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,27 @@
2121

2222
// url fragment dispatch
2323
// - 0 is -/?.~_@:!$&'()*+,;=0-9A-Za-z
24-
// - 2 is everything else which needs uppercase hex %XX
24+
// - 1 is everything else which needs uppercase hex %XX
2525
// note that '& can break html
2626
// note that '() can break css urls
2727
// note that unicode can still be wild
2828
static const char kEscapeUrlFragment[256] = {
29-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x00
30-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x10
31-
2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x20
32-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 0x30
29+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00
30+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10
31+
1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x20
32+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, // 0x30
3333
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x40
34-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, // 0x50
35-
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60
36-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, // 0x70
37-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x80
38-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x90
39-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xa0
40-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xb0
41-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0
42-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0
43-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xe0
44-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xf0
34+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, // 0x50
35+
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60
36+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, // 0x70
37+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80
38+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90
39+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0
40+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0
41+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xc0
42+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xd0
43+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xe0
44+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xf0
4545
};
4646

4747
/**

net/http/escapeurlparam.c

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,25 @@
2121

2222
// url query/form name/parameter dispatch
2323
// - 0 is -.*_0-9A-Za-z
24-
// - 1 is ' ' which becomes '+'
25-
// - 2 is everything else which needs uppercase hex %XX
24+
// - 1 is everything else which needs uppercase hex %XX
2625
// note that unicode can still be wild
2726
static const char kEscapeUrlParam[256] = {
28-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x00
29-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x10
30-
1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 2, // 0x20
31-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, // 0x30
32-
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x40
33-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, // 0x50
34-
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60
35-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, // 0x70
36-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x80
37-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x90
38-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xa0
39-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xb0
40-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0
41-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0
42-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xe0
43-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xf0
27+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00
28+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10
29+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, // 0x20
30+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, // 0x30
31+
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x40
32+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, // 0x50
33+
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60
34+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, // 0x70
35+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80
36+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90
37+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0
38+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0
39+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xc0
40+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xd0
41+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xe0
42+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xf0
4443
};
4544

4645
/**

net/http/escapeurlpath.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,27 @@
2121

2222
// url path dispatch
2323
// - 0 is -.~_@:!$&'()*+,;=0-9A-Za-z/
24-
// - 2 is everything else which needs uppercase hex %XX
24+
// - 1 is everything else which needs uppercase hex %XX
2525
// note that '& can break html
2626
// note that '() can break css urls
2727
// note that unicode can still be wild
2828
static const char kEscapeUrlPath[256] = {
29-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x00
30-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x10
31-
2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x20
32-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, // 0x30
29+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00
30+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10
31+
1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x20
32+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, // 0x30
3333
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x40
34-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, // 0x50
35-
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60
36-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, // 0x70
37-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x80
38-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x90
39-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xa0
40-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xb0
41-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0
42-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0
43-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xe0
44-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xf0
34+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, // 0x50
35+
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60
36+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, // 0x70
37+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80
38+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90
39+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0
40+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0
41+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xc0
42+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xd0
43+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xe0
44+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xf0
4545
};
4646

4747
/**

net/http/escapeurlpathsegment.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,27 @@
2121

2222
// url path segment dispatch
2323
// - 0 is -.~_@:!$&'()*+,;=0-9A-Za-z
24-
// - 2 is everything else which needs uppercase hex %XX
24+
// - 1 is everything else which needs uppercase hex %XX
2525
// note that '& can break html
2626
// note that '() can break css urls
2727
// note that unicode can still be wild
2828
static const char kEscapeUrlPathSegment[256] = {
29-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x00
30-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x10
31-
2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, // 0x20
32-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, // 0x30
29+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00
30+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10
31+
1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, // 0x20
32+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, // 0x30
3333
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x40
34-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, // 0x50
35-
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60
36-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, // 0x70
37-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x80
38-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0x90
39-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xa0
40-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xb0
41-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0
42-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0
43-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xe0
44-
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xf0
34+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, // 0x50
35+
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60
36+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, // 0x70
37+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80
38+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90
39+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0
40+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0
41+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xc0
42+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xd0
43+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xe0
44+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xf0
4545
};
4646

4747
/**

net/http/gethttpheader.gperf

Lines changed: 58 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -11,57 +11,61 @@
1111
%define lookup-function-name LookupHttpHeader
1212
struct HttpHeaderSlot { char *name; char code; };
1313
%%
14-
Accept, kHttpAccept
15-
Accept-Charset, kHttpAcceptCharset
16-
Accept-Encoding, kHttpAcceptEncoding
17-
Accept-Language, kHttpAcceptLanguage
18-
Age, kHttpAge
19-
Allow, kHttpAllow
20-
Authorization, kHttpAuthorization
21-
Cache-Control, kHttpCacheControl
22-
Chunked, kHttpChunked
23-
Close, kHttpClose
24-
Connection, kHttpConnection
25-
Content-Base, kHttpContentBase
26-
Content-Encoding, kHttpContentEncoding
27-
Content-Language, kHttpContentLanguage
28-
Content-Length, kHttpContentLength
29-
Content-Location, kHttpContentLocation
30-
Content-Md5, kHttpContentMd5
31-
Content-Range, kHttpContentRange
32-
Content-Type, kHttpContentType
33-
Date, kHttpDate
34-
ETag, kHttpEtag
35-
Expires, kHttpExpires
36-
From, kHttpFrom
37-
Host, kHttpHost
38-
If-Match, kHttpIfMatch
39-
If-Modified-Since, kHttpIfModifiedSince
40-
If-None-Match, kHttpIfNoneMatch
41-
If-Range, kHttpIfRange
42-
If-Unmodified-Since, kHttpIfUnmodifiedSince
43-
Keep-Alive, kHttpKeepAlive
44-
Max-Forwards, kHttpMaxForwards
45-
Pragma, kHttpPragma
46-
Proxy-Authenticate, kHttpProxyAuthenticate
47-
Proxy-Authorization, kHttpProxyAuthorization
48-
Proxy-Connection, kHttpProxyConnection
49-
Range, kHttpRange
50-
Referer, kHttpReferer
51-
Transfer-Encoding, kHttpTransferEncoding
52-
Upgrade, kHttpUpgrade
53-
User-Agent, kHttpUserAgent
54-
Via, kHttpVia
55-
Location, kHttpLocation
56-
Public, kHttpPublic
57-
Retry-After, kHttpRetryAfter
58-
Server, kHttpServer
59-
Vary, kHttpVary
60-
Warning, kHttpWarning
61-
WWW-Authenticate, kHttpWwwAuthenticate
62-
Last-Modified, kHttpLastModified
63-
Cookie, kHttpCookie
64-
Trailer, kHttpTrailer
65-
TE, kHttpTe
66-
DNT, kHttpDnt
67-
Expect, kHttpExpect
14+
Accept, kHttpAccept
15+
Accept-Charset, kHttpAcceptCharset
16+
Accept-Encoding, kHttpAcceptEncoding
17+
Accept-Language, kHttpAcceptLanguage
18+
Age, kHttpAge
19+
Allow, kHttpAllow
20+
Authorization, kHttpAuthorization
21+
Cache-Control, kHttpCacheControl
22+
Chunked, kHttpChunked
23+
Close, kHttpClose
24+
Connection, kHttpConnection
25+
Content-Base, kHttpContentBase
26+
Content-Encoding, kHttpContentEncoding
27+
Content-Language, kHttpContentLanguage
28+
Content-Length, kHttpContentLength
29+
Content-Location, kHttpContentLocation
30+
Content-Md5, kHttpContentMd5
31+
Content-Range, kHttpContentRange
32+
Content-Type, kHttpContentType
33+
Date, kHttpDate
34+
ETag, kHttpEtag
35+
Expires, kHttpExpires
36+
From, kHttpFrom
37+
Host, kHttpHost
38+
If-Match, kHttpIfMatch
39+
If-Modified-Since, kHttpIfModifiedSince
40+
If-None-Match, kHttpIfNoneMatch
41+
If-Range, kHttpIfRange
42+
If-Unmodified-Since, kHttpIfUnmodifiedSince
43+
Keep-Alive, kHttpKeepAlive
44+
Max-Forwards, kHttpMaxForwards
45+
Pragma, kHttpPragma
46+
Proxy-Authenticate, kHttpProxyAuthenticate
47+
Proxy-Authorization, kHttpProxyAuthorization
48+
Proxy-Connection, kHttpProxyConnection
49+
Range, kHttpRange
50+
Referer, kHttpReferer
51+
Transfer-Encoding, kHttpTransferEncoding
52+
Upgrade, kHttpUpgrade
53+
User-Agent, kHttpUserAgent
54+
Via, kHttpVia
55+
Location, kHttpLocation
56+
Public, kHttpPublic
57+
Retry-After, kHttpRetryAfter
58+
Server, kHttpServer
59+
Vary, kHttpVary
60+
Warning, kHttpWarning
61+
WWW-Authenticate, kHttpWwwAuthenticate
62+
Last-Modified, kHttpLastModified
63+
Cookie, kHttpCookie
64+
Trailer, kHttpTrailer
65+
TE, kHttpTe
66+
DNT, kHttpDnt
67+
Expect, kHttpExpect
68+
Content-Disposition, kHttpContentDisposition
69+
Content-Description, kHttpContentDescription
70+
Origin, kHttpOrigin
71+
Upgrade-Insecure-Requests, kHttpUpgradeInsecureRequests

0 commit comments

Comments
 (0)