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