================================================================================
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
================================================================================

Notes of things to consider for the next major Tomcat release (10.0.x)

Items carried over from the 9.0.x list:

1.  Remove the use of system properties to control configuration wherever
    possible.

2.  Reduce instances of setters and getters for the same property existing on an
    object and its parent. This may require new objects to be exposed via JMX.

New items for 10.0.0.x onwards:

 1.  Remove APR connector.

 2.  Remove org.apache.tomcat.jni and replace with the minimum necessary to
     interface with OpenSSL and clones.
     We might want to park this one until we see what is available direct from
     the JRE with project Panama.

 3.  Clean-up content-type header processing. Remove the optional space after
     the ';' character (if any). Don't mutate the header if there is no charset
     parameter. See BZ 62912 for some discussion and additional references.

 4.  Consider applying the delayed log file opening (until there is something to
     log). See BZ 53620.

 5. Consider including
    <request-character-encoding>UTF-8</request-character-encoding>
    in conf/web.xml

 6. Consider including
    <response-character-encoding>UTF-8</response-character-encoding>
    in conf/web.xml

 7. RFC 3986 states (section 2.2) that a %nn encoded delimiter is NOT equivalent
    to the decoded form. Provide an option not to decode delimiters in %nn form.

 8. BZ 56966. Refactor internal request timing to use System.nanoTime()

 9. BZ 63286. Make behaviour of %D and %T consistent with httpd.

10. Refactor DefaultServlet to use Ranges in parseRanges().

11. Consider disabling the AJP connector by default.

12. Share configuration between HTTP/1.1 and nested HTTP/2 rather than duplicating.


Deferred until 10.0.x:

 1.  Remove the ExtensionValidator and associated classes (assuming that the
     minimum Java version is Java 9 or later).

