File: http2.xml

package info (click to toggle)
tomcat9 9.0.115-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 48,140 kB
  • sloc: java: 383,595; xml: 71,225; jsp: 4,682; sh: 1,228; perl: 324; makefile: 18; ansic: 14
file content (348 lines) | stat: -rw-r--r-- 16,008 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="http2.html">

  &project;

  <properties>
    <title>The HTTP2 Upgrade Protocol</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

<section name="Introduction">

  <p>The <strong>HTTP Upgrade Protocol</strong> element represents an
  <strong>Upgrade Protocol</strong> component that supports the HTTP/2 protocol.
  An instance of this component must be associated with an existing
  <a href="http.html">HTTP/1.1 Connector</a>.</p>

  <p>HTTP/2 connectors use non-blocking I/O, only utilising a container thread
  from the thread pool when there is data to read and write. However, because
  the Servlet API is fundamentally blocking, each HTTP/2 stream requires a
  dedicated container thread for the duration of that stream.</p>

  <p>Requests processed using HTTP/2 will have the following additional request
  attributes available:</p>
  <ul>
    <li><code>org.apache.coyote.connectionID</code> will return the HTTP/2
        connection ID</li>
    <li><code>org.apache.coyote.streamID</code> will return the HTTP/2 stream
        ID</li>
  </ul>

</section>


