@@ -29,6 +29,7 @@ const server = $NativeHttps.createSecureServer({
29
29
ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
30
30
cert : $FS . readFileSync ( './test/certs/b.local.org/cert.pem' ) ,
31
31
key : $FS . readFileSync ( './test/certs/b.local.org/key.pem' ) ,
32
+ allowHTTP1 : true ,
32
33
} , function ( req , resp ) {
33
34
34
35
if ( req . method === 'GET' ) {
@@ -143,6 +144,7 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
143
144
} ,
144
145
method : 'POST' ,
145
146
localAddress : '127.0.0.22' ,
147
+ version : $Http . EVersion . ALPN ,
146
148
ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
147
149
data : 'Auto-detected HTTP/2' ,
148
150
connectionOptions : {
@@ -170,6 +172,7 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
170
172
} ,
171
173
method : 'POST' ,
172
174
localAddress : '127.0.0.22' ,
175
+ version : $Http . EVersion . ALPN ,
173
176
ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
174
177
data : 'Auto-detected HTTP/2' ,
175
178
connectionOptions : {
@@ -196,6 +199,7 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
196
199
pathname : '/' ,
197
200
} ,
198
201
method : 'GET' ,
202
+ version : $Http . EVersion . ALPN ,
199
203
localAddress : '127.0.0.22' ,
200
204
ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
201
205
connectionOptions : {
@@ -214,6 +218,7 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
214
218
pathname : '/' ,
215
219
} ,
216
220
method : 'GET' ,
221
+ version : $Http . EVersion . ALPN ,
217
222
localAddress : '127.0.0.22' ,
218
223
ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
219
224
connectionOptions : {
@@ -232,6 +237,159 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
232
237
console . error ( e ) ;
233
238
}
234
239
240
+ req = await hcli . request ( {
241
+ url : {
242
+ protocol : 'https' ,
243
+ hostname : SERVER_HOST ,
244
+ port : SERVER_PORT ,
245
+ pathname : '/' ,
246
+ } ,
247
+ method : 'GET' ,
248
+ // version: $Http.EVersion.ALPN, // should use HTTP/1.1 by default here
249
+ localAddress : '127.0.0.22' ,
250
+ ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
251
+ connectionOptions : {
252
+ remoteHost : SERVER_ADDR
253
+ }
254
+ } ) ;
255
+
256
+ try {
257
+
258
+ console . log ( `HTTP/${ req . protocol === $Http . EProtocol . HTTP_1 ? '1.1' : '2' } ${ req . statusCode } ` ) ;
259
+ console . log ( ( await req . getBuffer ( ) ) . toString ( ) ) ;
260
+ }
261
+ catch ( e ) {
262
+
263
+ console . error ( e ) ;
264
+ }
265
+
266
+ hcli . filters . register ( { // now force to use ALPN
267
+ name : 'pre_request' ,
268
+ key : 'force_alpn' ,
269
+ callback : ( req ) => {
270
+ req . version = $Http . EVersion . ALPN ;
271
+ return req ;
272
+ }
273
+ } ) ;
274
+
275
+ req = await hcli . request ( {
276
+ url : {
277
+ protocol : 'https' ,
278
+ hostname : SERVER_HOST ,
279
+ port : SERVER_PORT ,
280
+ pathname : '/' ,
281
+ } ,
282
+ method : 'GET' ,
283
+ localAddress : '127.0.0.22' ,
284
+ ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
285
+ connectionOptions : {
286
+ remoteHost : SERVER_ADDR
287
+ }
288
+ } ) ;
289
+
290
+ try {
291
+
292
+ console . log ( `HTTP/${ req . protocol === $Http . EProtocol . HTTP_1 ? '1.1' : '2' } ${ req . statusCode } ` ) ;
293
+ console . log ( ( await req . getBuffer ( ) ) . toString ( ) ) ;
294
+
295
+ }
296
+ catch ( e ) {
297
+
298
+ console . error ( e ) ;
299
+ }
300
+
301
+ req = await hcli . request ( {
302
+ url : {
303
+ protocol : 'https' ,
304
+ hostname : SERVER_HOST ,
305
+ port : SERVER_PORT ,
306
+ pathname : '/' ,
307
+ } ,
308
+ method : 'GET' ,
309
+ localAddress : '127.0.0.22' ,
310
+ version : $Http . EVersion . HTTP_1_1 , // will be ignored
311
+ ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
312
+ connectionOptions : {
313
+ remoteHost : SERVER_ADDR
314
+ }
315
+ } ) ;
316
+
317
+ try {
318
+
319
+ console . log ( `HTTP/${ req . protocol === $Http . EProtocol . HTTP_1 ? '1.1' : '2' } ${ req . statusCode } ` ) ;
320
+ console . log ( ( await req . getBuffer ( ) ) . toString ( ) ) ;
321
+
322
+ }
323
+ catch ( e ) {
324
+
325
+ console . error ( e ) ;
326
+ }
327
+
328
+ hcli . filters . unregister ( 'pre_request' , 'force_alpn' ) ;
329
+
330
+ hcli . filters . register ( { // now make ALPN as default
331
+ name : 'pre_args' ,
332
+ key : 'default_version' ,
333
+ callback : ( req ) => {
334
+ req . version ??= $Http . EVersion . ALPN ;
335
+ return req ;
336
+ }
337
+ } ) ;
338
+
339
+ req = await hcli . request ( {
340
+ url : {
341
+ protocol : 'https' ,
342
+ hostname : SERVER_HOST ,
343
+ port : SERVER_PORT ,
344
+ pathname : '/' ,
345
+ } ,
346
+ method : 'GET' ,
347
+ localAddress : '127.0.0.22' ,
348
+ ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
349
+ // version: $Http.EVersion.ALPN, // will use ALPN by default
350
+ connectionOptions : {
351
+ remoteHost : SERVER_ADDR
352
+ }
353
+ } ) ;
354
+
355
+ try {
356
+
357
+ console . log ( `HTTP/${ req . protocol === $Http . EProtocol . HTTP_1 ? '1.1' : '2' } ${ req . statusCode } ` ) ;
358
+ console . log ( ( await req . getBuffer ( ) ) . toString ( ) ) ;
359
+
360
+ }
361
+ catch ( e ) {
362
+
363
+ console . error ( e ) ;
364
+ }
365
+
366
+ req = await hcli . request ( {
367
+ url : {
368
+ protocol : 'https' ,
369
+ hostname : SERVER_HOST ,
370
+ port : SERVER_PORT ,
371
+ pathname : '/' ,
372
+ } ,
373
+ method : 'GET' ,
374
+ localAddress : '127.0.0.22' ,
375
+ version : $Http . EVersion . HTTP_1_1 , // will use 1.1
376
+ ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
377
+ connectionOptions : {
378
+ remoteHost : SERVER_ADDR
379
+ }
380
+ } ) ;
381
+
382
+ try {
383
+
384
+ console . log ( `HTTP/${ req . protocol === $Http . EProtocol . HTTP_1 ? '1.1' : '2' } ${ req . statusCode } ` ) ;
385
+ console . log ( ( await req . getBuffer ( ) ) . toString ( ) ) ;
386
+
387
+ }
388
+ catch ( e ) {
389
+
390
+ console . error ( e ) ;
391
+ }
392
+
235
393
hcli . close ( ) ;
236
394
237
395
server . close ( ) ;
0 commit comments