@@ -29,6 +29,7 @@ const server = $NativeHttps.createSecureServer({
2929 ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
3030 cert : $FS . readFileSync ( './test/certs/b.local.org/cert.pem' ) ,
3131 key : $FS . readFileSync ( './test/certs/b.local.org/key.pem' ) ,
32+ allowHTTP1 : true ,
3233} , function ( req , resp ) {
3334
3435 if ( req . method === 'GET' ) {
@@ -143,6 +144,7 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
143144 } ,
144145 method : 'POST' ,
145146 localAddress : '127.0.0.22' ,
147+ version : $Http . EVersion . ALPN ,
146148 ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
147149 data : 'Auto-detected HTTP/2' ,
148150 connectionOptions : {
@@ -170,6 +172,7 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
170172 } ,
171173 method : 'POST' ,
172174 localAddress : '127.0.0.22' ,
175+ version : $Http . EVersion . ALPN ,
173176 ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
174177 data : 'Auto-detected HTTP/2' ,
175178 connectionOptions : {
@@ -196,6 +199,7 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
196199 pathname : '/' ,
197200 } ,
198201 method : 'GET' ,
202+ version : $Http . EVersion . ALPN ,
199203 localAddress : '127.0.0.22' ,
200204 ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
201205 connectionOptions : {
@@ -214,6 +218,7 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
214218 pathname : '/' ,
215219 } ,
216220 method : 'GET' ,
221+ version : $Http . EVersion . ALPN ,
217222 localAddress : '127.0.0.22' ,
218223 ca : $FS . readFileSync ( './test/ca/cert.pem' ) ,
219224 connectionOptions : {
@@ -232,6 +237,159 @@ server.listen(SERVER_PORT, SERVER_ADDR, SERVER_BACKLOG, (): void => {
232237 console . error ( e ) ;
233238 }
234239
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+
235393 hcli . close ( ) ;
236394
237395 server . close ( ) ;
0 commit comments