release 2.6.0RC1
[m6w6/ext-http] / CHANGELOG.md
1 # ChangeLog v2
2
3 ## 2.6.0RC1, 2016-10-04
4
5 + Added http\Client\Curl\User interface for userland event loops
6 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
7 + Added http\Client::setDebug(callable $debug)
8 + Added http\Client\Curl\FEATURES constants and namespace
9 + Added http\Client\Curl\VERSIONS constants and namespace
10 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
11 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
12 + Improved configure checks for default CA bundles
13 + Improved negotiation precision
14 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
15 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
16 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
17 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
18 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
19 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
20 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
21 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
22 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
23 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
24 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
25 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
26 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
27 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
28
29 Changes from beta1:
30 * Fixed PHP-5.3 compatibility
31 * Fixed recursive calls to the event loop dispatcher
32
33 Changes from beta2:
34 * Fix bug #73055: crash in http\QueryString (Mike, @rc0r) (CVE-2016-7398)
35 * Fix bug #73185: Buffer overflow in HTTP parse_hostinfo() (Mike, @rc0r)
36 * Fix HTTP/2 version parser for older libcurl versions (Mike)
37
38 ## 2.6.0beta2, 2016-09-07
39
40 + Added http\Client\Curl\User interface for userland event loops
41 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
42 + Added http\Client::setDebug(callable $debug)
43 + Added http\Client\Curl\FEATURES constants and namespace
44 + Added http\Client\Curl\VERSIONS constants and namespace
45 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
46 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
47 + Improved configure checks for default CA bundles
48 + Improved negotiation precision
49 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
50 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
51 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
52 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
53 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
54 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
55 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
56 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
57 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
58 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
59 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
60 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
61 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
62 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
63
64 Changes from beta1:
65 * Fixed PHP-5.3 compatibility
66 * Fixed recursive calls to the event loop dispatcher
67
68 ## 2.6.0beta1, 2016-08-22
69
70 + Added http\Client\Curl\User interface for userland event loops
71 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
72 + Added http\Client::setDebug(callable $debug)
73 + Added http\Client\Curl\FEATURES constants and namespace
74 + Added http\Client\Curl\VERSIONS constants and namespace
75 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
76 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
77 + Improved configure checks for default CA bundles
78 + Improved negotiation precision
79 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
80 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
81 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
82 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
83 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
84 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
85 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
86 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
87 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
88 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
89 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
90 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
91 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
92 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
93
94 ## 2.5.6, 2016-03-09
95
96 * Fix php-bug #71719: Buffer overflow in HTTP url parsing functions (Mike, rc0r)
97 * Fix gh-issue #28: Possible null pointer dereference in php_http_url_mod() (rc0r)
98 * Fix gh-issue #22: Fix PHP5 config.w32 (Jan Ehrhardt)
99 * Fix gh-issue #20: setSslOptions notice with curl 7.43 (Mike, Vitaliy Demidov)
100
101 ## 2.5.5, 2015-12-07
102
103 * Fixed gh-issue #16: No Content-Length header with empty POST requests
104
105 ## 2.5.3, 2015-09-25
106
107 * Fixed gh-issue #12: crash on bad url passed to http\Message::setRequestUrl()
108 * The URL parser now fails on empty labels
109
110 ## 2.5.2, 2015-09-10
111
112 * Fixed regression with HEAD requests always warning about a partial file transfer
113 + Added "path_as_is" request option (libcurl >= 7.42)
114
115 ## 2.5.1, 2015-07-28
116
117 * Fixed VC11 build (Jan Erhardt)
118 * Fixed gh-issue #2: comparison of obsolete pointers in the header parser (xiaoyjy)
119 * Fixed gh-issue #6: allow RFC1738 unsafe characters in query/fragment
120 * Fixed gh-issue #7: crash with querystring and exception from error handler
121 + SSL certinfo is available for libcurl >= 7.42 with gnutls (openssl has already been since 7.19.1)
122 + Added "falsestart" SSL request option (available with libcurl >= 7.42 and darwinssl/NSS)
123 + Added "service_name" and "proxy_service_name" request options for SPNEGO (available with libcurl >= 7.43)
124 + Enabled "certinfo" transfer info on all supporting SSL backends (OpenSSL: libcurl v7.19.1, NSS: libcurl v7.34.0, GSKit: libcurl v7.39.0, GnuTLS: libcurl v7.42.0)
125
126 ## 2.5.0, 2015-07-09
127
128 + Added RFC5988 (Web Linking) support to http\Params
129 + Added http\Url::SANITIZE_PATH to default flags of http\Url::mod()
130 * Fixed overly aggressive response caching to only consider 2xx cachable
131
132 ## 2.5.0RC1, 2015-05-21
133
134 * Added RFC5988 (Web Linking) support to http\Params
135 * Added http\Url::SANITIZE_PATH to default flags of http\Url::mod()
136 * Fixed overly aggressive response chaching to only consider 2xx cachable
137
138 ## 2.4.3, 2015-04-08
139
140 * Fixed bug #69357 (HTTP/1.1 100 Continue overriding subsequent 200 response code with PUT request)
141
142 ## 2.4.2, 2015-04-03
143
144 * Fixed bug 69076 (http\Url throws Exception on empty querystring) (p at wspnr dot com)
145 * Fixed bug 69313 (http\Client doesn't send GET body)
146 + Added libidn2 and UIDNA as fallbacks for IDN support
147 - Deferred warnings/exceptions of the client, so callbacks for the currently failing requests will still be called
148
149 ## 2.4.1, 2015-03-18
150
151 * Fixed build with PHP <= 5.4 (Remi)
152
153 ## 2.4.0, 2015-03-18
154
155 * Split off pecl/apfd and pecl/json_post
156
157 ## 2.3.2, 2015-03-12
158
159 * Fixed bug with http\QueryString::offsetSet() resetting the complete query string
160
161 ## 2.3.1, 2015-03-02
162
163 * Fixed build on platforms that need stddef.h to define ptrdiff_t (e.g. CentOS 7.5)
164
165 ## 2.3.0, 2015-03-01
166
167 + Preliminiary HTTP2 support for http\Client (libcurl with nghttp2 support)
168 + Improved performance of HTTP info parser (request/response line)
169 + Improved performance of updating client observers
170 + Improved performance of http\Env\Response output to streams
171 + Improved the error messages of the header parser
172 + Added http\Header\Parser class
173 + Added http\Client::configure() method accepting an array with the following options for libcurl:
174 . maxconnects (int, size of the connection cache)
175 . max_host_connections (int, max number of connections to a single host, libcurl >= 7.30.0)
176 . max_pipeline_length (int, max number of requests in a pipeline, libcurl >= 7.30.0)
177 . max_total_connections (int, max number of simultaneous open connections of this client, libcurl >= 7.30.0)
178 . pipelining (bool, whether to enable HTTP/1.1 pipelining)
179 . chunk_length_penalty_size (int, chunk length threshold for pipelining, libcurl >= 7.30.0)
180 . content_length_penalty_size (int, size threshold for pipelining, libcurl >= 7.30.0)
181 . pipelining_server_bl (array, list of server software names to blacklist for pipelining, libcurl >= 7.30.0)
182 . pipelining_site_bl (array, list of server host names to blacklist for pipelining, libcurl >= 7.30.0)
183 . use_eventloop (bool, whether to use libevent, libcurl+libevent)
184 + Added http\Client::getAvailableOptions() and http\Client::getAvailableConfiguration() methods
185 + Added support for HTTP2 if libcurl was built with nghttp2 support.
186 + Added http\Client\Curl\HTTP_VERSION_2_0 constant (libcurl >= 7.33.0)
187 + Added http\Client\Curl\TLS_AUTH_SRP constant (libcurl >= 7.21.4)
188 + Added pinned_publickey SSL request option (libcurl >= 7.39.0)
189 + Added tlsauthtype, tlsauthuser and tlsauthpass SSL request option (libcurl >= 7.21.4)
190 + Added verifystatus (a.k.a OCSP) SSL request option (libcurl >= 7.41.0)
191 + Added proxyheader request option (libcurl >= 7.37.0)
192 + Added unix_socket_path request option (libcurl >= 7.40.0)
193 * Fixed compress request option
194 * Fixed parsing authorities of CONNECT messages
195 * Fixed parsing Content-Range messages
196 * Fixed http\Env\Response to default to chunked encoding over streams
197 * Fixed superfluous output of Content-Length:0 headers
198 * Fixed persistent easy handles to be only created for persistent multi handles
199 * Fixed the header parser to accept not-yet-complete header lines
200 * Fixed http\Message::toStream() crash in ZTS mode
201 * Fixed the message stream parser to handle intermediary data bigger than 4k
202 * Fixed the message stream parser to handle single header lines without EOL
203 * Fixed http\Message\Body to not generate stat based etags for temporary streams
204 - Deprecated http\Client::enablePipelining(), use http\Client::configure(["pipelining" => true]) instead
205 - Deprecated http\Client::enableEvents(), use http\Client::configure(["use_eventloop" => true]) instead
206 - Removed the cookies entry from the transfer info, wich was very slow and generated a Netscape formatted list of cookies
207 - Changed the header parser to reject illegal characters
208
209 Changes from RC1:
210 * Fixed a shutdown crash with chunked encoded stream responses
211
212 ## 2.3.0RC1, 2015-02-19
213
214 + Preliminiary HTTP2 support for http\Client (libcurl with nghttp2 support)
215 + Improved performance of HTTP info parser (request/response line)
216 + Improved performance of updating client observers
217 + Improved performance of http\Env\Response output to streams
218 + Improved the error messages of the header parser
219 + Added http\Header\Parser class
220 + Added http\Client::configure() method accepting an array with the following options for libcurl:
221 . maxconnects (int, size of the connection cache)
222 . max_host_connections (int, max number of connections to a single host, libcurl >= 7.30.0)
223 . max_pipeline_length (int, max number of requests in a pipeline, libcurl >= 7.30.0)
224 . max_total_connections (int, max number of simultaneous open connections of this client, libcurl >= 7.30.0)
225 . pipelining (bool, whether to enable HTTP/1.1 pipelining)
226 . chunk_length_penalty_size (int, chunk length threshold for pipelining, libcurl >= 7.30.0)
227 . content_length_penalty_size (int, size threshold for pipelining, libcurl >= 7.30.0)
228 . pipelining_server_bl (array, list of server software names to blacklist for pipelining, libcurl >= 7.30.0)
229 . pipelining_site_bl (array, list of server host names to blacklist for pipelining, libcurl >= 7.30.0)
230 . use_eventloop (bool, whether to use libevent, libcurl+libevent)
231 + Added http\Client::getAvailableOptions() and http\Client::getAvailableConfiguration() methods
232 + Added support for HTTP2 if libcurl was built with nghttp2 support.
233 + Added http\Client\Curl\HTTP_VERSION_2_0 constant (libcurl >= 7.33.0)
234 + Added http\Client\Curl\TLS_AUTH_SRP constant (libcurl >= 7.21.4)
235 + Added pinned_publickey SSL request option (libcurl >= 7.39.0)
236 + Added tlsauthtype, tlsauthuser and tlsauthpass SSL request option (libcurl >= 7.21.4)
237 + Added verifystatus (a.k.a OCSP) SSL request option (libcurl >= 7.41.0)
238 + Added proxyheader request option (libcurl >= 7.37.0)
239 + Added unix_socket_path request option (libcurl >= 7.40.0)
240 * Fixed compress request option
241 * Fixed parsing authorities of CONNECT messages
242 * Fixed parsing Content-Range messages
243 * Fixed http\Env\Response to default to chunked encoding over streams
244 * Fixed superfluous output of Content-Length:0 headers
245 * Fixed persistent easy handles to be only created for persistent multi handles
246 * Fixed the header parser to accept not-yet-complete header lines
247 * Fixed http\Message::toStream() crash in ZTS mode
248 * Fixed the message stream parser to handle intermediary data bigger than 4k
249 * Fixed the message stream parser to handle single header lines without EOL
250 * Fixed http\Message\Body to not generate stat based etags for temporary streams
251 - Deprecated http\Client::enablePipelining(), use http\Client::configure(["pipelining" => true]) instead
252 - Deprecated http\Client::enableEvents(), use http\Client::configure(["use_eventloop" => true]) instead
253 - Removed the cookies entry from the transfer info, wich was very slow and generated a Netscape formatted list of cookies
254 - Changed the header parser to reject illegal characters
255
256 ## 2.2.1, 2015-02-07
257
258 * Fixed Bug #69000 (http\Url breaks down with very long URL query strings)
259
260 ## 2.2.0, 2015-01-26
261
262 - var_dump(http\Message) no longer automatically creates an empty body
263 + Added http\Message\Parser class
264 + Made http\Client::once() and http\Client::wait() available when using events
265 + Added http\Url::PARSE_MBLOC, http\Url::PARSE_MBUTF8, http\Url::PARSE_TOIDN and http\Url::PARSE_TOPCT constants
266 + Added http\Env\Response::setCookie()
267 + Added http\Env\Request::getCookie()
268
269 ## 2.2.0RC1, 2014-11-12
270
271 - var_dump(http\Message) no longer automatically creates an empty body
272 + Added http\Message\Parser class
273 + Made http\Client::once() and http\Client::wait() available when using events
274 + Added http\Url::PARSE_MBLOC, http\Url::PARSE_MBUTF8, http\Url::PARSE_TOIDN and http\Url::PARSE_TOPCT constants
275 + Added http\Env\Response::setCookie()
276 + Added http\Env\Request::getCookie()
277
278 ## 2.1.4, 2014-11-06
279
280 * Fixed bug #68353 (QsoSSL support removed in libcurl 7.39)
281 * Fixed bug #68149 (duplicate content-length with libcurl < 7.23)
282 * Fixed bug #66891 (Unexpected HTTP 401 after NTLM authentication)
283
284 ## 2.1.3, 2014-10-16
285
286 * Fix build with libcurl < 7.26 (Remi)
287
288 ## 2.1.2, 2014-09-25
289
290 + Added missing request option constants:
291 POSTREDIR_303, AUTH_SPNEGO (libcurl >= 7.38.0), SSL_VERSION_TLSv1_{0,1,2} (libcurl >= 7.34)
292 * Fixed bug #68083 (PUT method not working after DELETE)
293 * Fixed bug #68009 (Segmentation fault after calling exit(0) after a request)
294 * Fixed bug #68000 (Extension does not build on FreeBSD)
295
296 ## 2.1.1, 2014-09-09
297
298 * Fix httpVersion retrieval on bigendian (Remi)
299 * Fix etag/crc32b on bigendian (Remi)
300
301 ## 2.1.0, 2014-09-01
302
303 - Removed port and scheme guessing of http\Url for portability
304 * Fixed PHP-5.3 compatibility
305 * Fixed PHP-5.4 compatibility
306 * Fixed possible bus error on shutdown when using events
307 * Fixed sovereignty of clients when using events
308 * Fixed a possible crash with http\Encoding\Stream\Dechunk::decode($unencoded)
309 * Fixed a leak in http\Client\Curl options
310 * Fixed bug #67733 (Compile error with libevent 2.x)
311 + Added RFC5987 support in http\Params
312 + Improved synthetic HTTP message parsing performace for ~20%
313 + Added request options if libcurl has builtin c-ares support:
314 dns_interface, dns_local_ip4, dns_local_ip6 (all libcurl >= 7.33.0)
315 + Added request options:
316 expect_100_timeout (libcurl >= 7.36.0), tcp_nodelay
317 + Added transfer info:
318 curlcode, tls_session (libcurl >= 7.34.0), only available during transfer
319
320 ## 2.1.0RC3, 2014-08-19
321
322 Changes from RC2:
323 * Fixed PHP-5.3 compatibility
324 * Fixed possible bus error on shutdown when using events
325 + Added curlcode transfer info
326 - Removed port and scheme guessing of http\Url for portability
327
328 ## 2.1.0RC2, 2014-08-05
329
330 Changes from RC1:
331 * Fixed a possible crash with http\Encoding\Stream\Dechunk::decode($unencoded)
332 * Fixed a leak in http\Client\Curl options
333 * Fixed PHP-5.4 compatibility
334
335 ## 2.1.0RC1, 2014-08-01
336
337 * Fixed bug #67733 (Compile error with libevent 2.x)
338 + Added RFC5987 support in http\Params
339 + Improved synthetic HTTP message parsing performace for ~20%
340 + Added request options if libcurl has builtin c-ares support:
341 dns_interface, dns_local_ip4, dns_local_ip6 (all libcurl >= 7.33.0)
342 + Added request options:
343 expect_100_timeout (libcurl >= 7.36.0)
344 tcp_nodelay
345 + Added transfer info:
346 tls_session (libcurl >= 7.34.0), only available during transfer
347
348 ## 2.0.7, 2014-07-11
349
350 * General improvements to the test suite
351 * Fixed http\Env\Response::send() ignoring some write errors
352 * Fixed bug #67528 (RFC compliant default user agent)
353 * Fixed a garbage collector issue with JSON POSTs
354 * Fixed refcount issue and double free of message bodies
355 * Fixed use after free if the http\Client::enqueue() closure returns TRUE
356 * Fixed bug #67584 (http\Client\Response not initialized as response on failure)
357
358 ## 2.0.6, 2014-04-24
359
360 + Added "uploaded" progress state
361 * Fixed bug #67089 (Segmentaion fault with ZTS)
362 * Fixed compatibility with PHP-5.6+
363 * Fixed re-use of request messages which content length remained untouched when the body was reset
364
365 ## 2.0.5, 2014-04-04
366
367 * Fix rare crash with uninitialized CURLOPT_HTTPHEADER
368 * Fix build with -Werror=format-security (Remi)
369 * Fix build with extenal libs needed by libcurl
370
371 ## 2.0.4, 2014-01-02
372
373 * Removed the pecl/event conflict
374 * Fixed bug #66388 (Crash on POST with Content-Length:0 and untouched body)
375
376 ## 2.0.3, 2013-12-10
377
378 * Fixed typo
379
380 ## 2.0.2, 2013-12-10
381
382 * Fixed bug #66250 (shutdown crash as shared extension)
383
384 ## 2.0.1, 2013-11-26
385
386 * Fixed a bug with multiple ob_start(http\Env\Response) while replacing the body
387 * Fixed build on Windows with libevent2
388
389 ## 2.0.0, 2013-11-22
390
391 Extended HTTP support. Again.
392
393 Keep in mind that it's got the major version 2, because it's incompatible with pecl_http v1.
394
395 ## 2.0.0beta5, 2013-08-12
396
397 Extended HTTP support. Again. Keep in mind that it's got the major version 2, because it's incompatible with pecl_http v1.
398
399 * Introduces the http namespace.
400 * Message bodies have been remodeled to use PHP temporary streams instead of in-memory buffers.
401 * The utterly misunderstood HttpResponse class has been reimplemented as http\Env\Response inheriting http\Message.
402 * Currently, there's only one Exception class left, http\Exception.
403 * Errors triggered by the extension can be configured statically by http\Object::$defaultErrorHandling or inherited http\Object->errorHandling.
404 * The request ecosystem has been modularized to support different libraries, though for the moment only libcurl is supported.
405
406 ## 2.0.0beta4, 2012-12-31
407
408 ! >80% test coverage http://goo.gl/VmyIW
409 * Fixed build with libcurl <= 7.21.3
410 * Fixed var_dump of http\Message with inherited userland properties with increased access level
411 + Added http\Header::getParams()
412 + Added simple support for escapes and quotes in the params parser
413 + Added support for sending http\Env\Response over PHP streams
414 + Added message body reference counting
415
416 ## 2.0.0beta3, 2012-12-13
417
418 ! >80% test coverage http://goo.gl/YCV74
419 * Fixed http\Env\Response throttling
420 * Fixed http\Env\Response caching by last-modified
421 * Fixed http\Message::addBody()
422 * Fixed http\Message::parentMessage write access
423 * Fixed crash with freed but not nulled event_base pointer
424 * Fixed crash with null pointer dereference on http\Encoding\Stream::flush()
425 * Fixed some memory leaks
426 + Added http\Header::negotiate()
427 + Added http\Header::parse()
428
429 ## 2.0.0beta2, 2012-11-29
430
431 ! >80% test coverage
432 * Fixed http\Request\Pool with libevent2
433 * Fixed http\Env\Request::getFiles() with multiple-file-uploads
434 * Fixed PHP-5.3 compatibility
435 * Fixed reference handling of http\Message\Body::getResource()
436 * Fixed reading stream filters to correctly detect EOF of tmp and mem streams
437 - Change: merge message headers with the same key
438 - Change: the stream message parser can optionally return after each message
439 - Change: you have to care yourself for Content headers if a message's body has a reading stream filter attached
440 + Added http\Env::getResponseStatusForAllCodes()
441
442 ## 2.0.0beta1, 2012-10-11
443
444 * PHP-5.3 compatibility by Anatoly Belsky
445 * Fixed http\Client's history handling
446 * Disallow serialization of non-serializable objects
447 * Fixed parsing of folded headers
448 * Fixed the parsing HTTP messages from streams
449 * Fixed leak in persistent handles cleanup routine
450 + Added http\Url::SANITIZE_PATH; URL paths are not sanitized by default anymore
451 + Added JSON Content-Type handler for request body processing if ext/json is present
452 + Added missing IANA HTTP response codes
453 + Added http\Message\Body::getResource()
454 + Added QueryString proxy methods to http\Env\Request
455 + Added Serializable to http\Message\Body's interfaces
456
457 ## 2.0.0alpha1, 2012-04-13
458
459 + Added http\Client\AbstractClient::request(string method, string url[, array headers=null[, mixed body=null[, array options=null]]])
460 + Added constants http\Params::PARSE_RAW, ::PARSE_DEFAULT, ::PARSE_URLENCODED, ::PARSE_DIMENSION, ::PARSE_QUERY
461 + Added fourth parameter 'flags' to http\Params' constructor, which defaults to http\Params::PARSE_DEFAULT
462 * Fixed bug #61444 (query string converts . to _ in param names)
463
464 ## 2.0.0dev10, 2012-03-30
465
466 + This release contains the http\Request to http\Client refactoring triggered by Benjamin Eberlei. Many thanks.
467
468 ## 2.0.0dev9, 2012-03-23
469
470 + Added population of $_POST and $_FILES for non-POST requests
471 - Renamed http\Env\Request::getPost() to ::getForm()
472 - Changed http\Env\Response::setContentDisposition() to take an http\Params like array as argument
473 - Removed http\Env\Response::CONTENT_DISPOSOTION_* constants
474 - Removed http\Request\Method class; request methods are now used as simple strings
475
476 ## 2.0.0dev8, 2012-03-16
477
478 * Fixed build failure and compiler warnings
479 * Fixed logical errors in http\Env\Response::isCachedBy{Etag,LastModified}()
480 * Fixed memory leaks in http\Env\Response::isCachedByLastModified()
481 * Fixed memory leaks in http\Env::getResponseHeader()
482 * Fixed erroneous trailing CRLF of http\Message strings
483 - Renamed http\Message\Body::add() to ::addForm()
484 + Added http\Message\Body::addPart(http\Message $part)
485 + Added http\Env\Response::__invoke() output buffering handler
486
487 ## 2.0.0dev7, 2012-03-09
488
489 + Added multipart support to http\Message, which can now splitMultipartBody()
490 to a http\Message chain, f.e. of a ranges response or file upload request.
491 + Added primitive quoting/escaping capabilities to http\Params.
492 + Reworked and improved negotiation support, added asterisk (*) matching etc.
493
494 ## 2.0.0dev6, 2012-03-01
495
496 + Added stream parsing capability to http\Message
497 + Added http\Env\Request methods: getQuery(), getPost(), getFiles()
498 * Changed http\Env\Response to only cache responses to GET or HEAD requests without authorization
499 * Fixed possible crash when http\Url was initialized with empty urls
500
501 ## 2.0.0dev5, 2012-02-17
502
503 * Improved test coverage [1] and fixed a lot of issues with the cookie, params, querystring,
504 persistent handles, request factory, etag, stream filters, encoding streams, negotiation
505 and HTTP message info code.
506
507 [1] http://dev.iworks.at/ext-http/lcov/ext/http/index.html
508
509 ## 2.0.0dev4, 2012-01-23
510
511 This is to become v2 of the known pecl_http extension.
512 It is completely incompatible to previous version.
513 Try it, or let it be. If you are not sure, let it be. Really.
514
515 List of changes (TBD):
516 * Everything lives below the http namespace
517 * The message body is implemented as a temp stream instead of a chunk of memory
518 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
519 * There's only http\Exception
520 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
521 * You have to use the http\Request\Factory to create your requests/pools/datashares
522
523 ## 2.0.0dev3, 2012-01-16
524
525 This is to become v2 of the known pecl_http extension.
526 It is completely incompatible to previous version.
527 Try it, or let it be. If you are not sure, let it be. Really.
528
529 List of changes (TBD):
530 * Everything lives below the http namespace
531 * The message body is implemented as a temp stream instead of a chunk of memory
532 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
533 * There's only http\Exception
534 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
535 * You have to use the http\Request\Factory to create your requests/pools/datashares
536
537 ## 2.0.0dev2, 2011-06-14
538
539 This is to become v2 of the known pecl_http extension.
540 It is completely incompatible to previous version.
541 Try it, or let it be. If you are not sure, let it be. Really.
542
543 List of changes (TBD):
544 * Everything lives below the http namespace
545 * Supported request libraries: curl, neon
546 * The message body is implemented as a temp stream instead of a chunk of memory
547 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
548 * There's only http\Exception
549 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
550
551 ## 2.0.0dev1, 2011-06-02
552
553 This is to become v2 of the known pecl_http extension.
554 It is completely incompatible to previous version.
555 Try it, or let it be. If you are not sure, let it be. Really.
556
557 List of changes (TBD):
558 * Everything lives below the http namespace
559 * Supported request libraries: curl, neon
560 * The message body is implemented as a temp stream instead of a chunk of memory
561 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
562 * There's only http\Exception
563 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself