All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- HTTP.jl no longer calls
close
on streams given with theresponse_stream
keyword argument toHTTP.request
and friends. If you relied on this behavior you now have to do it manually, e.g.(#543, #752, #775).io = ... HTTP.request(...; response_stream = io) close(io)
- Support for "pipelined requests" have been removed in the client implementation. The
keyword arguments to
HTTP.request
related to this feature (pipeline_limit
andreuse_limit
) are now ignored (#783).
0.9.17 - 2021-11-17
- Correctly throw an
EOFError
if the connection is closed with remaining bytes to be transferred (#778, #781).
0.9.16 - 2021-09-29
See changes for 0.9.15: this release is equivalent to 0.9.15 with #752 reverted. #752 might be included in a future breaking release instead, see #774.
0.9.15 - 2021-09-27
Note: This release have been pulled back since #752 turned out to be breaking.
- Reverted in 0.9.16
HTTP.jl no longer calls
close
on streams given with theresponse_stream
keyword argument toHTTP.request
and friends. If it is required to close the stream after the request you now have to do it manually, e.g.(#543, #752).io = ... HTTP.request(...; response_stream = io) close(io)
- The
Content-Type
header for requests withHTTP.Form
bodies is now automatically set also forPUT
requests (just likePOST
requests) (#770, #740).
- Fix faulty error messages from an internal macro (#753).
- Silence ECONNRESET errors on more systems (#547, #763, #764).
- Use
Content-Disposition
from original request in case of a 3xx response (#760, #761). - Fix cookie handling to be case-insensitive for
Set-Cookie
headers (#765, #766).
0.9.14 - 2021-08-31
- Improved memory use and performance of multipart parsing (#745).
0.9.13 - 2021-08-01
- The call stack now has a
TopLayer
inserted at the top to simplify adding new layers at the top (#737).
0.9.12 - 2021-07-01
- Fix a JSON detection issue in
HTTP.sniff
for negative numeric values (#730).
0.9.11 - 2021-06-30
- "Connection closed by peer" errors are now emitted as
Debug
-level messages (instead ofError
-level) (#727).
- Fix websocket disconnection errors (#723).
- Reduced allocations for some internals functions used for e.g. header comparison (#725).
0.9.10 - 2021-05-30
- Fix access logging to also log internal server errors (#717).
- Fix a possible crash in access logging of remote IP when the connection have been closed (#718).
0.9.9 - 2021-05-23
- Access logging functionality to
HTTP.listen
andHTTP.serve
(#713).
- Include
Host
header forCONNECT
proxy requests (#714).
0.9.8 - 2021-05-02
- URLs are now checked for missing protocol and hostname when making requests (#703).
- Fix an issue where relative HTTP 3xx redirects would not resolve the new URL correctly by upgrading the URIs dependency (#707).
- Fix automatic detection of filename in
HTTP.download
to (i) not include any query parameters and (ii) use the original request URL instead of any redirect URLs (#706).
- Improvements to internal allocation of buffers to decrease package load time (#704).
0.9.7 - 2021-04-28
- Implement
Sockets.getpeername(::HTTP.Stream)
for getting the client IP address and port from aHTTP.Stream
(#702).
0.9.6 - 2021-04-27
- New function
HTTP.statustext
for getting the string representation of a HTTP status code (#688). - New exception
ReadTimeoutError
which is thrown for request that time out (#693).
- Un-deprecate
HTTP.status
,HTTP.headers
,HTTP.body
,HTTP.method
, andHTTP.uri
(#682).
- Fixes and improvements to rate limiting in
HTTP.listen
andHTTP.serve
(#701).
0.9.5 - 2021-02-23
- Fix implicitly added
Host
header forHTTP.request
(and friends) to include the port for non-standard ports (#680).
0.9.4 - 2021-02-23
- NetworkOptions.jl's
verify_host
is now used for the default value for host verification (#678).
- Ignore
HTTP_PROXY
andHTTPS_PROXY
environment variables if they are set to the empty string (#674). - When trying to establish a connection, try all IP addresses found for the host instead of just the first one (#675).
0.9.3 - 2021-02-10
- New keyword
max_connections::Int
toHTTP.listen
for specifying maximum value of concurrent active connections (#647).
- The header
Accept: */*
is now added by default forHTTP.request
and friends (this mirrors the behavior of e.g.curl
and Python'srequest
) (#666).
0.9.2 - 2020-12-22
- If a proxy specification includes userinfo it is now added as the
Proxy-Authorization: Basic XXX
header (#640).
- Proxy specifications using the environment variables
HTTP_PROXY
/HTTPS_PROXY
are now checked, previously only the lowercase versionshttp_proxy
/https_proxy
where checked (#648).
0.9.1 - 2020-12-04
- TCP connections are now flushed on
closewrite
which can improve latency in some cases (#635). - Callbacks to
HTTP.listen
that never callsstartwrite
now throw and return500 Internal Server Error
to the client (#636). closebody
does not error if closing bytes could not be written (#546).
0.9.0 - 2020-11-12
- New keyword argument
on_shutdown::Union{Function,Vector{Function}}
toHTTP.listen
/HTTP.serve
for registering callback function to be run at server shutdown (#599). - New functions
insert_default!
andremove_default!
for inserting/removing layers in the default stack (#608). - New keyword argument
boundary
toHTTP.Form
for specifying the boundary for multipart requests (#613, #615).
- The internal
HTTP.URIs
module have been factored out to an independent package whichHTTP.jl
now depends on (#616).
- Fix a formatting bug in progress reporting in
HTTP.download
(#601). - Fix a case where bad HTTPS requests to would cause the HTTP.jl server to throw (#602).
- The correct host/port is now logged even if the server is provided with the
server
keyword argument toHTTP.listen
/HTTP.serve
(#611). - Fix some outdated internal calls that would throw when passing a
connect_timeout
toHTTP.request
and friends (#619).