- Allow services wrapped in CORS middleware to fall through
- Don't log message about invalid CORS headers when no
Origin
header present - Soften log about invalid CORS headers from info to debug
- Call
toHttpResponse
on tasks failed withMessageFailure
s fromHttpService
, to get proper 4xx handling instead of an internal server error.
- Dispose of redirect responses in
FollowRedirect
. Fixes client deadlock under heavy load - Refrain from logging headers with potentially sensitive info in blaze-client
- Add
hashCode
andequals
toHeaders
- Make
challenge
in auth middlewares public to facilitate composing multiple auth mechanisms - Fix blaze-client detection of stale connections
- Add helpers to add cookies to requests
- Fix GZip middleware to fallthrough non-matching responses
- Fix UnsupportedOperationException in Arbitrary[Uri]
- Upgrade to Scala 2.12.1 and Scalaz 7.2.8
- Add support for Scala 2.12
- Added
Client.fromHttpService
to assist with testing. - Make all case classes final where possible, sealed where not.
- Codec for Server Sent Events (SSE)
- Added JSONP middleware
- Improve Expires header to more easily build the header and support parsing of the header
- Replce lazy
Raw.parsed
field with a simple null check - Added support for Zipkin headers
- Eliminate response attribute for detecting fallthrough response.
The fallthrough response must be
Response.fallthrough
. - Encode URI path segments created with
/
- Introduce
AuthedRequest
andAuthedService
types. - Replace
CharSequenceEncoder
withCharBufferEncoder
, assuming thatCharBuffer
andString
are the onlyCharSequence
s one would want to encode. - Remove
EnittyEncoder[Char]
andEntityEncoder[Byte]
. Send an array, buffer, or String if you want this. - Add
DefaultHead
middleware forHEAD
implementation. - Decouple
http4s-server
from Dropwizard Metrics. Metrics code is in the newhttp4s-metrics
module. - Allow custom scheduler for timeout middleware.
- Add parametric empty
EntityEncoder
andEntityEncoder[Unit]
. - Replace unlawful
Order[CharsetRange]
withEqual[CharsetRange]
. - Auth middlewares renamed
BasicAuth
andDigestAuth
. BasicAuth
passes client password to store instead of requesting password from store.- Remove realm as an argument to the basic and digest auth stores.
- Basic and digest auth stores return a parameterized type instead of just a String username.
- Upgrade to argonaut-6.2-RC2, circe-0.6.1, json4s-3.5.0
- Fix expansion of
uri
andq
macros by qualifying with_root_
- Include timeout type and duration in blaze client timeouts
- Don't use
"null"
as query string in servlet backends for requests without a query string
- Allow param names in UriTemplate to have encoded, reserved parameters
- Upgrade to blaze-0.12.1, to fix OutOfMemoryError with direct buffers
- Upgrade to Scalaz 7.1.10/7.2.6
- Upgrade to Jetty 9.3.12
- Upgrade to Tomcat 8.0.37
- Retry middleware now only retries requests with idempotent methods and pure bodies and appropriate status codes
- Fix bug where redirects followed when an effectful chunk (i.e.,
Await
) follows pure ones. - Don't uppercase two hex digits after "%25" when percent encoding.
- Tolerate invalid percent-encodings when decoding.
- Omit scoverage dependencies from POM
- Don't treat
Kill
ed responses (i.e., HEAD requests) as abnormal termination in metrics
- Fix blaze-client handling of HEAD requests
- Don't render trailing "/" for URIs with empty paths
- Avoid calling tail of empty list in
/:
extractor
- Follow 301 and 302 responses to POST with a GET request.
- Follow all redirect responses to HEAD with a HEAD request.
- Fix bug where redirect response is disposed prematurely even if not followed.
- Fix bug where payload headers are sent from original request when following a redirect with a GET or HEAD.
- Return a failed task instead of throwing when a client callback throws an exception. Fixes a resource leak.
- Always render
Date
header in GMT. - Fully support the three date formats specified by RFC 7231.
- Always specify peer information in blaze-client SSL engines
- Patch upgrades to latest async-http-client, jetty, scalaz, and scalaz-stream
- Override
getMessage
inUnexpectedStatus
- Added the possibility to specify custom responses to MessageFailures
- Address issue with Retry middleware leaking connections
- Fixed the status code for a semantically invalid request to
422 UnprocessableEntity
- Rename
json
tojsonDecoder
to reduce possibility of implicit shadowing - Introduce the
ServerApp
trait - Deprectate
onShutdown
andawaitShutdown
inServer
- Support for multipart messages
- The Path extractor for Long now supports negative numbers
- Upgrade to scalaz-stream-0.8.2(a) for compatibility with scodec-bits-1.1
- Downgrade to argonaut-6.1 (latest stable release) now that it cross builds for scalaz-7.2
- Upgrade parboiled2 for compatibility with shapeless-2.3.x
- Recalled. Use v0.14.1 instead.
- Address issue with Retry middleware leaking connections.
- Pass the reason string when setting the
Status
for a successfulParseResult
.
- Fixes the CanBuildFrom for RequestCookieJar to avoid duplicates.
- Update version of jawn-parser which contains a fix for Json decoding.
- Remove implicit resolution of
DefaultExecutor
in blaze-client.
- Add support for scalaz-7.2.x (use version 0.13.0a).
- Add a client backed based on async-http-client.
- Encode keys when rendering a query string.
- New entity decoder based on json4s' extract.
- Content-Length now accepts a Long.
- Upgrade to circe-0.3, json4s-3.3, and other patch releases.
- Fix deadlocks in blaze resulting from default executor on single-CPU machines.
- Refactor
DecodeFailure
into a newRequestFailure
hierarchy. - New methods for manipulating
UrlForm
. - All parsed headers get a
parse
method to construct them from their value. - Improve error message for unsupported media type decoding error.
- Introduce
BlazeClientConfig
class to simplify client construction. - Unify client executor service semantics between blaze-client and async-http-client.
- Update default response message for UnsupportedMediaType failures.
- Add a
lenient
flag to blazee configuration to accept illegal characters in headers. - Remove q-value from
MediaRange
andMediaType
, replaced byMediaRangeAndQValue
. - Add
address
toServer
trait. - Lazily construct request body in Servlet NIO to support HTTP 100.
- Common operations pushed down to
MessageOps
. - Fix loop in blaze-client when no connection can be established.
- Privatize most of the blaze internal types.
- Enable configuration of blaze server parser lengths.
- Add trailer support in blaze client.
- Provide an optional external executor to blaze clients.
- Fix Argonaut string interpolation
- Backport rendering of details in
ParseFailure.getMessage
Backport rendering of details inOops.ParseFailure.getMessage
- Fix bug on rejection of invalid URIs.
- Do not send
Transfer-Encoding
orContent-Length
headers for 304 and others. - Don't quote cookie values.
- Upgrade to jawn-0.8.4 to fix decoding escaped characters in JSON.
Upgrade to jawn-0.8.4 to fix decoding escaped characters in JSON.Oops.
- Encode keys as well as values when rendering a query.
- Don't encode '?' or '/' when encoding a query.
- Refactor the client API for resource safety when not reading the entire body.
- Rewrite client connection pool to support maximum concurrent connections instead of maximum idle connections.
- Optimize body collection for better connection keep-alive rate.
- Move
Service
andHttpService
, because aClient
can be viewed as aService
. - Remove custom
DateTime
in favor ofjava.time.Instant
. - Support status 451 Unavailable For Legal Reasons.
- Various blaze-client optimizations.
- Don't let Blaze
IdentityWriter
write more than Content-Length bytes. - Remove
identity
Transfer-Encoding
, which was removed in HTTP RFC errata. - In blaze,
requireClose
is now the return value ofwriteEnd
. - Remove body from
Request.toString
andResponse.toString
. - Move blaze parser into its own class.
- Trigger a disconnect if an ignored body is too long.
- Configurable thread factories for happier profiling.
- Fix possible deadlock in default client execution context.
- Blaze upgrade to fix parsing HTTP responses without a reason phrase.
- Don't write more than Content-Length bytes in blaze.
- Fix infinite loop in non-blocking Servlet I/O.
- Never write a response body on HEAD requests to blaze.
- Add missing
'&'
between multivalued k/v pairs inUrlFormCodec.encode
- Fix stack safety issue in async servlet I/O.
- Reduce noise from timeout exceptions in
ClientTimeoutStage
. - Address file descriptor leaks in blaze-client.
- Fix
FollowRedirect
middleware for 303 responses. - Support keep-alives for client requests with bodies.
- Honor
connectorPoolSize
andbufferSize
parameters inBlazeBuilder
. - Add convenient
ETag
header constructor. - Wait for final chunk to be written before closing the async context in non-blocking servlet I/O.
- Upgrade to jawn-streamz-0.7.0 to use scalaz-stream-0.8 across the board.
- Upgrade to scalaz-stream 0.8
- Add Circe JSON support module.
- Add ability to require content-type matching with EntityDecoders.
- Cleanup blaze-client internals.
- Handle empty static files.
- Add ability to disable endpoint authentication for the blaze client.
- Add charset encoding for Argonaut JSON EntityEncoder.
- Processes render data in chunked encoding by default.
- Incorporate type name into error message of QueryParam.
- Comma separate Access-Control-Allow-Methods header values.
- Default FallThrough behavior inspects for the FallThrough.fallthroughKey.
- Replace
PartialService
with theFallthrough
typeclass andorElse
syntax. - Rename
withHeaders
toreplaceAllHeaders
- Set https endpoint identification algorithm when possible.
- Stack-safe
ProcessWriter
in blaze. - Configureable number of connector threads and buffer size in blaze-server.
- Trampoline recursive calls in blaze ProcessWriter.
- Handle server hangup and body termination correctly in blaze client.
- Bump http4s-websockets to 1.0.3 to properly decode continuation opcode.
- Fix metrics incompatibility when using Jetty 9.3 backend.
- Preserve original headers when appending as opposed to quoting.
- Fix bug in servlet nio handler.
- Require Java8.
StaticFile
uses the filename extension exclusively to determine media-type.- Add
/
method toUri
. - Add
UrlFormLifter
middleware to aggregate url-form parameters with the query parameters. - Add local address information to the
Request
type. - Add a Http method 'or' (
|
) extractor. - Add
VirtualHost
middleware for serving multiple sites from one server. - Add websocket configuration to the blaze server builder.
- Redefine default timeout status code to 500.
- Redefine the
Service
arrow result fromTask[Option[_]]
toTask[_]
. - Don't extend
AllInstances
withHttp4s
omnibus import object. - Use UTF-8 as the default encoding for text bodies.
- Numerous bug fixes by numerous contributors!
- Preserve original headers when appending as opposed to quoting.
- Upgrade to jawn-0.8.3 to avoid transitive dependency on GPL2 jmh
- Honor the buffer size parameter in gzip middleware.
- Handle service exceptions in servlet backends.
- Respect asyncTimeout in servlet backends.
- Fix prefix mounting bug in blaze-server.
- Do not apply CORS headers to unsuccessful OPTIONS requests.
- Fix bug parsing IPv4 addresses found in URI construction.
- Patch instrumented handler for Jetty to time async contexts correctly.
- Fix race condition with timeout registration and route execution in blaze client
- Replace
ConcurrentHashMap
with synchronizedHashMap
instaticcontent
package. - Fix static content from jars by avoiding
"//"
in path uris when serving static content. - Quote MediaRange extensions.
- Upgrade to jawn-streamz-0.5.0 and blaze-0.8.2.
- Improve error handling in blaze-client.
- Respect the explicit default encoding passed to
decodeString
.
- Authentication middleware integrated into the server package.
- Static content tools integrated into the server package.
- Rename HttpParser to HttpHeaderParser and allow registration and removal of header parsers.
- Make UrlForm EntityDecoder implicitly resolvable.
- Relax UrlForm parser strictness.
- Add 'follow redirect' support as a client middleware.
- Add server middleware for auto retrying uris of form '/foo/' as '/foo'.
- Numerous bug fixes.
- Numerous version bumps.
- Mistake. Go straight to v0.8.1.
- Add QueryParamMatcher to the dsl which returns a ValidationNel.
- Dsl can differentiate between '/foo/' and '/foo'.
- Added http2 support for blaze backend.
- Added a metrics middleware usable on all server backends.
- Websockets are now modeled by an scalaz.stream.Exchange.
- Add
User-Agent
andAllow
header types and parsers. - Allow providing a Host header to the blaze client.
- Upgrade to scalaz-stream-7.0a.
- Added a CORS middleware.
- Numerous bug fixes.
- Numerous version bumps.
- Fix bug in Request URI on servlet backend with non-empty context or servlet paths.
- Allow provided Host header for Blaze requests.
- Avoid loading javax.servlet.WriteListener when deploying to a servlet 3.0 container.
- Forgot to pull origin before releasing. Use v0.6.4 instead.
- Use the thread pool provided to the Jetty servlet builder.
- Avoid throwing exceptions when parsing headers.
- Make trailing slash insignificant in service prefixes on servlet containers.
- Fix mapping of servlet query and mount prefix.
- Update to blaze-0.5.1
- Remove unneeded error message (90b2f76097215)
- GZip middleware will not throw an exception if the AcceptEncoding header is not gzip (ed1b2a0d68a8)
- Remove ResponseBuilder in favor of Response companion.
- Allow '';'' separators for query pairs.
- Make charset on Message an Option.
- Add a
flatMapR
method to EntityDecoder. - Various enhancements to QueryParamEncoder and QueryParamDecoder.
- Make Query an IndexedSeq.
- Add parsers for Location and Proxy-Authenticate headers.
- Move EntityDecoder.apply to
Request.decode
andRequest.decodeWith
- Move headers into
org.http4s.headers
package. - Make UriTranslation respect scriptName/pathInfo split.
- New method to resolve relative Uris.
- Encode query and fragment of Uri.
- Codec and wrapper type for URL-form-encoded bodies.
- Add SSL support to all server builders.
- Add Date header to blaze-server responses.
- Close connection when error happens during body write in blaze-server.
- Use asynchronous servlet I/O on Servlet 3.1 containers.
- ServletContext syntax for easy mounting in a WAR deployment.
- Support Dropwizard Metrics collection for servlet containers.
- Empty strings are a JSON decoding error.
- Add codec instances for Argonaut's CodecJson.
- Add codec instances for Json4s' Reader/Writer.
- New module to support Twirl templates
- Split scala-xml support into http4s-scala-xml module.
- Change inferred type of
scala.xml.Elem
toapplication/xml
.
- Support for signing oauth-1 requests in client.
- Fix blaze-client when receiving HTTP1 response without Content-Length header.
- Change default blaze-client executor to variable size.
- Fix problem with blaze-client timeouts.
- Upgrade to blaze 0.4.1 to fix header parsing issue in blaze http/1.x client and server.
- Upgrade to argonaut-6.1-M5 to match jawn. #157
- Upgrade to jawn-0.7.2. Old version of jawn was incompatible with argonaut. [#157]](http4s#157)
- Include context path in calculation of scriptName/pathInfo. #140
- Fix bug in UriTemplate for query params with multiple keys.
- Fix StackOverflowError in query parser. #147
- Allow ';' separators for query pairs.
- Client syntax has evloved and now will include Accept headers when used with EntityDecoder
- Parse JSON with jawn-streamz.
- EntityDecoder now returns an EitherT to make decoding failure explicit.
- Renamed Writable to EntityEncoder
- New query param typeclasses for encoding and decoding query strings.
- Status equality now discards the reason phrase.
- Match AttributeKeys as singletons.
- Added async timeout listener to servlet backends.
- Start blaze server asynchronously.
- Support specifying timeout and executor in blaze-client.
- Use NIO for encoding files.
- Fix whitespace parsing in Authorization header #87
Uri.query
andUri.fragment
are no longer decoded. #75
- Change HttpService form a
PartialFunction[Request,Task[Response]]
toService[Request, Response]
, a type that encapsulates aRequest => Task[Option[Response]]
- Upgrade to scalaz-stream-0.6a
- Upgrade to blaze-0.3.0
- Drop scala-logging for log4s
- Refactor ServerBuilders into an immutable builder pattern.
- Add a way to control the thread pool used for execution of a Service
- Modernize the Renderable/Renderer framework
- Change Renderable append operator from ~ to <<
- Split out the websocket codec and types into a seperate package
- Added ReplyException, an experimental way to allow an Exception to encode a default Response on for EntityDecoder etc.
- Many bug fixes and slight enhancements
- New client API with Blaze implementation
- Upgrade to scalaz-7.1.0 and scalaz-stream-0.5a
- JSON Writable support through Argonaut and json4s.
- Add EntityDecoders for parsing bodies.
- Moved request and response generators to http4s-dsl to be more flexible to other frameworks'' syntax needs.
- Phased out exception-throwing methods for the construction of various model objects in favor of disjunctions and macro-enforced literals.
- Refactored imports to match the structure followed by scalaz.
- Scala 2.11 support
- Spun off http4s-server module. http4s-core is neutral between server and the future client.
- New builder for running Blaze, Jetty, and Tomcat servers.
- Configurable timeouts in each server backend.
- Replace Chunk with scodec.bits.ByteVector.
- Many enhancements and bugfixes to URI type.
- Drop joda-time dependency for slimmer date-time class.
- Capitalized method names in http4s-dsl.
- Initial public release.