<section name="Attributes">

  <subsection name="Common Attributes">

  <p>All implementations of <strong>Upgrade Protocol</strong> support the
  following attributes:</p>

  <attributes>

    <attribute name="className" required="true">
      <p>This must be <code>org.apache.coyote.http2.Http2Protocol</code>.</p>
    </attribute>

  </attributes>

  </subsection>

  <subsection name="Standard Implementation">

  <p>The HTTP/2 <strong>Upgrade Protocol</strong> implementation supports the
  following attributes in addition to the common attributes listed above.</p>

  <attributes>

    <attribute name="allowedTrailerHeaders" required="false">
      <p>By default Tomcat will ignore all trailer headers when processing
      HTTP/2 connections. For a header to be processed, it must be added to this
      comma-separated list of header names.</p>
    </attribute>

    <attribute name="compressibleMimeType" required="false">
      <p>The value is a comma separated list of MIME types for which HTTP
      compression may be used.
      The default value is
      <code>
      text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
      </code>.
      </p>
    </attribute>

    <attribute name="compression" required="false">
      <p>The HTTP/2 protocol may use compression in an attempt to save server
      bandwidth. The acceptable values for the parameter is "off" (disable
      compression), "on" (allow compression, which causes text data to be
      compressed), "force" (forces compression in all cases), or a numerical
      integer value (which is equivalent to "on", but specifies the minimum
      amount of data before the output is compressed). If the content-length is
      not known and compression is set to "on" or more aggressive, the output
      will also be compressed. If not specified, this attribute is set to
      "off".</p>
      <p><em>Note</em>: There is a tradeoff between using compression (saving
      your bandwidth) and using the sendfile feature (saving your CPU cycles).
      If the connector supports the sendfile feature, e.g. the NIO2 connector,
      using sendfile will take precedence over compression. The symptoms will
      be that static files greater that 48 Kb will be sent uncompressed.
      You can turn off sendfile by setting <code>useSendfile</code> attribute
      of the protocol, as documented below, or change the sendfile usage
      threshold in the configuration of the
      <a href="../default-servlet.html">DefaultServlet</a> in the default
      <code>conf/web.xml</code> or in the <code>web.xml</code> of your web
      application.
      </p>
    </attribute>

    <attribute name="compressionMinSize" required="false">
      <p>If <strong>compression</strong> is set to "on" then this attribute
      may be used to specify the minimum amount of data before the output is
      compressed. If not specified, this attribute is defaults to "2048".</p>
    </attribute>

    <attribute name="discardRequestsAndResponses" required="false">
      <p>A boolean value which can be used to enable or disable the recycling
      of the container internal request and response processing objects. If set
      to <code>true</code> the request and response objects will be set for
      garbage collection after every request, otherwise they will be reused.
      If not specified, this attribute is set to <code>false</code>.</p>
    </attribute>

    <attribute name="initialWindowSize" required="false">
      <p>Controls the initial size of the flow control window for streams that
      Tomcat advertises to clients. If not specified, the default value of
      <code>65535</code> is used.</p>
    </attribute>

    <attribute name="keepAliveTimeout" required="false">
      <p>The time, in milliseconds, that Tomcat will wait between HTTP/2 frames
      when there is no active Stream before closing the connection. Negative
      values will be treated as an infinite timeout. If not specified, a default
      value of <code>20000</code> will be used.</p>
    </attribute>

    <attribute name="maxConcurrentStreamExecution" required="false">
      <p>The controls the maximum number of streams for any one connection that
      can be allocated threads from the container thread pool. If more streams
      are active than threads are available, those streams will have to wait
      for a stream to become available. If not specified, the default value of
      <code>20</code> will be used.</p>
    </attribute>

    <attribute name="maxConcurrentStreams" required="false">
      <p>The controls the maximum number of active streams permitted for any one
      connection. If a client attempts to open more active streams than this
      limit, the stream will be reset with a <code>STREAM_REFUSED</code> error.
      If not specified, the default value of <code>100</code> will be used.</p>
    </attribute>

    <attribute name="maxHeaderCount" required="false">
      <p>The maximum number of headers in a request that is allowed by the
      container. A request that contains more headers than the specified limit
      will be rejected. A value of less than 0 means no limit.
      If not specified, a default of 100 is used.</p>
    </attribute>

    <attribute name="maxHeaderSize" required="false">
      <p>The maximum total size for all headers in a request that is allowed by
      the container. Total size for a header is calculated as the uncompressed
      size of the header name in bytes, plus the uncompressed size of the header
      value in bytes plus an HTTP/2 overhead of 3 bytes per header. A request
      that contains a set of headers that requires more than the specified limit
      will be rejected. A value of less than 0 means no limit. If not specified,
      a default of 8192 is used.</p>
    </attribute>

    <attribute name="maxTrailerCount" required="false">
      <p>The maximum number of trailer headers in a request that is allowed by
      the container. A request that contains more trailer headers than the
      specified limit will be rejected. A value of less than 0 means no limit.
      If not specified, a default of 100 is used.</p>
    </attribute>

    <attribute name="maxTrailerSize" required="false">
      <p>The maximum total size for all trailer headers in a request that is
      allowed by the container. Total size for a header is calculated as the
      uncompressed size of the header name in bytes, plus the uncompressed size
      of the header value in bytes plus an HTTP/2 overhead of 3 bytes per
      header. A request that contains a set of trailer headers that requires
      more than the specified limit will be rejected. A value of less than 0
      means no limit. If not specified, a default of 8192 is used.</p>
    </attribute>

    <attribute name="noCompressionStrongETag" required="false">
      <p>This flag configures whether resources with a stong ETag will be
      considered for compression. If <code>true</code>, resources with a strong
      ETag will not be compressed. The default value is <code>true</code>.</p>
      <p>This attribute is deprecated. It will be removed in Tomcat 10 onwards
      where it will be hard-coded to <code>true</code>.</p>
    </attribute>

    <attribute name="noCompressionUserAgents" required="false">
      <p>The value is a regular expression (using <code>java.util.regex</code>)
      matching the <code>user-agent</code> header of HTTP clients for which
      compression should not be used,
      because these clients, although they do advertise support for the
      feature, have a broken implementation.
      The default value is an empty String (regexp matching disabled).</p>
    </attribute>

    <attribute name="overheadContinuationThreshold" required="false">
      <p>The threshold below which the payload size of a non-final
      <code>CONTINUATION</code> frame will trigger an increase in the overhead
      count (see <strong>overheadCountFactor</strong>). The overhead count will
      be increased by <code>overheadContinuationThreshold/payloadSize</code> so
      that the smaller the <code>CONTINUATION</code> frame, the greater the
      increase in the overhead count. A value of zero or less disables the
      checking of non-final <code>CONTINUATION</code> frames. If not specified,
      a default value of <code>1024</code> will be used.</p>
    </attribute>

    <attribute name="overheadCountFactor" required="false">
      <p>The factor to apply when counting overhead frames to determine if a
      connection has too high an overhead and should be closed. The overhead
      count starts at <code>-10 * overheadCountFactor</code>. The count is
      decreased by 20 for each data frame sent or received and each headers frame
      received. The count is increased by the <code>overheadCountFactor</code>
      for each setting, priority, priority update and ping frame received. If
      the overhead count exceeds zero, the connection is closed. A value of less
      than <code>1</code> disables this protection. In normal usage a value of
      approximately <code>20</code> or higher will close the connection before
      any streams can complete. If not specified, a default value of
      <code>10</code> will be used.</p>
    </attribute>

    <attribute name="overheadResetFactor" required="false">
      <p>The amount by which the overhead count (see
      <strong>overheadCountFactor</strong>) will be increased for each reset
      frame received or sent. If not specified, a default value of
      <code>50</code> will be used. A value of less than zero will be treated as
      zero.</p>
    </attribute>

    <attribute name="overheadDataThreshold" required="false">
      <p>The threshold below which the average payload size of the current and
      previous non-final <code>DATA</code> frames will trigger an increase in
      the overhead count (see <strong>overheadCountFactor</strong>). The
      overhead count will be increased by
      <code>overheadDataThreshold/average</code> so that the smaller the
      average, the greater the increase in the overhead count. A value of zero
      or less disables the checking of non-final <code>DATA</code> frames. If
      not specified, a default value of <code>1024</code> will be used.</p>
    </attribute>

    <attribute name="overheadWindowUpdateThreshold" required="false">
      <p>The threshold below which the average size of current and previous
      <code>WINDOW_UPDATE</code> frame will trigger an increase in the overhead
      count (see <strong>overheadCountFactor</strong>). The overhead count will
      be increased by <code>overheadWindowUpdateThreshold/average</code> so
      that the smaller the average, the greater the increase in the overhead
      count. A value of zero or less disables the checking of
      <code>WINDOW_UPDATE</code> frames. If not specified, a default value of
      <code>1024</code> will be used.</p>
    </attribute>

    <attribute name="readTimeout" required="false">
      <p>The time, in milliseconds, that Tomcat will wait for additional data
      when a partial HTTP/2 frame has been received. Negative values will be
      treated as an infinite timeout. If not specified, a default value of
      <code>5000</code> will be used.</p>
    </attribute>

    <attribute name="streamReadTimeout" required="false">
      <p>The time, in milliseconds, that Tomcat will wait for additional data
      frames to arrive for the stream when an application is performing a
      blocking I/O read and additional data is required. Negative values will be
      treated as an infinite timeout. If not specified, a default value of
      <code>20000</code> will be used.</p>
    </attribute>

    <attribute name="streamWriteTimeout" required="false">
      <p>The time, in milliseconds, that Tomcat will wait for additional window
      update frames to arrive for the stream and/or connection when an
      application is performing a blocking I/O write and the stream and/or
      connection flow control window is too small for the write to complete.
      Negative values will be treated as an infinite timeout. If not specified,
      a default value of <code>20000</code> will be used.</p>
    </attribute>

    <attribute name="useSendfile" required="false">
      <p>Use this boolean attribute to enable or disable sendfile capability.
      The default value is <code>true</code>.</p>
      <p>This setting is ignored, and the sendfile capability disabled, if the
      <strong>useAsyncIO</strong> attribute of the associated
      <strong>Connector</strong> is set to <code>false</code>.</p>
      <p>The HTTP/2 sendfile capability uses <a
      href="https://docs.oracle.com/javase/8/docs/api/java/nio/MappedByteBuffer.html"
      >MappedByteBuffer</a> which is known to cause file locking on Windows.</p>
    </attribute>

    <attribute name="writeTimeout" required="false">
      <p>The time, in milliseconds, that Tomcat will wait to write additional
      data when an HTTP/2 frame has been partially written. Negative values will
      be treated as an infinite timeout. If not specified, a default value of
      <code>5000</code> will be used.</p>
    </attribute>

  </attributes>

  <p>The HTTP/2 upgrade protocol will also inherit the following attributes from
  the <a href="http.html">HTTP Connector</a> within which it is nested:</p>

  <ul>
    <li>maxCookieCount</li>
    <li>maxParameterCount</li>
    <li>maxPartCount</li>
    <li>maxPartHeaderSize</li>
    <li>maxPostSize</li>
    <li>maxSavePostSize</li>
    <li>server</li>
    <li>serverRemoveAppProvidedValues</li>
  </ul>

  </subsection>

</section>

<section name="Nested Components">

  <p>This component does not support any nested components.</p>

</section>


<section name="Special Features">

  <p>This component does not support any special features.</p>

</section>

</body>

</document>