1## 3.3.9
2
3* Don't insert Last-Modified: if exists.
4  [#791](https://github.com/yesodweb/wai/pull/791)
5
6## 3.3.8
7
8* Maximum header size is configurable.
9  [#781](https://github.com/yesodweb/wai/pull/781)
10* Ignoring an exception from shutdown (gracefulClose).
11
12## 3.3.7
13
14* InvalidArgument (Bad file descriptor) is ignored in `receive`.
15  [#787](https://github.com/yesodweb/wai/pull/787)
16
17## 3.3.6
18
19* Fixing a bug of thread killed in the case of event source with
20  HTTP/2 (fixing #692 and #785)
21* New APIs: clientCertificate to get client's certificate
22  [#783](https://github.com/yesodweb/wai/pull/783)
23
24## 3.3.5
25
26* New APIs: setGracefulCloseTimeout1 and setGracefulCloseTimeout2.
27  For HTTP/1.x, connections are closed immediately by default.
28  gracefullClose is used for HTTP/2 by default.
29  [#782](https://github.com/yesodweb/wai/pull/782)
30
31## 3.3.4
32
33* Setting isSecure of HTTP/2 correctly.
34
35## 3.3.3
36
37* Calling setOnException in HTTP/2.
38  [#771](https://github.com/yesodweb/wai/pull/771)
39
40## 3.3.2
41
42* Fixing a bug of HTTP/2 without fd cache.
43
44## 3.3.1
45
46* Using gracefullClose of network 3.1.1 or later if available.
47* If the first line of an HTTP request is really invalid,
48  don't send an error response
49
50## 3.3.0
51
52* Switching from the original implementation to HTTP/2 server library.
53  [#754](https://github.com/yesodweb/wai/pull/754)
54* Breaking change: The type of `http2dataTrailers` is now
55  `HTTP2Data -> TrailersMaker`.
56
57## 3.2.28
58
59* Using the Strict and StrictData language extensions for GHC >8.
60  [#752](https://github.com/yesodweb/wai/pull/752)
61* System.TimeManager is now in a separate package: time-manager.
62  [#750](https://github.com/yesodweb/wai/pull/750)
63* Fixing a bug of ALPN.
64* Introducing the half closed state for HTTP/2.
65  [#717](https://github.com/yesodweb/wai/pull/717)
66
67## 3.2.27
68
69* Internally, use `lookupEnv` instead of `getEnvironment` to get the
70  value of the `PORT` environment variable
71  [#736](https://github.com/yesodweb/wai/pull/736)
72* Throw 413 for too large payload
73* Throw 431 for too large headers
74  [#741](https://github.com/yesodweb/wai/pull/741)
75* Use exception response handler in HTTP/2 & improve connection preservation
76  in HTTP/1.x if uncaught exceptions are thrown in an `Application`.
77  [#738](https://github.com/yesodweb/wai/pull/738)
78
79## 3.2.26
80
81* Support network package version 3
82
83## 3.2.25
84
85* Removing Connection: and Transfer-Encoding: from HTTP/2
86  response header
87  [#707](https://github.com/yesodweb/wai/pull/707)
88
89## 3.2.24
90
91* Fix HTTP2 unwanted GoAways on late WindowUpdate frames.
92  [#711](https://github.com/yesodweb/wai/pull/711)
93
94## 3.2.23
95
96* Log real requsts when an app throws an error.
97  [#698](https://github.com/yesodweb/wai/pull/698)
98
99## 3.2.22
100
101* Fixing large request body in HTTP/2.
102
103## 3.2.21
104
105* Fixing HTTP/2's timeout handler in request's vault.
106
107## 3.2.20
108
109* Fixing large request body in HTTP/2
110  [#593](https://github.com/yesodweb/wai/issues/593)
111
112## 3.2.19
113
114* Fixing 0-byte request body in HTTP/2
115  [#597](https://github.com/yesodweb/wai/issues/597)
116  [#679](https://github.com/yesodweb/wai/issues/679)
117
118## 3.2.18.2
119
120* Replace dependency on `blaze-builder` with `bsb-http-chunked`
121
122## 3.2.18.1
123
124* Fix benchmark compilation [#681](https://github.com/yesodweb/wai/issues/681)
125
126## 3.2.18
127
128* Make `testWithApplicationSettings` actually use the settings passed.
129  [#677](https://github.com/yesodweb/wai/pull/677).
130
131## 3.2.17
132* Add support for windows thread block hack and closeOnExec to TLS.
133  [#674](https://github.com/yesodweb/wai/pull/674).
134
135## 3.2.16
136
137* In `testWithApplication`, don't `throwTo` ignorable exceptions
138  [#671](https://github.com/yesodweb/wai/issues/671), and
139  reuse `bindRandomPortTCP`
140
141## 3.2.15
142
143* Address space leak from exception handlers
144  [#649](https://github.com/yesodweb/wai/issues/649)
145
146## 3.2.14
147
148* Support streaming-commons 0.2
149* Warnings cleanup
150
151## 3.2.13
152
153* Tickling HTTP/2 timer. [624](https://github.com/yesodweb/wai/pull/624)
154* Guarantee atomicity of WINDOW_UPDATE increments [622](https://github.com/yesodweb/wai/pull/622)
155* Relax HTTP2 headers check [621](https://github.com/yesodweb/wai/pull/621)
156
157## 3.2.12
158
159* If an empty string is set by setServerName, the Server header is not included in response headers [#619](https://github.com/yesodweb/wai/issues/619)
160
161## 3.2.11.2
162
163* Don't throw exceptions when closing a keep-alive connection
164  [#618](https://github.com/yesodweb/wai/issues/618)
165
166## 3.2.11.1
167
168* Move exception handling to top of thread (fixes
169  [#613](https://github.com/yesodweb/wai/issues/613))
170
171## 3.2.11
172
173* Fixing 10 HTTP2 bugs pointed out by h2spec v2.
174
175## 3.2.10
176
177* Add `connFree` to `Connection`. Close socket connections on timeout triggered. Timeout exceptions extend from `SomeAsyncException`. [#602](https://github.com/yesodweb/wai/pull/602) [#605](https://github.com/yesodweb/wai/pull/605)
178
179## 3.2.9
180
181* Fixing a space leak. [#586](https://github.com/yesodweb/wai/pull/586)
182
183## 3.2.8
184
185* Fixing HTTP2 requestBodyLength. [#573](https://github.com/yesodweb/wai/pull/573)
186* Making HTTP/2 :path optional for the CONNECT method. [#572](https://github.com/yesodweb/wai/pull/572)
187* Adding new APIs for HTTP/2 trailers: http2dataTrailers and modifyHTTP2Data [#566](https://github.com/yesodweb/wai/pull/566)
188
189## 3.2.7
190
191* Adding new APIs for HTTP/2 server push: getHTTP2Data and setHTTP2Data [#510](https://github.com/yesodweb/wai/pull/510)
192* Better accept(2) error handling [#553](https://github.com/yesodweb/wai/pull/553)
193* Adding getGracefulShutdownTimeout.
194* Add {test,}withApplicationSettings [#531](https://github.com/yesodweb/wai/pull/531)
195
196## 3.2.6
197
198* Using token based APIs of http2 1.6.
199
200## 3.2.5
201
202* Ignoring errors from setSocketOption. [#526](https://github.com/yesodweb/wai/issues/526).
203
204## 3.2.4
205
206* Added `withApplication`, `testWithApplication`, and `openFreePort`
207* Fixing reaper delay value of file info cache.
208
209## 3.2.3
210
211* Using http2 v1.5.x which much improves the performance of HTTP/2.
212* To get rid of the bottleneck of ByteString's (==), a new logic to
213  compare header names is introduced.
214
215## 3.2.2
216
217* Throwing errno for pread [#499](https://github.com/yesodweb/wai/issues/499).
218* Makeing compilable on Windows [#505](https://github.com/yesodweb/wai/issues/505).
219
220## 3.2.1
221
222* Add back `warpVersion`
223
224## 3.2.0
225
226* Major version up due to breaking changes. This is because the HTTP/2 code
227  was started over with Warp 3.1.3 due to performance issue [#470](https://github.com/yesodweb/wai/issues/470).
228* runHTTP2, runHTTP2Env, runHTTP2Settings and runHTTP2SettingsSocket were removed from the Network.Wai.Handler.Warp module.
229* The performance of HTTP/2 was drastically improved. Now the performance of HTTP/2 is almost the same as that of HTTP/1.1.
230* The logic to handle files in HTTP/2 is now identical to that in HTTP/1.1.
231* Internal stuff was removed from the Network.Wai.Handler.Warp module according to [the plan](http://www.yesodweb.com/blog/2015/06/cleaning-up-warp-apis).
232
233## 3.1.12
234
235* Setting lower bound for auto-update [#495](https://github.com/yesodweb/wai/issues/495)
236
237## 3.1.11
238
239* Providing a new API: killManager.
240* Preventing space leaks due to Weak ThreadId [#488](https://github.com/yesodweb/wai/issues/488)
241* Setting upper bound for http2.
242
243## 3.1.10
244
245* `setFileInfoCacheDuration`
246* `setLogger`
247* `FileInfo`/`getFileInfo`
248* Fix: warp-tls strips out the Host request header [#478](https://github.com/yesodweb/wai/issues/478)
249
250## 3.1.9
251
252* Using the new priority queue based on PSQ provided by http2 lib again.
253
254## 3.1.8
255
256* Using the new priority queue based on PSQ provided by http2 lib.
257
258## 3.1.7
259
260* A concatenated Cookie header is prepended to the headers to ensure that it flows pseudo headers. [#454](https://github.com/yesodweb/wai/pull/454)
261* Providing a new settings: `setHTTP2Disabled` [#450](https://github.com/yesodweb/wai/pull/450)
262
263## 3.1.6
264
265* Adding back http-types 0.8 support [#449](https://github.com/yesodweb/wai/pull/449)
266
267## 3.1.5
268
269* Using	http-types v0.9.
270* Fixing build on OpenBSD. [#428](https://github.com/yesodweb/wai/pull/428) [#440](https://github.com/yesodweb/wai/pull/440)
271* Fixing build on Windows. [#438](https://github.com/yesodweb/wai/pull/438)
272
273## 3.1.4
274
275* Using newer http2 library to prevent change table size attacks.
276* API for HTTP/2 server push and trailers. [#426](https://github.com/yesodweb/wai/pull/426)
277* Preventing response splitting attacks. [#435](https://github.com/yesodweb/wai/pull/435)
278* Concatenating multiple Cookie: headers in HTTP/2.
279
280## 3.1.3
281
282* Warp now supports blaze-builder v0.4 or later only.
283* HTTP/2 code was improved: dynamic priority change, efficient queuing and sender loop continuation. [#423](https://github.com/yesodweb/wai/pull/423) [#424](https://github.com/yesodweb/wai/pull/424)
284
285## 3.1.2
286
287* Configurable Slowloris size [#418](https://github.com/yesodweb/wai/pull/418)
288
289## 3.1.1
290
291* Fixing a bug of HTTP/2 when no FD cache is used [#411](https://github.com/yesodweb/wai/pull/411)
292* Fixing a buffer-pool bug [#406](https://github.com/yesodweb/wai/pull/406) [#407](https://github.com/yesodweb/wai/pull/407)
293
294## 3.1.0
295
296* Supporting HTTP/2 [#399](https://github.com/yesodweb/wai/pull/399)
297* Cleaning up APIs [#387](https://github.com/yesodweb/wai/issues/387)
298
299## 3.0.13.1
300
301* Remove dependency on the void package [#375](https://github.com/yesodweb/wai/pull/375)
302
303## 3.0.13
304
305* Turn off file descriptor cache by default [#371](https://github.com/yesodweb/wai/issues/371)
306
307## 3.0.12.1
308
309* Fix for: HEAD requests returning non-empty entity body [#369](https://github.com/yesodweb/wai/issues/369)
310
311## 3.0.12
312
313* Only conditionally produce HTTP 100 Continue
314
315## 3.0.11
316
317* Better HEAD support for files [#357](https://github.com/yesodweb/wai/pull/357)
318
319## 3.0.10
320
321* Fix [missing `IORef` tweak](https://github.com/yesodweb/wai/issues/351)
322* Disable timeouts as soon as request body is fully consumed. This addresses
323  the common case of a non-chunked request body. Previously, we would wait
324  until a zero-length `ByteString` is returned, but that is suboptimal for some
325  cases. For more information, see [issue
326  351](https://github.com/yesodweb/wai/issues/351).
327* Add `pauseTimeout` function
328
329## 3.0.9.3
330
331* Don't serve a 416 status code for 0-length files [keter issue #75](https://github.com/snoyberg/keter/issues/75)
332* Don't serve content-length for 416 responses [#346](https://github.com/yesodweb/wai/issues/346)
333
334## 3.0.9.2
335
336Fix support for old versions of bytestring
337
338## 3.0.9.1
339
340Add support for blaze-builder 0.4
341
342## 3.0.9
343
344* Add runEnv: like run but uses $PORT [#334](https://github.com/yesodweb/wai/pull/334)
345
346## 3.0.5.2
347
348* [Pass the Request to settingsOnException handlers when available. #326](https://github.com/yesodweb/wai/pull/326)
349
350## 3.0.5
351
352Support for PROXY protocol, such as used by Amazon ELB TCP. This is useful
353since, for example, Amazon ELB HTTP does *not* have support for Websockets.
354More information on the protocol [is available from
355Amazon](http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#proxy-protocol).
356
357## 3.0.4
358
359Added `setFork`.
360
361## 3.0.3
362
363Modify flushing of request bodies. Previously, regardless of the size of the
364request body, the entire body would be flushed. When uploading large files to a
365web app that does not accept such files (e.g., returns a 413 too large status),
366browsers would still send the entire request body and the servers will still
367receive it.
368
369The new behavior is to detect if there is a large amount of data still to be
370consumed and, if so, immediately terminate the connection. In the case of
371chunked request bodies, up to a maximum number of bytes is consumed before the
372connection is terminated.
373
374This is controlled by the new setting `setMaximumBodyFlush`. A value of
375@Nothing@ will return the original behavior of flushing the entire body.
376
377## 3.0.0
378
379WAI no longer uses conduit for its streaming interface.
380
381## 2.1.0
382
383The `onOpen` and `onClose` settings now provide the `SockAddr` of the client,
384and `onOpen` can return a `Bool` which will close the connection. The
385`responseRaw` response has been added, which provides a more elegant way to
386handle WebSockets than the previous `settingsIntercept`. The old settings
387accessors have been deprecated in favor of new setters, which will allow
388settings changes to be made in the future without breaking backwards
389compatibility.
390
391## 2.0.0
392
393ResourceT is not used anymore. Request and Response is now abstract data types.
394To use their constructors, Internal module should be imported.
395
396## 1.3.9
397
398Support for byte range requests.
399
400## 1.3.7
401
402Sockets now have `FD_CLOEXEC` set on them. This behavior is more secure, and
403the change should not affect the vast majority of use cases. However, it
404appeared that this is buggy and is fixed in 2.0.0.
405