CHANGELOG.rst (30298B)
1 Release History 2 =============== 3 4 4.1.0 (2021-10-05) 5 ------------------ 6 7 **Note:** The GitHub repository has been renamed to ``python-hyper/h2``, previously 8 was ``python-hyper/hyper-h2``. **The name of the package on PyPI is unchanged!** 9 10 API Changes (Backward-Compatible) 11 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12 13 - Support for Python 3.9 has been added. 14 - Support for Python 3.10 has been added. 15 - New example for a Python socket HTTP/2 client. 16 - New `OutputLogger` for use with ``h2.config.logger``. This is only provided 17 for convenience and not part of the stable API. 18 19 Bugfixes 20 ~~~~~~~~ 21 22 - Header validation now rejects empty header names with a ProtocolError. While 23 hpack decodes such header blocks without issues, they violate the 24 HTTP semantics. 25 - Fix TE header name in error message. 26 27 28 4.0.0 (2020-09-19) 29 ------------------ 30 31 API Changes (Backward-Incompatible) 32 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 34 - Support for Python 2.7 has been removed. 35 - Support for Python 3.4 has been removed. 36 - Support for Python 3.5 has been removed. 37 - Support for PyPy (Python 2.7 compatible) has been removed. 38 - Support for Python 3.8 has been added. 39 - Receiving DATA before HEADERS now raises a ProtocolError (see https://tools.ietf.org/html/rfc7540#section-8.1) 40 41 3.2.0 (2020-02-08) 42 ------------------ 43 44 Bugfixes 45 ~~~~~~~~ 46 47 - Receiving DATA frames on closed (or reset) streams now properly emit a 48 WINDOW_UPDATE to keep the connection flow window topped up. 49 50 API Changes (Backward-Incompatible) 51 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 52 53 - ``h2.config.logger`` now uses a `trace(...)` function, in addition 54 to `debug(...)`. If you defined a custom logger object, you need to handle 55 these new function calls. 56 57 58 3.1.1 (2019-08-02) 59 ------------------ 60 61 Bugfixes 62 ~~~~~~~~ 63 64 - Ignore WINDOW_UPDATE and RST_STREAM frames received after stream 65 closure. 66 67 68 3.1.0 (2019-01-22) 69 ------------------ 70 71 API Changes (Backward-Incompatible) 72 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 74 - ``h2.connection.H2Connection.data_to_send`` first and only argument ``amt`` 75 was renamed to ``amount``. 76 - Support for Python 3.3 has been removed. 77 78 API Changes (Backward-Compatible) 79 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 80 81 - ``h2.connection.H2Connection.send_data`` now supports ``data`` parameter 82 being a ``memoryview`` object. 83 - Refactor ping-related events: a ``h2.events.PingReceived`` event is fired 84 when a PING frame is received and a ``h2.events.PingAckReceived`` event is 85 fired when a PING frame with an ACK flag is received. 86 ``h2.events.PingAcknowledged`` is deprecated in favour of the identical 87 ``h2.events.PingAckReceived``. 88 - Added ``ENABLE_CONNECT_PROTOCOL`` to ``h2.settings.SettingCodes``. 89 - Support ``CONNECT`` requests with a ``:protocol`` pseudo header 90 thereby supporting RFC 8441. 91 - A limit to the number of closed streams kept in memory by the 92 connection is applied. It can be configured by 93 ``h2.connection.H2Connection.MAX_CLOSED_STREAMS``. 94 95 Bugfixes 96 ~~~~~~~~ 97 98 - Debug logging when stream_id is None is now fixed and no longer errors. 99 100 3.0.1 (2017-04-03) 101 ------------------ 102 103 Bugfixes 104 ~~~~~~~~ 105 106 - CONTINUATION frames sent on closed streams previously caused stream errors 107 of type STREAM_CLOSED. RFC 7540 § 6.10 requires that these be connection 108 errors of type PROTOCOL_ERROR, and so this release changes to match that 109 behaviour. 110 - Remote peers incrementing their inbound connection window beyond the maximum 111 allowed value now cause stream-level errors, rather than connection-level 112 errors, allowing connections to stay up longer. 113 - h2 now rejects receiving and sending request header blocks that are missing 114 any of the mandatory pseudo-header fields (:path, :scheme, and :method). 115 - h2 now rejects receiving and sending request header blocks that have an empty 116 :path pseudo-header value. 117 - h2 now rejects receiving and sending request header blocks that contain 118 response-only pseudo-headers, and vice versa. 119 - h2 now correct respects user-initiated changes to the HEADER_TABLE_SIZE 120 local setting, and ensures that if users shrink or increase the header 121 table size it is policed appropriately. 122 123 124 2.6.2 (2017-04-03) 125 ------------------ 126 127 Bugfixes 128 ~~~~~~~~ 129 130 - CONTINUATION frames sent on closed streams previously caused stream errors 131 of type STREAM_CLOSED. RFC 7540 § 6.10 requires that these be connection 132 errors of type PROTOCOL_ERROR, and so this release changes to match that 133 behaviour. 134 - Remote peers incrementing their inbound connection window beyond the maximum 135 allowed value now cause stream-level errors, rather than connection-level 136 errors, allowing connections to stay up longer. 137 - h2 now rejects receiving and sending request header blocks that are missing 138 any of the mandatory pseudo-header fields (:path, :scheme, and :method). 139 - h2 now rejects receiving and sending request header blocks that have an empty 140 :path pseudo-header value. 141 - h2 now rejects receiving and sending request header blocks that contain 142 response-only pseudo-headers, and vice versa. 143 - h2 now correct respects user-initiated changes to the HEADER_TABLE_SIZE 144 local setting, and ensures that if users shrink or increase the header 145 table size it is policed appropriately. 146 147 148 2.5.4 (2017-04-03) 149 ------------------ 150 151 Bugfixes 152 ~~~~~~~~ 153 154 - CONTINUATION frames sent on closed streams previously caused stream errors 155 of type STREAM_CLOSED. RFC 7540 § 6.10 requires that these be connection 156 errors of type PROTOCOL_ERROR, and so this release changes to match that 157 behaviour. 158 - Remote peers incrementing their inbound connection window beyond the maximum 159 allowed value now cause stream-level errors, rather than connection-level 160 errors, allowing connections to stay up longer. 161 - h2 now correct respects user-initiated changes to the HEADER_TABLE_SIZE 162 local setting, and ensures that if users shrink or increase the header 163 table size it is policed appropriately. 164 165 166 3.0.0 (2017-03-24) 167 ------------------ 168 169 API Changes (Backward-Incompatible) 170 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 171 172 - By default, hyper-h2 now joins together received cookie header fields, per 173 RFC 7540 Section 8.1.2.5. 174 - Added a ``normalize_inbound_headers`` flag to the ``H2Configuration`` object 175 that defaults to ``True``. Setting this to ``False`` changes the behaviour 176 from the previous point back to the v2 behaviour. 177 - Removed deprecated fields from ``h2.errors`` module. 178 - Removed deprecated fields from ``h2.settings`` module. 179 - Removed deprecated ``client_side`` and ``header_encoding`` arguments from 180 ``H2Connection``. 181 - Removed deprecated ``client_side`` and ``header_encoding`` properties from 182 ``H2Connection``. 183 - ``dict`` objects are no longer allowed for user-supplied headers. 184 - The default header encoding is now ``None``, not ``utf-8``: this means that 185 all events that carry headers now return those headers as byte strings by 186 default. The header encoding can be set back to ``utf-8`` to restore the old 187 behaviour. 188 189 API Changes (Backward-Compatible) 190 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 191 192 - Added new ``UnknownFrameReceived`` event that fires when unknown extension 193 frames have been received. This only fires when using hyperframe 5.0 or 194 later: earlier versions of hyperframe cause us to silently ignore extension 195 frames. 196 197 Bugfixes 198 ~~~~~~~~ 199 200 None 201 202 203 2.6.1 (2017-03-16) 204 ------------------ 205 206 Bugfixes 207 ~~~~~~~~ 208 209 - Allowed hyperframe v5 support while continuing to ignore unexpected frames. 210 211 212 2.5.3 (2017-03-16) 213 ------------------ 214 215 Bugfixes 216 ~~~~~~~~ 217 218 - Allowed hyperframe v5 support while continuing to ignore unexpected frames. 219 220 221 2.4.4 (2017-03-16) 222 ------------------ 223 224 Bugfixes 225 ~~~~~~~~ 226 227 - Allowed hyperframe v5 support while continuing to ignore unexpected frames. 228 229 230 2.6.0 (2017-02-28) 231 ------------------ 232 233 API Changes (Backward-Compatible) 234 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 235 236 - Added a new ``h2.events.Event`` class that acts as a base class for all 237 events. 238 - Rather than reject outbound Connection-specific headers, h2 will now 239 normalize the header block by removing them. 240 - Implement equality for the ``h2.settings.Settings`` class. 241 - Added ``h2.settings.SettingCodes``, an enum that is used to store all the 242 HTTP/2 setting codes. This allows us to use a better printed representation of 243 the setting code in most places that it is used. 244 - The ``setting`` field in ``ChangedSetting`` for the ``RemoteSettingsChanged`` 245 and ``SettingsAcknowledged`` events has been updated to be instances of 246 ``SettingCodes`` whenever they correspond to a known setting code. When they 247 are an unknown setting code, they are instead ``int``. As ``SettingCodes`` is 248 a subclass of ``int``, this is non-breaking. 249 - Deprecated the other fields in ``h2.settings``. These will be removed in 250 3.0.0. 251 - Added an optional ``pad_length`` parameter to ``H2Connection.send_data`` 252 to allow the user to include padding on a data frame. 253 - Added a new parameter to the ``h2.config.H2Configuration`` initializer which 254 takes a logger. This allows us to log by providing a logger that conforms 255 to the requirements of this module so that it can be used in different 256 environments. 257 258 Bugfixes 259 ~~~~~~~~ 260 261 - Correctly reject pushed request header blocks whenever they have malformed 262 request header blocks. 263 - Correctly normalize pushed request header blocks whenever they have 264 normalizable header fields. 265 - Remote peers are now allowed to send zero or any positive number as a value 266 for ``SETTINGS_MAX_HEADER_LIST_SIZE``, where previously sending zero would 267 raise a ``InvalidSettingsValueError``. 268 - Resolved issue where the ``HTTP2-Settings`` header value for plaintext 269 upgrade that was emitted by ``initiate_upgrade_connection`` included the 270 *entire* ``SETTINGS`` frame, instead of just the payload. 271 - Resolved issue where the ``HTTP2-Settings`` header value sent by a client for 272 plaintext upgrade would be ignored by ``initiate_upgrade_connection``, rather 273 than have those settings applied appropriately. 274 - Resolved an issue whereby certain frames received from a peer in the CLOSED 275 state would trigger connection errors when RFC 7540 says they should have 276 triggered stream errors instead. Added more detailed stream closure tracking 277 to ensure we don't throw away connections unnecessarily. 278 279 280 2.5.2 (2017-01-27) 281 ------------------ 282 283 - Resolved issue where the ``HTTP2-Settings`` header value for plaintext 284 upgrade that was emitted by ``initiate_upgrade_connection`` included the 285 *entire* ``SETTINGS`` frame, instead of just the payload. 286 - Resolved issue where the ``HTTP2-Settings`` header value sent by a client for 287 plaintext upgrade would be ignored by ``initiate_upgrade_connection``, rather 288 than have those settings applied appropriately. 289 290 291 2.4.3 (2017-01-27) 292 ------------------ 293 294 - Resolved issue where the ``HTTP2-Settings`` header value for plaintext 295 upgrade that was emitted by ``initiate_upgrade_connection`` included the 296 *entire* ``SETTINGS`` frame, instead of just the payload. 297 - Resolved issue where the ``HTTP2-Settings`` header value sent by a client for 298 plaintext upgrade would be ignored by ``initiate_upgrade_connection``, rather 299 than have those settings applied appropriately. 300 301 302 2.3.4 (2017-01-27) 303 ------------------ 304 305 - Resolved issue where the ``HTTP2-Settings`` header value for plaintext 306 upgrade that was emitted by ``initiate_upgrade_connection`` included the 307 *entire* ``SETTINGS`` frame, instead of just the payload. 308 - Resolved issue where the ``HTTP2-Settings`` header value sent by a client for 309 plaintext upgrade would be ignored by ``initiate_upgrade_connection``, rather 310 than have those settings applied appropriately. 311 312 313 2.5.1 (2016-12-17) 314 ------------------ 315 316 Bugfixes 317 ~~~~~~~~ 318 319 - Remote peers are now allowed to send zero or any positive number as a value 320 for ``SETTINGS_MAX_HEADER_LIST_SIZE``, where previously sending zero would 321 raise a ``InvalidSettingsValueError``. 322 323 324 2.5.0 (2016-10-25) 325 ------------------ 326 327 API Changes (Backward-Compatible) 328 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 329 330 - Added a new ``H2Configuration`` object that allows rich configuration of 331 a ``H2Connection``. This object supersedes the prior keyword arguments to the 332 ``H2Connection`` object, which are now deprecated and will be removed in 3.0. 333 - Added support for automated window management via the 334 ``acknowledge_received_data`` method. See the documentation for more details. 335 - Added a ``DenialOfServiceError`` that is raised whenever a behaviour that 336 looks like a DoS attempt is encountered: for example, an overly large 337 decompressed header list. This is a subclass of ``ProtocolError``. 338 - Added support for setting and managing ``SETTINGS_MAX_HEADER_LIST_SIZE``. 339 This setting is now defaulted to 64kB. 340 - Added ``h2.errors.ErrorCodes``, an enum that is used to store all the HTTP/2 341 error codes. This allows us to use a better printed representation of the 342 error code in most places that it is used. 343 - The ``error_code`` fields on ``ConnectionTerminated`` and ``StreamReset`` 344 events have been updated to be instances of ``ErrorCodes`` whenever they 345 correspond to a known error code. When they are an unknown error code, they 346 are instead ``int``. As ``ErrorCodes`` is a subclass of ``int``, this is 347 non-breaking. 348 - Deprecated the other fields in ``h2.errors``. These will be removed in 3.0.0. 349 350 Bugfixes 351 ~~~~~~~~ 352 353 - Correctly reject request header blocks with neither :authority nor Host 354 headers, or header blocks which contain mismatched :authority and Host 355 headers, per RFC 7540 Section 8.1.2.3. 356 - Correctly expect that responses to HEAD requests will have no body regardless 357 of the value of the Content-Length header, and reject those that do. 358 - Correctly refuse to send header blocks that contain neither :authority nor 359 Host headers, or header blocks which contain mismatched :authority and Host 360 headers, per RFC 7540 Section 8.1.2.3. 361 - Hyper-h2 will now reject header field names and values that contain leading 362 or trailing whitespace. 363 - Correctly strip leading/trailing whitespace from header field names and 364 values. 365 - Correctly refuse to send header blocks with a TE header whose value is not 366 ``trailers``, per RFC 7540 Section 8.1.2.2. 367 - Correctly refuse to send header blocks with connection-specific headers, 368 per RFC 7540 Section 8.1.2.2. 369 - Correctly refuse to send header blocks that contain duplicate pseudo-header 370 fields, or with pseudo-header fields that appear after ordinary header fields, 371 per RFC 7540 Section 8.1.2.1. 372 373 This may cause passing a dictionary as the header block to ``send_headers`` 374 to throw a ``ProtocolError``, because dictionaries are unordered and so they 375 may trip this check. Passing dictionaries here is deprecated, and callers 376 should change to using a sequence of 2-tuples as their header blocks. 377 - Correctly reject trailers that contain HTTP/2 pseudo-header fields, per RFC 378 7540 Section 8.1.2.1. 379 - Correctly refuse to send trailers that contain HTTP/2 pseudo-header fields, 380 per RFC 7540 Section 8.1.2.1. 381 - Correctly reject responses that do not contain the ``:status`` header field, 382 per RFC 7540 Section 8.1.2.4. 383 - Correctly refuse to send responses that do not contain the ``:status`` header 384 field, per RFC 7540 Section 8.1.2.4. 385 - Correctly update the maximum frame size when the user updates the value of 386 that setting. Prior to this release, if the user updated the maximum frame 387 size hyper-h2 would ignore the update, preventing the remote peer from using 388 the higher frame sizes. 389 390 2.4.2 (2016-10-25) 391 ------------------ 392 393 Bugfixes 394 ~~~~~~~~ 395 396 - Correctly update the maximum frame size when the user updates the value of 397 that setting. Prior to this release, if the user updated the maximum frame 398 size hyper-h2 would ignore the update, preventing the remote peer from using 399 the higher frame sizes. 400 401 2.3.3 (2016-10-25) 402 ------------------ 403 404 Bugfixes 405 ~~~~~~~~ 406 407 - Correctly update the maximum frame size when the user updates the value of 408 that setting. Prior to this release, if the user updated the maximum frame 409 size hyper-h2 would ignore the update, preventing the remote peer from using 410 the higher frame sizes. 411 412 2.2.7 (2016-10-25) 413 ------------------ 414 415 *Final 2.2.X release* 416 417 Bugfixes 418 ~~~~~~~~ 419 420 - Correctly update the maximum frame size when the user updates the value of 421 that setting. Prior to this release, if the user updated the maximum frame 422 size hyper-h2 would ignore the update, preventing the remote peer from using 423 the higher frame sizes. 424 425 2.4.1 (2016-08-23) 426 ------------------ 427 428 Bugfixes 429 ~~~~~~~~ 430 431 - Correctly expect that responses to HEAD requests will have no body regardless 432 of the value of the Content-Length header, and reject those that do. 433 434 2.3.2 (2016-08-23) 435 ------------------ 436 437 Bugfixes 438 ~~~~~~~~ 439 440 - Correctly expect that responses to HEAD requests will have no body regardless 441 of the value of the Content-Length header, and reject those that do. 442 443 2.4.0 (2016-07-01) 444 ------------------ 445 446 API Changes (Backward-Compatible) 447 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 448 449 - Adds ``additional_data`` to ``H2Connection.close_connection``, allowing the 450 user to send additional debug data on the GOAWAY frame. 451 - Adds ``last_stream_id`` to ``H2Connection.close_connection``, allowing the 452 user to manually control what the reported last stream ID is. 453 - Add new method: ``prioritize``. 454 - Add support for emitting stream priority information when sending headers 455 frames using three new keyword arguments: ``priority_weight``, 456 ``priority_depends_on``, and ``priority_exclusive``. 457 - Add support for "related events": events that fire simultaneously on a single 458 frame. 459 460 461 2.3.1 (2016-05-12) 462 ------------------ 463 464 Bugfixes 465 ~~~~~~~~ 466 467 - Resolved ``AttributeError`` encountered when receiving more than one sequence 468 of CONTINUATION frames on a given connection. 469 470 471 2.2.5 (2016-05-12) 472 ------------------ 473 474 Bugfixes 475 ~~~~~~~~ 476 477 - Resolved ``AttributeError`` encountered when receiving more than one sequence 478 of CONTINUATION frames on a given connection. 479 480 481 2.3.0 (2016-04-26) 482 ------------------ 483 484 API Changes (Backward-Compatible) 485 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 486 487 - Added a new flag to the ``H2Connection`` constructor: ``header_encoding``, 488 that controls what encoding is used (if any) to decode the headers from bytes 489 to unicode. This defaults to UTF-8 for backward compatibility. To disable the 490 decode and use bytes exclusively, set the field to False, None, or the empty 491 string. This affects all headers, including those pushed by servers. 492 - Bumped the minimum version of HPACK allowed from 2.0 to 2.2. 493 - Added support for advertising RFC 7838 Alternative services. 494 - Allowed users to provide ``hpack.HeaderTuple`` and 495 ``hpack.NeverIndexedHeaderTuple`` objects to all methods that send headers. 496 - Changed all events that carry headers to emit ``hpack.HeaderTuple`` and 497 ``hpack.NeverIndexedHeaderTuple`` instead of plain tuples. This allows users 498 to maintain header indexing state. 499 - Added support for plaintext upgrade with the ``initiate_upgrade_connection`` 500 method. 501 502 Bugfixes 503 ~~~~~~~~ 504 505 - Automatically ensure that all ``Authorization`` and ``Proxy-Authorization`` 506 headers, as well as short ``Cookie`` headers, are prevented from being added 507 to encoding contexts. 508 509 2.2.4 (2016-04-25) 510 ------------------ 511 512 Bugfixes 513 ~~~~~~~~ 514 515 - Correctly forbid pseudo-headers that were not defined in RFC 7540. 516 - Ignore AltSvc frames, rather than exploding when receiving them. 517 518 2.1.5 (2016-04-25) 519 ------------------ 520 521 *Final 2.1.X release* 522 523 Bugfixes 524 ~~~~~~~~ 525 526 - Correctly forbid pseudo-headers that were not defined in RFC 7540. 527 - Ignore AltSvc frames, rather than exploding when receiving them. 528 529 2.2.3 (2016-04-13) 530 ------------------ 531 532 Bugfixes 533 ~~~~~~~~ 534 535 - Allowed the 4.X series of hyperframe releases as dependencies. 536 537 2.1.4 (2016-04-13) 538 ------------------ 539 540 Bugfixes 541 ~~~~~~~~ 542 543 - Allowed the 4.X series of hyperframe releases as dependencies. 544 545 546 2.2.2 (2016-04-05) 547 ------------------ 548 549 Bugfixes 550 ~~~~~~~~ 551 552 - Fixed issue where informational responses were erroneously not allowed to be 553 sent in the ``HALF_CLOSED_REMOTE`` state. 554 - Fixed issue where informational responses were erroneously not allowed to be 555 received in the ``HALF_CLOSED_LOCAL`` state. 556 - Fixed issue where we allowed information responses to be sent or received 557 after final responses. 558 559 2.2.1 (2016-03-23) 560 ------------------ 561 562 Bugfixes 563 ~~~~~~~~ 564 565 - Fixed issue where users using locales that did not default to UTF-8 were 566 unable to install source distributions of the package. 567 568 2.2.0 (2016-03-23) 569 ------------------ 570 571 API Changes (Backward-Compatible) 572 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 573 574 - Added support for sending informational responses (responses with 1XX status) 575 codes as part of the standard flow. HTTP/2 allows zero or more informational 576 responses with no upper limit: hyper-h2 does too. 577 - Added support for receiving informational responses (responses with 1XX 578 status) codes as part of the standard flow. HTTP/2 allows zero or more 579 informational responses with no upper limit: hyper-h2 does too. 580 - Added a new event: ``ReceivedInformationalResponse``. This response is fired 581 when informational responses (those with 1XX status codes). 582 - Added an ``additional_data`` field to the ``ConnectionTerminated`` event that 583 carries any additional data sent on the GOAWAY frame. May be ``None`` if no 584 such data was sent. 585 - Added the ``initial_values`` optional argument to the ``Settings`` object. 586 587 Bugfixes 588 ~~~~~~~~ 589 590 - Correctly reject all of the connection-specific headers mentioned in RFC 7540 591 § 8.1.2.2, not just the ``Connection:`` header. 592 - Defaulted the value of ``SETTINGS_MAX_CONCURRENT_STREAMS`` to 100, unless 593 explicitly overridden. This is a safe defensive initial value for this 594 setting. 595 596 2.1.3 (2016-03-16) 597 ------------------ 598 599 Deprecations 600 ~~~~~~~~~~~~ 601 602 - Passing dictionaries to ``send_headers`` as the header block is deprecated, 603 and will be removed in 3.0. 604 605 2.1.2 (2016-02-17) 606 ------------------ 607 608 Bugfixes 609 ~~~~~~~~ 610 611 - Reject attempts to push streams on streams that were themselves pushed: 612 streams can only be pushed on streams that were initiated by the client. 613 - Correctly allow CONTINUATION frames to extend the header block started by a 614 PUSH_PROMISE frame. 615 - Changed our handling of frames received on streams that were reset by the 616 user. 617 618 Previously these would, at best, cause ProtocolErrors to be raised and the 619 connection to be torn down (rather defeating the point of resetting streams 620 at all) and, at worst, would cause subtle inconsistencies in state between 621 hyper-h2 and the remote peer that could lead to header block decoding errors 622 or flow control blockages. 623 624 Now when the user resets a stream all further frames received on that stream 625 are ignored except where they affect some form of connection-level state, 626 where they have their effect and are then ignored. 627 - Fixed a bug whereby receiving a PUSH_PROMISE frame on a stream that was 628 closed would cause a RST_STREAM frame to be emitted on the closed-stream, 629 but not the newly-pushed one. Now this causes a ``ProtocolError``. 630 631 2.1.1 (2016-02-05) 632 ------------------ 633 634 Bugfixes 635 ~~~~~~~~ 636 637 - Added debug representations for all events. 638 - Fixed problems with setup.py that caused trouble on older setuptools/pip 639 installs. 640 641 2.1.0 (2016-02-02) 642 ------------------ 643 644 API Changes (Backward-Compatible) 645 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 646 647 - Added new field to ``DataReceived``: ``flow_controlled_length``. This is the 648 length of the frame including padded data, allowing users to correctly track 649 changes to the flow control window. 650 - Defined new ``UnsupportedFrameError``, thrown when frames that are known to 651 hyperframe but not supported by hyper-h2 are received. For 652 backward-compatibility reasons, this is a ``ProtocolError`` *and* a 653 ``KeyError``. 654 655 Bugfixes 656 ~~~~~~~~ 657 658 - Hyper-h2 now correctly accounts for padding when maintaining flow control 659 windows. 660 - Resolved a bug where hyper-h2 would mistakenly apply 661 SETTINGS_INITIAL_WINDOW_SIZE to the connection flow control window in 662 addition to the stream-level flow control windows. 663 - Invalid Content-Length headers now throw ``ProtocolError`` exceptions and 664 correctly tear the connection down, instead of leaving the connection in an 665 indeterminate state. 666 - Invalid header blocks now throw ``ProtocolError``, rather than a grab bag of 667 possible other exceptions. 668 669 2.0.0 (2016-01-25) 670 ------------------ 671 672 API Changes (Breaking) 673 ~~~~~~~~~~~~~~~~~~~~~~ 674 675 - Attempts to open streams with invalid stream IDs, either by the remote peer 676 or by the user, are now rejected as a ``ProtocolError``. Previously these 677 were allowed, and would cause remote peers to error. 678 - Receiving frames that have invalid padding now causes the connection to be 679 terminated with a ``ProtocolError`` being raised. Previously these passed 680 undetected. 681 - Settings values set by both the user and the remote peer are now validated 682 when they're set. If they're invalid, a new ``InvalidSettingsValueError`` is 683 raised and, if set by the remote peer, a connection error is signaled. 684 Previously, it was possible to set invalid values. These would either be 685 caught when building frames, or would be allowed to stand. 686 - Settings changes no longer require user action to be acknowledged: hyper-h2 687 acknowledges them automatically. This moves the location where some 688 exceptions may be thrown, and also causes the ``acknowledge_settings`` method 689 to be removed from the public API. 690 - Removed a number of methods on the ``H2Connection`` object from the public, 691 semantically versioned API, by renaming them to have leading underscores. 692 Specifically, removed: 693 694 - ``get_stream_by_id`` 695 - ``get_or_create_stream`` 696 - ``begin_new_stream`` 697 - ``receive_frame`` 698 - ``acknowledge_settings`` 699 700 - Added full support for receiving CONTINUATION frames, including policing 701 logic about when and how they are received. Previously, receiving 702 CONTINUATION frames was not supported and would throw exceptions. 703 - All public API functions on ``H2Connection`` except for ``receive_data`` no 704 longer return lists of events, because these lists were always empty. Events 705 are now only raised by ``receive_data``. 706 - Calls to ``increment_flow_control_window`` with out of range values now raise 707 ``ValueError`` exceptions. Previously they would be allowed, or would cause 708 errors when serializing frames. 709 710 API Changes (Backward-Compatible) 711 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 712 713 - Added ``PriorityUpdated`` event for signaling priority changes. 714 - Added ``get_next_available_stream_id`` function. 715 - Receiving DATA frames on streams not in the OPEN or HALF_CLOSED_LOCAL states 716 now causes a stream reset, rather than a connection reset. The error is now 717 also classified as a ``StreamClosedError``, rather than a more generic 718 ``ProtocolError``. 719 - Receiving HEADERS or PUSH_PROMISE frames in the HALF_CLOSED_REMOTE state now 720 causes a stream reset, rather than a connection reset. 721 - Receiving frames that violate the max frame size now causes connection errors 722 with error code FRAME_SIZE_ERROR, not a generic PROTOCOL_ERROR. This 723 condition now also raises a ``FrameTooLargeError``, a new subclass of 724 ``ProtocolError``. 725 - Made ``NoSuchStreamError`` a subclass of ``ProtocolError``. 726 - The ``StreamReset`` event is now also fired whenever a protocol error from 727 the remote peer forces a stream to close early. This is only fired once. 728 - The ``StreamReset`` event now carries a flag, ``remote_reset``, that is set 729 to ``True`` in all cases where ``StreamReset`` would previously have fired 730 (e.g. when the remote peer sent a RST_STREAM), and is set to ``False`` when 731 it fires because the remote peer made a protocol error. 732 - Hyper-h2 now rejects attempts by peers to increment a flow control window by 733 zero bytes. 734 - Hyper-h2 now rejects peers sending header blocks that are ill-formed for a 735 number of reasons as set out in RFC 7540 Section 8.1.2. 736 - Attempting to send non-PRIORITY frames on closed streams now raises 737 ``StreamClosedError``. 738 - Remote peers attempting to increase the flow control window beyond 739 ``2**31 - 1``, either by window increment or by settings frame, are now 740 rejected as ``ProtocolError``. 741 - Local attempts to increase the flow control window beyond ``2**31 - 1`` by 742 window increment are now rejected as ``ProtocolError``. 743 - The bytes that represent individual settings are now available in 744 ``h2.settings``, instead of needing users to import them from hyperframe. 745 746 Bugfixes 747 ~~~~~~~~ 748 749 - RFC 7540 requires that a separate minimum stream ID be used for inbound and 750 outbound streams. Hyper-h2 now obeys this requirement. 751 - Hyper-h2 now does a better job of reporting the last stream ID it has 752 partially handled when terminating connections. 753 - Fixed an error in the arguments of ``StreamIDTooLowError``. 754 - Prevent ``ValueError`` leaking from Hyperframe. 755 - Prevent ``struct.error`` and ``InvalidFrameError`` leaking from Hyperframe. 756 757 1.1.1 (2015-11-17) 758 ------------------ 759 760 Bugfixes 761 ~~~~~~~~ 762 763 - Forcibly lowercase all header names to improve compatibility with 764 implementations that demand lower-case header names. 765 766 1.1.0 (2015-10-28) 767 ------------------ 768 769 API Changes (Backward-Compatible) 770 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 771 772 - Added a new ``ConnectionTerminated`` event, which fires when GOAWAY frames 773 are received. 774 - Added a subclass of ``NoSuchStreamError``, called ``StreamClosedError``, that 775 fires when actions are taken on a stream that is closed and has had its state 776 flushed from the system. 777 - Added ``StreamIDTooLowError``, raised when the user or the remote peer 778 attempts to create a stream with an ID lower than one previously used in the 779 dialog. Inherits from ``ValueError`` for backward-compatibility reasons. 780 781 Bugfixes 782 ~~~~~~~~ 783 784 - Do not throw ``ProtocolError`` when attempting to send multiple GOAWAY 785 frames on one connection. 786 - We no longer forcefully change the decoder table size when settings changes 787 are ACKed, instead waiting for remote acknowledgement of the change. 788 - Improve the performance of checking whether a stream is open. 789 - We now attempt to lazily garbage collect closed streams, to avoid having the 790 state hang around indefinitely, leaking memory. 791 - Avoid further per-stream allocations, leading to substantial performance 792 improvements when many short-lived streams are used. 793 794 1.0.0 (2015-10-15) 795 ------------------ 796 797 - First production release!