Skip to content

Commit 9076857

Browse files
authored
Don't quote the multipart boundary header. (#63)
This is be more broadly compatible than the quoted version, although the quoted version is what's described by the spec. curl and browsers send unquoted boundaries, so we can safely assume that any server will support them. Closes #61
1 parent 6374d62 commit 9076857

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

CHANGELOG.md

+10
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
## 0.11.3+12
2+
3+
* Don't quote the boundary header for `MultipartRequest`. This is more
4+
compatible with server quirks.
5+
6+
## 0.11.3+11
7+
8+
* Fix the SDK constraint to only include SDK versions that support importing
9+
`dart:io` everywhere.
10+
111
## 0.11.3+10
212

313
* Stop using `dart:mirrors`.

lib/src/multipart_request.dart

+13-8
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class MultipartRequest extends BaseRequest {
8383
ByteStream finalize() {
8484
// TODO(nweiz): freeze fields and files
8585
var boundary = _boundaryString();
86-
headers['content-type'] = 'multipart/form-data; boundary="$boundary"';
86+
headers['content-type'] = 'multipart/form-data; boundary=$boundary';
8787
super.finalize();
8888

8989
var controller = new StreamController<List<int>>(sync: true);
@@ -117,14 +117,19 @@ class MultipartRequest extends BaseRequest {
117117
return new ByteStream(controller.stream);
118118
}
119119

120-
/// All character codes that are valid in multipart boundaries. From
121-
/// http://tools.ietf.org/html/rfc2046#section-5.1.1.
120+
/// All character codes that are valid in multipart boundaries. This is the
121+
/// intersection of the characters allowed in the `bcharsnospace` production
122+
/// defined in [RFC 2046][] and those allowed in the `token` production
123+
/// defined in [RFC 1521][].
124+
///
125+
/// [RFC 2046]: http://tools.ietf.org/html/rfc2046#section-5.1.1.
126+
/// [RFC 1521]: https://tools.ietf.org/html/rfc1521#section-4
122127
static const List<int> _BOUNDARY_CHARACTERS = const <int>[
123-
39, 40, 41, 43, 95, 44, 45, 46, 47, 58, 61, 63, 48, 49, 50, 51, 52, 53, 54,
124-
55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
125-
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103,
126-
104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
127-
119, 120, 121, 122
128+
39, 43, 95, 44, 45, 46, 58, 61, 63, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
129+
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
130+
84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
131+
107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
132+
122
128133
];
129134

130135
/// Returns the header string for a field. The return value is guaranteed to

pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: http
2-
version: 0.11.3+11
2+
version: 0.11.3+12
33
author: "Dart Team <[email protected]>"
44
homepage: https://github.com/dart-lang/http
55
description: A composable, Future-based API for making HTTP requests.

0 commit comments

Comments
 (0)