[http-kit "2.2.0"]
This is the big one; the first stable http-kit release published by contributors!
This should be a non-breaking upgrade from 2.1.19 but, as always, please report any unexpected problems. Thanks!
- Peter Taoussanis (@ptaoussanis)
Changes since 2.1.19 (the last stable release published by @shenfeng)
- [#236] Server: add proxy protocol support (@tendant)
- [#283] Server: allow overwriting "Server" response header (@skazhy)
- [#285] Server: add
send-websocket-handshake!
util for pre-handshake auth, etc. - [#201] Client: add support for optional unsafe redirects (@dzaharee)
- [#275] Client: add proxy support (@davidkazlauskas, @jbristow)
- [#280 #281 #291] Client: allow https requests through proxy, tunneling (@jshaw86, @jbristow)
- [#297] Client: allow multipart entity to support byte arrays (@vincentjames501)
- [#297] Client: allow setting multipart content type (@vincentjames501)
- [#293] Client: add max connections support (@ryfow)
- [#130] Server: can now respond to
HTTP_1.1/Expect: 100-continue
headers (@valentini) - [#216] Server: optimization, remove an unnecessary operation (@songsd)
- [#217] Client: more accurate timeout handling (@mbarbon)
- [#234] Client: catch Throwable when delivering client response (@msassak)
- [#185] Client: do not set client mode on SSLEngine if already set (@izarov)
- [#261 #203] Client: updated documentation on request function (@javahippie)
- [#274 #272] Client: make HttpClient class non-final (@kumarshantanu)
- [#266] Project: fix #189 - include Java source files in the JAR (@kumarshantanu)
- [#259 #227] Server: reset decoder after starting the close handshake for the websocket server (@venantius)
- [#258 #148] Server: remind the selector to wake up (@venantius)
- [#248] Server: correctly reset fragmentedOpCode on WS frame completion (@daviesian)
- [#250] Server: omit invalid headers and prevent possible exceptions (e.g., NullPointerException) (@Chienlung)
- [#255] Server: fixed empty sequence NPE, added test (@leblowl)
- [#264 #219] Client: set SO_KEEPALIVE and TCP_NODELAY for client socket (@jruthe)
- [#264 #209] Client: clear query and form params on 301-303 redirects (@jruthe)
- [#254] Server: byteBuffer is 0-based (@Thingographist)
- [#190] Server: transfer-Encoding is only supported in HTTP Version 1.1 (@jenshaase)
[http-kit "2.2.0-beta1"]
Feature freeze: this is expected to be the final release before v2.2.0-RC1
.
Changes since
*2.2.0-alpha2
:
- [#297] Client: allow multipart entity to support byte arrays (@vincentjames501)
- [#297] Client: allow setting multipart content type (@vincentjames501)
- [#293] Client: add max connections support (@ryfow)
[http-kit "2.2.0-alpha2"]
This should be a non-breaking upgrade from 2.2.0-alpha1 but please evaluate before using in production.
Thank you to all contributors for this release!
- Peter Taoussanis (@ptaoussanis)
Listed changes are relative to 2.2.0-alpha1:
- [#275] Client: add proxy support (@davidkazlauskas, @jbristow)
- [#280 #281 #291] Client: allow https requests through proxy, tunneling (@jshaw86, @jbristow)
- [#283] Server: allow overwriting "Server" response header (@skazhy)
- [#274 #272] Make HttpClient class non-final (@kumarshantanu)
- [#190] Transfer-Encoding is only supported in HTTP Version 1.1 (@jenshaase)
[http-kit "2.2.0-alpha1"]
This is a major release that should be non-breaking but may require testing. Please evaluate before using in production (and please report any problems!).
A big thank you to all the contributors for this release!
- Peter Taoussanis (@ptaoussanis)
Listed changes are relative to 2.1.19:
- [#236] Server enhancement: add proxy protocol support (@tendant)
- [#201] Client now supports optional unsafe redirects (@dzaharee)
- [#130] Server can now respond to
HTTP_1.1/Expect: 100-continue
headers (@valentini) - [#217] More accurate timeout handling (@mbarbon)
- [#234] Catch Throwable when delivering client response (@msassak)
- [#185] Do not set client mode on SSLEngine if already set (@izarov)
- [#261 #203] Updated documentation on request function (@javahippie)
- [#266] Fix #189 - include Java source files in the JAR (@kumarshantanu)
- [#216] Server optimization: remove an unnecessary operation (@songsd)
- [#259 #227] Reset decoder after starting the close handshake for the websocket server (@venantius)
- [#258 #148] Remind the selector to wake up (@venantius)
- [#248] Correctly reset fragmentedOpCode on WS frame completion (@daviesian)
- [#250] Omit invalid headers and prevent possible exceptions (e.g., NullPointerException) (@Chienlung)
- [#255] Fixed empty sequence NPE, added test (@leblowl)
- [#264 #219] Set SO_KEEPALIVE and TCP_NODELAY for client socket (@jruthe)
- [#264 #209] Clear query and form params on 301-303 redirects (@jruthe)
- [#254] ByteBuffer is 0-based (@Thingographist)
[http-kit "2.1.21-alpha2"]
== 2.1.21-alpha1 (Clojars upload error)
HTTP Server:
- [#217] More accurate timeout handling (@mbarbon)
- [#130] Server can now respond to HTTP_1.1/Expect : 100-continue header once per request (@valentini)
HTTP Client:
- [#201] Client: option to keep "unsafe" method on redirect (@dzaharee)
[com.taoensso.forks/http-kit "2.1.20"]
This release was a temporary fork
HTTP Server:
- #86 Allow run-server being called without any opts (@djui)
- #185 Do not set client mode on SSLEngine if already set (@izarov)
- #234 Catch Throwable when delivering response (@msassak)
- #239 HTTP client: keep form params in multipart requests (@skazhy) HTTP Client: No changes
HTTP Server:
- #108 Duplicate headers cons'ed into list don't conform with ring spec
- #152 Exception when stopping server
- #155 Call on-close handlers on calling thread when threadpool is closed HTTP Client:
- #149 Added methods required for CalDAV (@robbieh)
- #157 Default HttpClient callback thread pool is always one (@dlebrero)
HTTP Server:
- #125 NPE on stop_server
- #127 only trust the computed Content-Length header
- #134 pong frame expects a ping frame as response HTTP Client:
- #127 only trust the computed Content-Length header
- #131 Fix the client handling of empty Reason-Phrase (Thanks Pyry Jahkola)
HTTP Server:
- Allow max websocket message size configurable: max-ws option
- #121 return the local-port of the server by meta HTTP Client:
- #110 Stringify headers in the client. (thanks cursork)
- #106 Fixed :multipart clobbering Authorization, User-Agent headers (thanks christianromney)
HTTP Client: follow 301, 302, 303, 307, 308 properly (thanks paulbutcher)
HTTP client:
- New feature: support automatically follow redirects
- New feature: support multipart/form-data file upload
HTTP client: Fix #98 Strange timeout bug: SocketChannel.connect() may return true if the connection is established immediately, then the OP_CONNECT event will not be triggered again. (thanks @cannedprimates)
Allow callback to be a multimethod for HTTP requests. (thanks @jaley)
Fix 84. 1. client sent Connection: Close => server, server try to streaming the response, server close the connection after first write, which makes a bad streaming. (thanks @rufoa)
the function return by calling run-server, than can be use to stop the server can now take an optional timeout(ms) param to wait existing requests to be finished, like (f :timeout 100) (thanks @gordonsyme)
fix 80: more robust websocket decoder, behave well even if client send one byte at a time
HTTP Header, properly handle multiple values with same key. fix #79
busy server with small RAM may OOM: do not fail, see #71
fix #70 follow clj-http's way of encoding URI
Accept ByteBuffer as the :body, not in the standard Ring Spec, but can make zero copy possbile, if performance is critical. Also useful if ByteBuffer get, just need to sent to another process
HTTP Server:
- Fix #68, Loop of Close frames
HTTP Client:
- Fix #60 By jjcomer, Add Oauth request header helper oauth-token
- Fix #62 Add HTTPS client
insecure?
support to allow self-signed certificates to function
HTTP Client:
- Fix #52: Form-params support dictionaries (nested param)
HTTP Client:
- Fix #52: 204 No Content responses from Jetty always timeout
- Do not add Accept header if one is already defined for the request, by Jeffrey Charles
- No need to create SSLEngine for http request
HTTP Server: Fix #47: Large websocket requests get corrupted
HTTP server:
- Fix: for IPv6 address
- Fix: HTTP streaming does not sent keep-alive header for HTTP 1.0 keep-alived request
- Saving RAM by using HeaderMap and Unsafe
- Get rid of reflection warning
HTTP client:
- Support HTTPS. ~110k of RAM for issuing a HTTPS request
- Check to make sure url host is not null, fix a possible NPE
- Output coercion: :as option, accepted :auto :text :stream :byte-array.
- application/xml is a text response
- FIX: handle buggy web servers returning non-compliant Status-Line
- Performance improvement. About 50% ~ 90% when benchmark due to IO model change: One IO thread => On thread reading, decoding + many threads writing
- Unify WebSocket and HTTP long polling/streaming with Channel protocol and with-channel (API breaks with the RC)
- WebSocket support sending and receiving binary frame with byte[]
- Support HTTP streaming
- WebSocket message ordering is guaranteed by server
- fix a possible CPU 100% usage
- cancelable timer service to allow efficient schedule job for the future
- fix a possible IndexOutOfBoundsException when writing websocket response
- package rename me.shenfeng.http => org.httpkit
- using semantic version
- more unit test
HTTP client:
- :filter option and max-body-filter
- fix potential deadlock: in async request's callback, a sync request is issued
- fix url double percent encoding issue
- fix deflated body is not properly decompressed
- fix keep-alive issue, add unit test to make sure it always works as expected
- :body can be nil, string, file, inputstream, iseq, just as ring response's body
HTTP server:
- properly pass :head and other method for :request-method
- save memory when decoding request by using a reasonable buffer size, increase as necessary
HTTP server:
- Support HTTP/1.0 keep-alive
- Better error reporting
- Better serving largest file(mmap),
:queue-size
option to protect high traffic web server- API redesign:
async-response
andif-ws-request
for better flexibility
HTTP client:
- API redesign: by using promise and callback, support both sync and async call
- Timeout per request
- Support keep-alive
- 1.2 Fix content-type for multipart/form-data
- 1.1.6 WebSocket support
- 1.1.3 Better syntax for defasync
- 1.1.1 HTTP client: allow custom ACCEPT_ENCODING, default gzip, deflate
- 1.1.0 defasync and async HTTP client clojure API
- 1.0.3 using UTF8 to encode HTTP response header: fix can not encode Chinese char