@@ -278,9 +278,13 @@ def add(self, to_add, huffman=False):
278
278
# Indexed representation.
279
279
encoded = self ._encode_indexed (index )
280
280
else :
281
- # Indexed literal. Since we have a partial match, don't add to
282
- # the header table, it won't help us.
281
+ # Indexed literal. We are going to add header to the
282
+ # header table unconditionally. It is a future todo to
283
+ # filter out headers which are known to be ineffective for
284
+ # indexing since they just take space in the table and
285
+ # pushed out other valuable headers.
283
286
encoded = self ._encode_indexed_literal (index , value , huffman )
287
+ self ._add_to_header_table (to_add )
284
288
285
289
return encoded
286
290
@@ -362,9 +366,11 @@ def _encode_literal(self, name, value, indexing, huffman=False):
362
366
363
367
def _encode_indexed_literal (self , index , value , huffman = False ):
364
368
"""
365
- Encodes a header with an indexed name and a literal value.
369
+ Encodes a header with an indexed name and a literal value and performs
370
+ incremental indexing.
366
371
"""
367
- name = encode_integer (index , 4 )
372
+ prefix = encode_integer (index , 6 )
373
+ prefix [0 ] |= 0x40
368
374
369
375
if huffman :
370
376
value = self .huffman_coder .encode (value )
@@ -374,7 +380,7 @@ def _encode_indexed_literal(self, index, value, huffman=False):
374
380
if huffman :
375
381
value_len [0 ] |= 0x80
376
382
377
- return b'' .join ([bytes (name ), bytes (value_len ), value ])
383
+ return b'' .join ([bytes (prefix ), bytes (value_len ), value ])
378
384
379
385
def _encode_table_size_change (self ):
380
386
"""
0 commit comments