rack 2.2.8 → 3.0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +213 -83
- data/CONTRIBUTING.md +53 -47
- data/MIT-LICENSE +1 -1
- data/README.md +309 -0
- data/SPEC.rdoc +174 -126
- data/lib/rack/auth/abstract/handler.rb +3 -1
- data/lib/rack/auth/abstract/request.rb +3 -1
- data/lib/rack/auth/basic.rb +0 -2
- data/lib/rack/auth/digest/md5.rb +1 -131
- data/lib/rack/auth/digest/nonce.rb +1 -54
- data/lib/rack/auth/digest/params.rb +1 -54
- data/lib/rack/auth/digest/request.rb +1 -43
- data/lib/rack/auth/digest.rb +256 -0
- data/lib/rack/body_proxy.rb +3 -1
- data/lib/rack/builder.rb +83 -63
- data/lib/rack/cascade.rb +2 -0
- data/lib/rack/chunked.rb +16 -13
- data/lib/rack/common_logger.rb +23 -18
- data/lib/rack/conditional_get.rb +18 -15
- data/lib/rack/constants.rb +64 -0
- data/lib/rack/content_length.rb +12 -16
- data/lib/rack/content_type.rb +8 -5
- data/lib/rack/deflater.rb +40 -26
- data/lib/rack/directory.rb +9 -3
- data/lib/rack/etag.rb +14 -23
- data/lib/rack/events.rb +4 -0
- data/lib/rack/file.rb +2 -0
- data/lib/rack/files.rb +15 -17
- data/lib/rack/head.rb +9 -8
- data/lib/rack/headers.rb +154 -0
- data/lib/rack/lint.rb +758 -646
- data/lib/rack/lock.rb +2 -5
- data/lib/rack/logger.rb +2 -0
- data/lib/rack/media_type.rb +9 -4
- data/lib/rack/method_override.rb +5 -1
- data/lib/rack/mime.rb +8 -0
- data/lib/rack/mock.rb +1 -271
- data/lib/rack/mock_request.rb +166 -0
- data/lib/rack/mock_response.rb +126 -0
- data/lib/rack/multipart/generator.rb +7 -5
- data/lib/rack/multipart/parser.rb +120 -64
- data/lib/rack/multipart/uploaded_file.rb +4 -0
- data/lib/rack/multipart.rb +20 -40
- data/lib/rack/null_logger.rb +9 -0
- data/lib/rack/query_parser.rb +78 -46
- data/lib/rack/recursive.rb +2 -0
- data/lib/rack/reloader.rb +0 -2
- data/lib/rack/request.rb +224 -106
- data/lib/rack/response.rb +138 -61
- data/lib/rack/rewindable_input.rb +24 -5
- data/lib/rack/runtime.rb +7 -6
- data/lib/rack/sendfile.rb +30 -25
- data/lib/rack/show_exceptions.rb +15 -2
- data/lib/rack/show_status.rb +17 -7
- data/lib/rack/static.rb +8 -8
- data/lib/rack/tempfile_reaper.rb +15 -4
- data/lib/rack/urlmap.rb +3 -1
- data/lib/rack/utils.rb +208 -178
- data/lib/rack/version.rb +9 -4
- data/lib/rack.rb +6 -76
- metadata +14 -34
- data/README.rdoc +0 -320
- data/Rakefile +0 -130
- data/bin/rackup +0 -5
- data/contrib/rack.png +0 -0
- data/contrib/rack.svg +0 -150
- data/contrib/rack_logo.svg +0 -164
- data/contrib/rdoc.css +0 -412
- data/example/lobster.ru +0 -6
- data/example/protectedlobster.rb +0 -16
- data/example/protectedlobster.ru +0 -10
- data/lib/rack/core_ext/regexp.rb +0 -14
- data/lib/rack/handler/cgi.rb +0 -59
- data/lib/rack/handler/fastcgi.rb +0 -100
- data/lib/rack/handler/lsws.rb +0 -61
- data/lib/rack/handler/scgi.rb +0 -71
- data/lib/rack/handler/thin.rb +0 -36
- data/lib/rack/handler/webrick.rb +0 -129
- data/lib/rack/handler.rb +0 -104
- data/lib/rack/lobster.rb +0 -70
- data/lib/rack/server.rb +0 -466
- data/lib/rack/session/abstract/id.rb +0 -523
- data/lib/rack/session/cookie.rb +0 -204
- data/lib/rack/session/memcache.rb +0 -10
- data/lib/rack/session/pool.rb +0 -85
- data/rack.gemspec +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebeaad43b1e4e691aa7123f2f0b0abb55bd4e8ccb062a048d3bc636c12780a1c
|
4
|
+
data.tar.gz: 4db213c69e487539b15f2648019de339b3876bd9d9ab39a7e4948c6114a18546
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c3afb608d9170593f0bc58120d60dcec9d4d3163e72a9805b8a48b2ebd8952a359dd56d2c2f48dc8673d2361647409a628b22073b4e07a6c070f60283265bb9
|
7
|
+
data.tar.gz: fb304999e3568174cdcc7a2b0b43b3ba064448db1882142524b50332cd7d037a2ff44c7042f94a2b18da862ca4db6e43b6eb9ca71b6b73986e1359e4b294eb7c
|
data/CHANGELOG.md
CHANGED
@@ -2,38 +2,158 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file. For info on how to format all future additions to this file please reference [Keep A Changelog](https://keepachangelog.com/en/1.0.0/).
|
4
4
|
|
5
|
-
##
|
5
|
+
## Unreleased
|
6
6
|
|
7
|
-
|
8
|
-
- Support underscore in host names for Rack 2.2 (Fixes [#2070](https://github.com/rack/rack/issues/2070)) ([#2015](https://github.com/rack/rack/pull/2071), [@jeremyevans](https://github.com/jeremyevans))
|
7
|
+
## [3.0.9] - 2024-01-31
|
9
8
|
|
10
|
-
|
9
|
+
- Fix incorrect content-length header that was emitted when `Rack::Response#write` was used in some situations. ([#2150](https://github.com/rack/rack/pull/2150), [@mattbrictson])
|
10
|
+
|
11
|
+
## [3.0.8] - 2023-06-14
|
12
|
+
|
13
|
+
- Fix some unused variable verbose warnings. ([#2084](https://github.com/rack/rack/pull/2084), [@jeremyevans], [@skipkayhil](https://github.com/skipkayhil))
|
14
|
+
|
15
|
+
## [3.0.7] - 2023-03-16
|
16
|
+
|
17
|
+
- Make query parameters without `=` have `nil` values. ([#2059](https://github.com/rack/rack/pull/2059), [@jeremyevans])
|
18
|
+
|
19
|
+
## [3.0.6.1] - 2023-03-13
|
11
20
|
|
12
21
|
- [CVE-2023-27539] Avoid ReDoS in header parsing
|
13
22
|
|
14
|
-
## [
|
23
|
+
## [3.0.6] - 2023-03-13
|
15
24
|
|
16
|
-
-
|
25
|
+
- Add `QueryParser#missing_value` for handling missing values + tests. ([#2052](https://github.com/rack/rack/pull/2052), [@ioquatix])
|
17
26
|
|
18
|
-
## [
|
27
|
+
## [3.0.5] - 2023-03-13
|
19
28
|
|
20
|
-
-
|
29
|
+
- Split form/query parsing into two steps. ([#2038](https://github.com/rack/rack/pull/2038), [@matthewd](https://github.com/matthewd))
|
21
30
|
|
22
|
-
## [
|
31
|
+
## [3.0.4.1] - 2023-03-02
|
32
|
+
|
33
|
+
- [CVE-2023-27530] Introduce multipart_total_part_limit to limit total parts
|
34
|
+
|
35
|
+
## [3.0.4.1] - 2023-01-17
|
23
36
|
|
24
37
|
- [CVE-2022-44571] Fix ReDoS vulnerability in multipart parser
|
38
|
+
- [CVE-2022-44570] Fix ReDoS in Rack::Utils.get_byte_ranges
|
25
39
|
- [CVE-2022-44572] Forbid control characters in attributes (also ReDoS)
|
26
40
|
|
27
|
-
## [
|
41
|
+
## [3.0.4] - 2023-01-17
|
28
42
|
|
29
|
-
-
|
43
|
+
- `Rack::Request#POST` should consistently raise errors. Cache errors that occur when invoking `Rack::Request#POST` so they can be raised again later. ([#2010](https://github.com/rack/rack/pull/2010), [@ioquatix])
|
44
|
+
- Fix `Rack::Lint` error message for `HTTP_CONTENT_TYPE` and `HTTP_CONTENT_LENGTH`. ([#2007](https://github.com/rack/rack/pull/2007), [@byroot](https://github.com/byroot))
|
45
|
+
- Extend `Rack::MethodOverride` to handle `QueryParser::ParamsTooDeepError` error. ([#2006](https://github.com/rack/rack/pull/2006), [@byroot](https://github.com/byroot))
|
30
46
|
|
31
|
-
## [
|
47
|
+
## [3.0.3] - 2022-12-27
|
32
48
|
|
33
49
|
### Fixed
|
34
50
|
|
35
51
|
- `Rack::URLMap` uses non-deprecated form of `Regexp.new`. ([#1998](https://github.com/rack/rack/pull/1998), [@weizheheng](https://github.com/weizheheng))
|
36
52
|
|
53
|
+
## [3.0.2] - 2022-12-05
|
54
|
+
|
55
|
+
### Fixed
|
56
|
+
|
57
|
+
- `Utils.build_nested_query` URL-encodes nested field names including the square brackets.
|
58
|
+
- Allow `Rack::Response` to pass through streaming bodies. ([#1993](https://github.com/rack/rack/pull/1993), [@ioquatix])
|
59
|
+
|
60
|
+
## [3.0.1] - 2022-11-18
|
61
|
+
|
62
|
+
### Fixed
|
63
|
+
|
64
|
+
- `MethodOverride` does not look for an override if a request does not include form/parseable data.
|
65
|
+
- `Rack::Lint::Wrapper` correctly handles `respond_to?` with `to_ary`, `each`, `call` and `to_path`, forwarding to the body. ([#1981](https://github.com/rack/rack/pull/1981), [@ioquatix])
|
66
|
+
|
67
|
+
## [3.0.0] - 2022-09-06
|
68
|
+
|
69
|
+
- No changes
|
70
|
+
|
71
|
+
## [3.0.0.rc1] - 2022-09-04
|
72
|
+
|
73
|
+
### SPEC Changes
|
74
|
+
|
75
|
+
- Stream argument must implement `<<` https://github.com/rack/rack/pull/1959
|
76
|
+
- `close` may be called on `rack.input` https://github.com/rack/rack/pull/1956
|
77
|
+
- `rack.response_finished` may be used for executing code after the response has been finished https://github.com/rack/rack/pull/1952
|
78
|
+
|
79
|
+
## [3.0.0.beta1] - 2022-08-08
|
80
|
+
|
81
|
+
### Security
|
82
|
+
|
83
|
+
- Do not use semicolon as GET parameter separator. ([#1733](https://github.com/rack/rack/pull/1733), [@jeremyevans])
|
84
|
+
|
85
|
+
### SPEC Changes
|
86
|
+
|
87
|
+
- Response array must now be non-frozen.
|
88
|
+
- Response `status` must now be an integer greater than or equal to 100.
|
89
|
+
- Response `headers` must now be an unfrozen hash.
|
90
|
+
- Response header keys can no longer include uppercase characters.
|
91
|
+
- Response header values can be an `Array` to handle multiple values (and no longer supports `\n` encoded headers).
|
92
|
+
- Response body can now respond to `#call` (streaming body) instead of `#each` (enumerable body), for the equivalent of response hijacking in previous versions.
|
93
|
+
- Middleware must no longer call `#each` on the body, but they can call `#to_ary` on the body if it responds to `#to_ary`.
|
94
|
+
- `rack.input` is no longer required to be rewindable.
|
95
|
+
- `rack.multithread`/`rack.multiprocess`/`rack.run_once`/`rack.version` are no longer required environment keys.
|
96
|
+
- `SERVER_PROTOCOL` is now a required environment key, matching the HTTP protocol used in the request.
|
97
|
+
- `rack.hijack?` (partial hijack) and `rack.hijack` (full hijack) are now independently optional.
|
98
|
+
- `rack.hijack_io` has been removed completely.
|
99
|
+
- `rack.response_finished` is an optional environment key which contains an array of callable objects that must accept `#call(env, status, headers, error)` and are invoked after the response is finished (either successfully or unsuccessfully).
|
100
|
+
- It is okay to call `#close` on `rack.input` to indicate that you no longer need or care about the input.
|
101
|
+
- The stream argument supplied to the streaming body and hijack must support `#<<` for writing output.
|
102
|
+
|
103
|
+
### Removed
|
104
|
+
|
105
|
+
- Remove `rack.multithread`/`rack.multiprocess`/`rack.run_once`. These variables generally come too late to be useful. ([#1720](https://github.com/rack/rack/pull/1720), [@ioquatix], [@jeremyevans]))
|
106
|
+
- Remove deprecated Rack::Request::SCHEME_WHITELIST. ([@jeremyevans])
|
107
|
+
- Remove internal cookie deletion using pattern matching, there are very few practical cases where it would be useful and browsers handle it correctly without us doing anything special. ([#1844](https://github.com/rack/rack/pull/1844), [@ioquatix])
|
108
|
+
- Remove `rack.version` as it comes too late to be useful. ([#1938](https://github.com/rack/rack/pull/1938), [@ioquatix])
|
109
|
+
- Extract `rackup` command, `Rack::Server`, `Rack::Handler` and related code into a separate gem. ([#1937](https://github.com/rack/rack/pull/1937), [@ioquatix])
|
110
|
+
|
111
|
+
### Added
|
112
|
+
|
113
|
+
- `Rack::Headers` added to support lower-case header keys. ([@jeremyevans])
|
114
|
+
- `Rack::Utils#set_cookie_header` now supports `escape_key: false` to avoid key escaping. ([@jeremyevans])
|
115
|
+
- `Rack::RewindableInput` supports size. ([@ahorek](https://github.com/ahorek))
|
116
|
+
- `Rack::RewindableInput::Middleware` added for making `rack.input` rewindable. ([@jeremyevans])
|
117
|
+
- The RFC 7239 Forwarded header is now supported and considered by default when looking for information on forwarding, falling back to the X-Forwarded-* headers. `Rack::Request.forwarded_priority` accessor has been added for configuring the priority of which header to check. ([#1423](https://github.com/rack/rack/issues/1423), [@jeremyevans])
|
118
|
+
- Allow response headers to contain array of values. ([#1598](https://github.com/rack/rack/issues/1598), [@ioquatix])
|
119
|
+
- Support callable body for explicit streaming support and clarify streaming response body behaviour. ([#1745](https://github.com/rack/rack/pull/1745), [@ioquatix], [#1748](https://github.com/rack/rack/pull/1748), [@wjordan])
|
120
|
+
- Allow `Rack::Builder#run` to take a block instead of an argument. ([#1942](https://github.com/rack/rack/pull/1942), [@ioquatix])
|
121
|
+
- Add `rack.response_finished` to `Rack::Lint`. ([#1802](https://github.com/rack/rack/pull/1802), [@BlakeWilliams], [#1952](https://github.com/rack/rack/pull/1952), [@ioquatix])
|
122
|
+
- The stream argument must implement `#<<`. ([#1959](https://github.com/rack/rack/pull/1959), [@ioquatix])
|
123
|
+
|
124
|
+
### Changed
|
125
|
+
|
126
|
+
- BREAKING CHANGE: Require `status` to be an Integer. ([#1662](https://github.com/rack/rack/pull/1662), [@olleolleolle](https://github.com/olleolleolle))
|
127
|
+
- BREAKING CHANGE: Query parsing now treats parameters without `=` as having the empty string value instead of nil value, to conform to the URL spec. ([#1696](https://github.com/rack/rack/issues/1696), [@jeremyevans])
|
128
|
+
- Relax validations around `Rack::Request#host` and `Rack::Request#hostname`. ([#1606](https://github.com/rack/rack/issues/1606), [@pvande](https://github.com/pvande))
|
129
|
+
- Removed antiquated handlers: FCGI, LSWS, SCGI, Thin. ([#1658](https://github.com/rack/rack/pull/1658), [@ioquatix])
|
130
|
+
- Removed options from `Rack::Builder.parse_file` and `Rack::Builder.load_file`. ([#1663](https://github.com/rack/rack/pull/1663), [@ioquatix])
|
131
|
+
- `Rack::HTTP_VERSION` has been removed and the `HTTP_VERSION` env setting is no longer set in the CGI and Webrick handlers. ([#970](https://github.com/rack/rack/issues/970), [@jeremyevans])
|
132
|
+
- `Rack::Request#[]` and `#[]=` now warn even in non-verbose mode. ([#1277](https://github.com/rack/rack/issues/1277), [@jeremyevans])
|
133
|
+
- Decrease default allowed parameter recursion level from 100 to 32. ([#1640](https://github.com/rack/rack/issues/1640), [@jeremyevans])
|
134
|
+
- Attempting to parse a multipart response with an empty body now raises Rack::Multipart::EmptyContentError. ([#1603](https://github.com/rack/rack/issues/1603), [@jeremyevans])
|
135
|
+
- `Rack::Utils.secure_compare` uses OpenSSL's faster implementation if available. ([#1711](https://github.com/rack/rack/pull/1711), [@bdewater](https://github.com/bdewater))
|
136
|
+
- `Rack::Request#POST` now caches an empty hash if input content type is not parseable. ([#749](https://github.com/rack/rack/pull/749), [@jeremyevans])
|
137
|
+
- BREAKING CHANGE: Updated `trusted_proxy?` to match full 127.0.0.0/8 network. ([#1781](https://github.com/rack/rack/pull/1781), [@snbloch](https://github.com/snbloch))
|
138
|
+
- Explicitly deprecate `Rack::File` which was an alias for `Rack::Files`. ([#1811](https://github.com/rack/rack/pull/1720), [@ioquatix]).
|
139
|
+
- Moved `Rack::Session` into [separate gem](https://github.com/rack/rack-session). ([#1805](https://github.com/rack/rack/pull/1805), [@ioquatix])
|
140
|
+
- `rackup -D` option to daemonizes no longer changes the working directory to the root. ([#1813](https://github.com/rack/rack/pull/1813), [@jeremyevans])
|
141
|
+
- The `x-forwarded-proto` header is now considered before the `x-forwarded-scheme` header for determining the forwarded protocol. `Rack::Request.x_forwarded_proto_priority` accessor has been added for configuring the priority of which header to check. ([#1809](https://github.com/rack/rack/issues/1809), [@jeremyevans])
|
142
|
+
- `Rack::Request.forwarded_authority` (and methods that call it, such as `host`) now returns the last authority in the forwarded header, instead of the first, as earlier forwarded authorities can be forged by clients. This restores the Rack 2.1 behavior. ([#1829](https://github.com/rack/rack/issues/1809), [@jeremyevans])
|
143
|
+
- Use lower case cookie attributes when creating cookies, and fold cookie attributes to lower case when reading cookies (specifically impacting `secure` and `httponly` attributes). ([#1849](https://github.com/rack/rack/pull/1849), [@ioquatix])
|
144
|
+
- The response array must now be mutable (non-frozen) so middleware can modify it without allocating a new Array,therefore reducing object allocations. ([#1887](https://github.com/rack/rack/pull/1887), [#1927](https://github.com/rack/rack/pull/1927), [@amatsuda], [@ioquatix])
|
145
|
+
- `rack.hijack?` (partial hijack) and `rack.hijack` (full hijack) are now independently optional. `rack.hijack_io` is no longer required/specified. ([#1939](https://github.com/rack/rack/pull/1939), [@ioquatix])
|
146
|
+
- Allow calling close on `rack.input`. ([#1956](https://github.com/rack/rack/pull/1956), [@ioquatix])
|
147
|
+
|
148
|
+
### Fixed
|
149
|
+
|
150
|
+
- Make Rack::MockResponse handle non-hash headers. ([#1629](https://github.com/rack/rack/issues/1629), [@jeremyevans])
|
151
|
+
- TempfileReaper now deletes temp files if application raises an exception. ([#1679](https://github.com/rack/rack/issues/1679), [@jeremyevans])
|
152
|
+
- Handle cookies with values that end in '=' ([#1645](https://github.com/rack/rack/pull/1645), [@lukaso](https://github.com/lukaso))
|
153
|
+
- Make `Rack::NullLogger` respond to `#fatal!` [@jeremyevans])
|
154
|
+
- Fix multipart filename generation for filenames that contain spaces. Encode spaces as "%20" instead of "+" which will be decoded properly by the multipart parser. ([#1736](https://github.com/rack/rack/pull/1645), [@muirdm](https://github.com/muirdm))
|
155
|
+
- `Rack::Request#scheme` returns `ws` or `wss` when one of the `X-Forwarded-Scheme` / `X-Forwarded-Proto` headers is set to `ws` or `wss`, respectively. ([#1730](https://github.com/rack/rack/issues/1730), [@erwanst](https://github.com/erwanst))
|
156
|
+
|
37
157
|
## [2.2.4] - 2022-06-30
|
38
158
|
|
39
159
|
- Better support for lower case headers in `Rack::ETag` middleware. ([#1919](https://github.com/rack/rack/pull/1919), [@ioquatix](https://github.com/ioquatix))
|
@@ -41,23 +161,21 @@ All notable changes to this project will be documented in this file. For info on
|
|
41
161
|
|
42
162
|
## [2.2.3.1] - 2022-05-27
|
43
163
|
|
44
|
-
### Security
|
45
|
-
|
46
164
|
- [CVE-2022-30123] Fix shell escaping issue in Common Logger
|
47
165
|
- [CVE-2022-30122] Restrict parsing of broken MIME attachments
|
48
166
|
|
49
|
-
## [2.2.3] - 2020-
|
167
|
+
## [2.2.3] - 2020-06-15
|
50
168
|
|
51
169
|
### Security
|
52
170
|
|
53
|
-
- [CVE-2020-8184]
|
171
|
+
- [[CVE-2020-8184](https://nvd.nist.gov/vuln/detail/CVE-2020-8184)] Do not allow percent-encoded cookie name to override existing cookie names. BREAKING CHANGE: Accessing cookie names that require URL encoding with decoded name no longer works. ([@fletchto99](https://github.com/fletchto99))
|
54
172
|
|
55
173
|
## [2.2.2] - 2020-02-11
|
56
174
|
|
57
175
|
### Fixed
|
58
176
|
|
59
|
-
- Fix incorrect `Rack::Request#host` value. ([#1591](https://github.com/rack/rack/pull/1591), [@ioquatix]
|
60
|
-
- Revert `Rack::Handler::Thin` implementation. ([#1583](https://github.com/rack/rack/pull/1583), [@jeremyevans]
|
177
|
+
- Fix incorrect `Rack::Request#host` value. ([#1591](https://github.com/rack/rack/pull/1591), [@ioquatix])
|
178
|
+
- Revert `Rack::Handler::Thin` implementation. ([#1583](https://github.com/rack/rack/pull/1583), [@jeremyevans])
|
61
179
|
- Double assignment is still needed to prevent an "unused variable" warning. ([#1589](https://github.com/rack/rack/pull/1589), [@kamipo](https://github.com/kamipo))
|
62
180
|
- Fix to handle same_site option for session pool. ([#1587](https://github.com/rack/rack/pull/1587), [@kamipo](https://github.com/kamipo))
|
63
181
|
|
@@ -65,105 +183,111 @@ All notable changes to this project will be documented in this file. For info on
|
|
65
183
|
|
66
184
|
### Fixed
|
67
185
|
|
68
|
-
- Rework `Rack::Request#ip` to handle empty `forwarded_for`. ([#1577](https://github.com/rack/rack/pull/1577), [@ioquatix]
|
186
|
+
- Rework `Rack::Request#ip` to handle empty `forwarded_for`. ([#1577](https://github.com/rack/rack/pull/1577), [@ioquatix])
|
69
187
|
|
70
188
|
## [2.2.0] - 2020-02-08
|
71
189
|
|
72
190
|
### SPEC Changes
|
73
191
|
|
74
|
-
- `rack.session` request environment entry must respond to `to_hash` and return unfrozen Hash. ([@jeremyevans]
|
75
|
-
- Request environment cannot be frozen. ([@jeremyevans]
|
76
|
-
- CGI values in the request environment with non-ASCII characters must use ASCII-8BIT encoding. ([@jeremyevans]
|
77
|
-
- Improve SPEC/lint relating to SERVER_NAME, SERVER_PORT and HTTP_HOST. ([#1561](https://github.com/rack/rack/pull/1561), [@ioquatix]
|
192
|
+
- `rack.session` request environment entry must respond to `to_hash` and return unfrozen Hash. ([@jeremyevans])
|
193
|
+
- Request environment cannot be frozen. ([@jeremyevans])
|
194
|
+
- CGI values in the request environment with non-ASCII characters must use ASCII-8BIT encoding. ([@jeremyevans])
|
195
|
+
- Improve SPEC/lint relating to SERVER_NAME, SERVER_PORT and HTTP_HOST. ([#1561](https://github.com/rack/rack/pull/1561), [@ioquatix])
|
78
196
|
|
79
197
|
### Added
|
80
198
|
|
81
|
-
- `rackup` supports multiple `-r` options and will require all arguments. ([@jeremyevans]
|
199
|
+
- `rackup` supports multiple `-r` options and will require all arguments. ([@jeremyevans])
|
82
200
|
- `Server` supports an array of paths to require for the `:require` option. ([@khotta](https://github.com/khotta))
|
83
201
|
- `Files` supports multipart range requests. ([@fatkodima](https://github.com/fatkodima))
|
84
|
-
- `Multipart::UploadedFile` supports an IO-like object instead of using the filesystem, using `:filename` and `:io` options. ([@jeremyevans]
|
85
|
-
- `Multipart::UploadedFile` supports keyword arguments `:path`, `:content_type`, and `:binary` in addition to positional arguments. ([@jeremyevans]
|
86
|
-
- `Static` supports a `:cascade` option for calling the app if there is no matching file. ([@jeremyevans]
|
87
|
-
- `Session::Abstract::SessionHash#dig`. ([@jeremyevans]
|
88
|
-
- `Response.[]` and `MockResponse.[]` for creating instances using status, headers, and body. ([@ioquatix]
|
89
|
-
- Convenient cache and content type methods for `Rack::Response`. ([#1555](https://github.com/rack/rack/pull/1555), [@ioquatix]
|
202
|
+
- `Multipart::UploadedFile` supports an IO-like object instead of using the filesystem, using `:filename` and `:io` options. ([@jeremyevans])
|
203
|
+
- `Multipart::UploadedFile` supports keyword arguments `:path`, `:content_type`, and `:binary` in addition to positional arguments. ([@jeremyevans])
|
204
|
+
- `Static` supports a `:cascade` option for calling the app if there is no matching file. ([@jeremyevans])
|
205
|
+
- `Session::Abstract::SessionHash#dig`. ([@jeremyevans])
|
206
|
+
- `Response.[]` and `MockResponse.[]` for creating instances using status, headers, and body. ([@ioquatix])
|
207
|
+
- Convenient cache and content type methods for `Rack::Response`. ([#1555](https://github.com/rack/rack/pull/1555), [@ioquatix])
|
90
208
|
|
91
209
|
### Changed
|
92
210
|
|
93
|
-
- `Request#params` no longer rescues EOFError. ([@jeremyevans]
|
94
|
-
- `Directory` uses a streaming approach, significantly improving time to first byte for large directories. ([@jeremyevans]
|
95
|
-
- `Directory` no longer includes a Parent directory link in the root directory index. ([@jeremyevans]
|
96
|
-
- `QueryParser#parse_nested_query` uses original backtrace when reraising exception with new class. ([@jeremyevans]
|
97
|
-
- `ConditionalGet` follows RFC 7232 precedence if both If-None-Match and If-Modified-Since headers are provided. ([@jeremyevans]
|
211
|
+
- `Request#params` no longer rescues EOFError. ([@jeremyevans])
|
212
|
+
- `Directory` uses a streaming approach, significantly improving time to first byte for large directories. ([@jeremyevans])
|
213
|
+
- `Directory` no longer includes a Parent directory link in the root directory index. ([@jeremyevans])
|
214
|
+
- `QueryParser#parse_nested_query` uses original backtrace when reraising exception with new class. ([@jeremyevans])
|
215
|
+
- `ConditionalGet` follows RFC 7232 precedence if both If-None-Match and If-Modified-Since headers are provided. ([@jeremyevans])
|
98
216
|
- `.ru` files supports the `frozen-string-literal` magic comment. ([@eregon](https://github.com/eregon))
|
99
|
-
- Rely on autoload to load constants instead of requiring internal files, make sure to require 'rack' and not just 'rack/...'. ([@jeremyevans]
|
100
|
-
- `Etag` will continue sending ETag even if the response should not be cached. ([@henm](https://github.com/henm))
|
217
|
+
- Rely on autoload to load constants instead of requiring internal files, make sure to require 'rack' and not just 'rack/...'. ([@jeremyevans])
|
218
|
+
- BREAKING CHANGE: `Etag` will continue sending ETag even if the response should not be cached. Streaming no longer works without a workaround, see [#1619](https://github.com/rack/rack/issues/1619#issuecomment-848460528). ([@henm](https://github.com/henm))
|
101
219
|
- `Request#host_with_port` no longer includes a colon for a missing or empty port. ([@AlexWayfer](https://github.com/AlexWayfer))
|
102
|
-
- All handlers uses keywords arguments instead of an options hash argument. ([@ioquatix]
|
103
|
-
- `Files` handling of range requests no longer return a body that supports `to_path`, to ensure range requests are handled correctly. ([@jeremyevans]
|
104
|
-
- `Multipart::Generator` only includes `Content-Length` for files with paths, and `Content-Disposition` `filename` if the `UploadedFile` instance has one. ([@jeremyevans]
|
105
|
-
- `Request#ssl?` is true for the `wss` scheme (secure websockets). ([@jeremyevans]
|
106
|
-
- `Rack::HeaderHash` is memoized by default. ([#1549](https://github.com/rack/rack/pull/1549), [@ioquatix]
|
220
|
+
- All handlers uses keywords arguments instead of an options hash argument. ([@ioquatix])
|
221
|
+
- `Files` handling of range requests no longer return a body that supports `to_path`, to ensure range requests are handled correctly. ([@jeremyevans])
|
222
|
+
- `Multipart::Generator` only includes `Content-Length` for files with paths, and `Content-Disposition` `filename` if the `UploadedFile` instance has one. ([@jeremyevans])
|
223
|
+
- `Request#ssl?` is true for the `wss` scheme (secure websockets). ([@jeremyevans])
|
224
|
+
- `Rack::HeaderHash` is memoized by default. ([#1549](https://github.com/rack/rack/pull/1549), [@ioquatix])
|
107
225
|
- `Rack::Directory` allow directory traversal inside root directory. ([#1417](https://github.com/rack/rack/pull/1417), [@ThomasSevestre](https://github.com/ThomasSevestre))
|
108
|
-
- Sort encodings by server preference. ([#1184](https://github.com/rack/rack/pull/1184), [@ioquatix]
|
109
|
-
- Rework host/hostname/authority implementation in `Rack::Request`. `#host` and `#host_with_port` have been changed to correctly return IPv6 addresses formatted with square brackets, as defined by [RFC3986](https://tools.ietf.org/html/rfc3986#section-3.2.2). ([#1561](https://github.com/rack/rack/pull/1561), [@ioquatix]
|
110
|
-
- `Rack::Builder` parsing options on first `#\` line is deprecated. ([#1574](https://github.com/rack/rack/pull/1574), [@ioquatix]
|
226
|
+
- Sort encodings by server preference. ([#1184](https://github.com/rack/rack/pull/1184), [@ioquatix], [@wjordan](https://github.com/wjordan))
|
227
|
+
- Rework host/hostname/authority implementation in `Rack::Request`. `#host` and `#host_with_port` have been changed to correctly return IPv6 addresses formatted with square brackets, as defined by [RFC3986](https://tools.ietf.org/html/rfc3986#section-3.2.2). ([#1561](https://github.com/rack/rack/pull/1561), [@ioquatix])
|
228
|
+
- `Rack::Builder` parsing options on first `#\` line is deprecated. ([#1574](https://github.com/rack/rack/pull/1574), [@ioquatix])
|
111
229
|
|
112
230
|
### Removed
|
113
231
|
|
114
|
-
- `Directory#path` as it was not used and always returned nil. ([@jeremyevans]
|
115
|
-
- `BodyProxy#each` as it was only needed to work around a bug in Ruby <1.9.3. ([@jeremyevans]
|
232
|
+
- `Directory#path` as it was not used and always returned nil. ([@jeremyevans])
|
233
|
+
- `BodyProxy#each` as it was only needed to work around a bug in Ruby <1.9.3. ([@jeremyevans])
|
116
234
|
- `URLMap::INFINITY` and `URLMap::NEGATIVE_INFINITY`, in favor of `Float::INFINITY`. ([@ch1c0t](https://github.com/ch1c0t))
|
117
235
|
- Deprecation of `Rack::File`. It will be deprecated again in rack 2.2 or 3.0. ([@rafaelfranca](https://github.com/rafaelfranca))
|
118
|
-
- Support for Ruby 2.2 as it is well past EOL. ([@ioquatix]
|
119
|
-
- Remove `Rack::Files#response_body` as the implementation was broken. ([#1153](https://github.com/rack/rack/pull/1153), [@ioquatix]
|
120
|
-
- Remove `SERVER_ADDR` which was never part of the original SPEC. ([#1573](https://github.com/rack/rack/pull/1573), [@ioquatix]
|
236
|
+
- Support for Ruby 2.2 as it is well past EOL. ([@ioquatix])
|
237
|
+
- Remove `Rack::Files#response_body` as the implementation was broken. ([#1153](https://github.com/rack/rack/pull/1153), [@ioquatix])
|
238
|
+
- Remove `SERVER_ADDR` which was never part of the original SPEC. ([#1573](https://github.com/rack/rack/pull/1573), [@ioquatix])
|
121
239
|
|
122
240
|
### Fixed
|
123
241
|
|
124
|
-
- `Directory` correctly handles root paths containing glob metacharacters. ([@jeremyevans]
|
125
|
-
- `Cascade` uses a new response object for each call if initialized with no apps. ([@jeremyevans]
|
126
|
-
- `BodyProxy` correctly delegates keyword arguments to the body object on Ruby 2.7+. ([@jeremyevans]
|
127
|
-
- `BodyProxy#method` correctly handles methods delegated to the body object. ([@jeremyevans]
|
242
|
+
- `Directory` correctly handles root paths containing glob metacharacters. ([@jeremyevans])
|
243
|
+
- `Cascade` uses a new response object for each call if initialized with no apps. ([@jeremyevans])
|
244
|
+
- `BodyProxy` correctly delegates keyword arguments to the body object on Ruby 2.7+. ([@jeremyevans])
|
245
|
+
- `BodyProxy#method` correctly handles methods delegated to the body object. ([@jeremyevans])
|
128
246
|
- `Request#host` and `Request#host_with_port` handle IPv6 addresses correctly. ([@AlexWayfer](https://github.com/AlexWayfer))
|
129
|
-
- `Lint` checks when response hijacking that `rack.hijack` is called with a valid object. ([@jeremyevans]
|
130
|
-
- `Response#write` correctly updates `Content-Length` if initialized with a body. ([@jeremyevans]
|
247
|
+
- `Lint` checks when response hijacking that `rack.hijack` is called with a valid object. ([@jeremyevans])
|
248
|
+
- `Response#write` correctly updates `Content-Length` if initialized with a body. ([@jeremyevans])
|
131
249
|
- `CommonLogger` includes `SCRIPT_NAME` when logging. ([@Erol](https://github.com/Erol))
|
132
|
-
- `Utils.parse_nested_query` correctly handles empty queries, using an empty instance of the params class instead of a hash. ([@jeremyevans]
|
250
|
+
- `Utils.parse_nested_query` correctly handles empty queries, using an empty instance of the params class instead of a hash. ([@jeremyevans])
|
133
251
|
- `Directory` correctly escapes paths in links. ([@yous](https://github.com/yous))
|
134
|
-
- `Request#delete_cookie` and related `Utils` methods handle `:domain` and `:path` options in same call. ([@jeremyevans]
|
135
|
-
- `Request#delete_cookie` and related `Utils` methods do an exact match on `:domain` and `:path` options. ([@jeremyevans]
|
252
|
+
- `Request#delete_cookie` and related `Utils` methods handle `:domain` and `:path` options in same call. ([@jeremyevans])
|
253
|
+
- `Request#delete_cookie` and related `Utils` methods do an exact match on `:domain` and `:path` options. ([@jeremyevans])
|
136
254
|
- `Static` no longer adds headers when a gzipped file request has a 304 response. ([@chooh](https://github.com/chooh))
|
137
|
-
- `ContentLength` sets `Content-Length` response header even for bodies not responding to `to_ary`. ([@jeremyevans]
|
138
|
-
- Thin handler supports options passed directly to `Thin::Controllers::Controller`. ([@jeremyevans]
|
139
|
-
- WEBrick handler no longer ignores `:BindAddress` option. ([@jeremyevans]
|
140
|
-
- `ShowExceptions` handles invalid POST data. ([@jeremyevans]
|
141
|
-
- Basic authentication requires a password, even if the password is empty. ([@jeremyevans]
|
142
|
-
- `Lint` checks response is array with 3 elements, per SPEC. ([@jeremyevans]
|
255
|
+
- `ContentLength` sets `Content-Length` response header even for bodies not responding to `to_ary`. ([@jeremyevans])
|
256
|
+
- Thin handler supports options passed directly to `Thin::Controllers::Controller`. ([@jeremyevans])
|
257
|
+
- WEBrick handler no longer ignores `:BindAddress` option. ([@jeremyevans])
|
258
|
+
- `ShowExceptions` handles invalid POST data. ([@jeremyevans])
|
259
|
+
- Basic authentication requires a password, even if the password is empty. ([@jeremyevans])
|
260
|
+
- `Lint` checks response is array with 3 elements, per SPEC. ([@jeremyevans])
|
143
261
|
- Support for using `:SSLEnable` option when using WEBrick handler. (Gregor Melhorn)
|
144
|
-
- Close response body after buffering it when buffering. ([@ioquatix]
|
262
|
+
- Close response body after buffering it when buffering. ([@ioquatix])
|
145
263
|
- Only accept `;` as delimiter when parsing cookies. ([@mrageh](https://github.com/mrageh))
|
146
|
-
- `Utils::HeaderHash#clear` clears the name mapping as well. ([@raxoft](https://github.com/raxoft))
|
147
|
-
- Support for passing `nil` `Rack::Files.new`, which notably fixes Rails' current `ActiveStorage::FileServer` implementation. ([@ioquatix]
|
264
|
+
- `Utils::HeaderHash#clear` clears the name mapping as well. ([@raxoft](https://github.com/raxoft))
|
265
|
+
- Support for passing `nil` `Rack::Files.new`, which notably fixes Rails' current `ActiveStorage::FileServer` implementation. ([@ioquatix])
|
148
266
|
|
149
267
|
### Documentation
|
150
268
|
|
151
269
|
- CHANGELOG updates. ([@aupajo](https://github.com/aupajo))
|
152
270
|
- Added [CONTRIBUTING](CONTRIBUTING.md). ([@dblock](https://github.com/dblock))
|
153
271
|
|
272
|
+
## [2.0.9] - 2020-02-08
|
273
|
+
|
274
|
+
- Handle case where session id key is requested but missing ([@jeremyevans])
|
275
|
+
- Restore support for code relying on `SessionId#to_s`. ([@jeremyevans])
|
276
|
+
- Add support for `SameSite=None` cookie value. ([@hennikul](https://github.com/hennikul))
|
277
|
+
|
154
278
|
## [2.1.2] - 2020-01-27
|
155
279
|
|
156
280
|
- Fix multipart parser for some files to prevent denial of service ([@aiomaster](https://github.com/aiomaster))
|
157
281
|
- Fix `Rack::Builder#use` with keyword arguments ([@kamipo](https://github.com/kamipo))
|
158
|
-
- Skip deflating in Rack::Deflater if Content-Length is 0 ([@jeremyevans]
|
282
|
+
- Skip deflating in Rack::Deflater if Content-Length is 0 ([@jeremyevans])
|
159
283
|
- Remove `SessionHash#transform_keys`, no longer needed ([@pavel](https://github.com/pavel))
|
160
284
|
- Add to_hash to wrap Hash and Session classes ([@oleh-demyanyuk](https://github.com/oleh-demyanyuk))
|
161
|
-
- Handle case where session id key is requested but missing ([@jeremyevans]
|
285
|
+
- Handle case where session id key is requested but missing ([@jeremyevans])
|
162
286
|
|
163
287
|
## [2.1.1] - 2020-01-12
|
164
288
|
|
165
|
-
- Remove `Rack::Chunked` from `Rack::Server` default middleware. ([#1475](https://github.com/rack/rack/pull/1475), [@ioquatix]
|
166
|
-
- Restore support for code relying on `SessionId#to_s`. ([@jeremyevans]
|
289
|
+
- Remove `Rack::Chunked` from `Rack::Server` default middleware. ([#1475](https://github.com/rack/rack/pull/1475), [@ioquatix])
|
290
|
+
- Restore support for code relying on `SessionId#to_s`. ([@jeremyevans])
|
167
291
|
|
168
292
|
## [2.1.0] - 2020-01-10
|
169
293
|
|
@@ -180,13 +304,13 @@ All notable changes to this project will be documented in this file. For info on
|
|
180
304
|
- Add boot-time profiling capabilities to `rackup`. ([@tenderlove](https://github.com/tenderlove))
|
181
305
|
- Add multi mapping support for `X-Accel-Mappings` header. ([@yoshuki](https://github.com/yoshuki))
|
182
306
|
- Add `sync: false` option to `Rack::Deflater`. (Eric Wong)
|
183
|
-
- Add `Builder#freeze_app` to freeze application and all middleware instances. ([@jeremyevans]
|
307
|
+
- Add `Builder#freeze_app` to freeze application and all middleware instances. ([@jeremyevans])
|
184
308
|
- Add API to extract cookies from `Rack::MockResponse`. ([@petercline](https://github.com/petercline))
|
185
309
|
|
186
310
|
### Changed
|
187
311
|
|
188
|
-
- Don't propagate nil values from middleware. ([@ioquatix]
|
189
|
-
- Lazily initialize the response body and only buffer it if required. ([@ioquatix]
|
312
|
+
- Don't propagate nil values from middleware. ([@ioquatix])
|
313
|
+
- Lazily initialize the response body and only buffer it if required. ([@ioquatix])
|
190
314
|
- Fix deflater zlib buffer errors on empty body part. ([@felixbuenemann](https://github.com/felixbuenemann))
|
191
315
|
- Set `X-Accel-Redirect` to percent-encoded path. ([@diskkid](https://github.com/diskkid))
|
192
316
|
- Remove unnecessary buffer growing when parsing multipart. ([@tainoe](https://github.com/tainoe))
|
@@ -199,15 +323,15 @@ All notable changes to this project will be documented in this file. For info on
|
|
199
323
|
- Make `Utils.status_code` raise an error when the status symbol is invalid instead of `500`. ([@adambutler](https://github.com/adambutler))
|
200
324
|
- Rename `Request::SCHEME_WHITELIST` to `Request::ALLOWED_SCHEMES`.
|
201
325
|
- Make `Multipart::Parser.get_filename` accept files with `+` in their name. ([@lucaskanashiro](https://github.com/lucaskanashiro))
|
202
|
-
- Add Falcon to the default handler fallbacks. ([@ioquatix]
|
326
|
+
- Add Falcon to the default handler fallbacks. ([@ioquatix])
|
203
327
|
- Update codebase to avoid string mutations in preparation for `frozen_string_literals`. ([@pat](https://github.com/pat))
|
204
328
|
- Change `MockRequest#env_for` to rely on the input optionally responding to `#size` instead of `#length`. ([@janko](https://github.com/janko))
|
205
|
-
- Rename `Rack::File` -> `Rack::Files` and add deprecation notice. ([@postmodern](https://github.com/postmodern))
|
206
|
-
- Prefer Base64 “strict encoding” for Base64 cookies. ([@ioquatix]
|
329
|
+
- Rename `Rack::File` -> `Rack::Files` and add deprecation notice. ([@postmodern](https://github.com/postmodern))
|
330
|
+
- Prefer Base64 “strict encoding” for Base64 cookies. ([@ioquatix])
|
207
331
|
|
208
332
|
### Removed
|
209
333
|
|
210
|
-
- Remove `to_ary` from Response ([@tenderlove](https://github.com/tenderlove))
|
334
|
+
- BREAKING CHANGE: Remove `to_ary` from Response ([@tenderlove](https://github.com/tenderlove))
|
211
335
|
- Deprecate `Rack::Session::Memcache` in favor of `Rack::Session::Dalli` from dalli gem ([@fatkodima](https://github.com/fatkodima))
|
212
336
|
|
213
337
|
### Fixed
|
@@ -288,7 +412,7 @@ All notable changes to this project will be documented in this file. For info on
|
|
288
412
|
### Added
|
289
413
|
|
290
414
|
- Allow `Session::Abstract::SessionHash#fetch` to accept a block with a default value. ([@yannvanhalewyn](https://github.com/yannvanhalewyn))
|
291
|
-
- Add `Builder#freeze_app` to freeze application and all middleware. ([@jeremyevans]
|
415
|
+
- Add `Builder#freeze_app` to freeze application and all middleware. ([@jeremyevans])
|
292
416
|
|
293
417
|
### Changed
|
294
418
|
|
@@ -300,9 +424,9 @@ All notable changes to this project will be documented in this file. For info on
|
|
300
424
|
### Fixed
|
301
425
|
|
302
426
|
- Handle `NULL` bytes in multipart filenames. ([@casperisfine](https://github.com/casperisfine))
|
303
|
-
- Remove warnings due to miscapitalized global. ([@ioquatix]
|
427
|
+
- Remove warnings due to miscapitalized global. ([@ioquatix])
|
304
428
|
- Prevent exceptions caused by a race condition on multi-threaded servers. ([@sophiedeziel](https://github.com/sophiedeziel))
|
305
|
-
- Add RDoc as an explicit
|
429
|
+
- Add RDoc as an explicit dependency for `doc` group. ([@tonytonyjan](https://github.com/tonytonyjan))
|
306
430
|
- Record errors originating from `Multipart::Parser` in the `MethodOverride` middleware instead of letting them bubble up. ([@carlzulauf](https://github.com/carlzulauf))
|
307
431
|
- Remove remaining use of removed `Utils#bytesize` method from the `File` middleware. ([@brauliomartinezlm](https://github.com/brauliomartinezlm))
|
308
432
|
|
@@ -620,7 +744,7 @@ Items below this line are from the previously maintained HISTORY.md and NEWS.md
|
|
620
744
|
- Moved Auth::OpenID to rack-contrib.
|
621
745
|
- SPEC change that relaxes Lint slightly to allow subclasses of the
|
622
746
|
required types
|
623
|
-
- SPEC change to document rack.input binary mode in
|
747
|
+
- SPEC change to document rack.input binary mode in greater detail
|
624
748
|
- SPEC define optional rack.logger specification
|
625
749
|
- File servers support X-Cascade header
|
626
750
|
- Imported Config middleware
|
@@ -738,3 +862,9 @@ Items below this line are from the previously maintained HISTORY.md and NEWS.md
|
|
738
862
|
- Removed Rails adapter, was too alpha.
|
739
863
|
|
740
864
|
## [0.1] 2007-03-03
|
865
|
+
|
866
|
+
[@ioquatix]: https://github.com/ioquatix "Samuel Williams"
|
867
|
+
[@jeremyevans]: https://github.com/jeremyevans "Jeremy Evans"
|
868
|
+
[@amatsuda]: https://github.com/amatsuda "Akira Matsuda"
|
869
|
+
[@wjordan]: https://github.com/wjordan "Will Jordan"
|
870
|
+
[@BlakeWilliams]: https://github.com/BlakeWilliams "Blake Williams"
|