@@ -68,16 +68,16 @@ export default {
6868 const 反代上下文 = await 反代参数获取 ( url , userID , 默认反代IP , 默认反代兜底 ) ;
6969 log ( `[WebSocket] 命中请求: ${ url . pathname } ${ url . search } ` ) ;
7070 return await 处理WS请求 ( request , userID , url , 反代上下文 ) ;
71- } else if ( 管理员密码 && ! 访问路径 . startsWith ( 'admin/' ) && 访问路径 !== 'login' && request . method === 'POST' ) { // gRPC/XHTTP代理
71+ } else if ( 管理员密码 && ! 访问路径 . startsWith ( 'admin/' ) && 访问路径 !== 'login' && request . method === 'POST' ) { // gRPC/叉HTTP代理
7272 const 反代上下文 = await 反代参数获取 ( url , userID , 默认反代IP , 默认反代兜底 ) ;
73- const { 头 : 本机Padding头 , 键 : 本机Padding键 } = 获取XHTTPPadding标识 ( userID ) ;
74- const 命中XHTTP特征 = ! ! request . headers . get ( 本机Padding头 ) || ! ! url . searchParams . get ( 本机Padding键 ) ;
75- if ( ! 命中XHTTP特征 && contentType . startsWith ( 'application/grpc' ) ) {
73+ const { 头 : 本机Padding头 , 键 : 本机Padding键 } = 获取叉HTTPPadding标识 ( userID ) ;
74+ const 命中叉HTTP特征 = ! ! request . headers . get ( 本机Padding头 ) || ! ! url . searchParams . get ( 本机Padding键 ) ;
75+ if ( ! 命中叉HTTP特征 && contentType . startsWith ( 'application/grpc' ) ) {
7676 log ( `[gRPC] 命中请求: ${ url . pathname } ${ url . search } ` ) ;
7777 return await 处理gRPC请求 ( request , userID , 反代上下文 ) ;
7878 }
79- log ( `[XHTTP ] 命中请求: ${ url . pathname } ${ url . search } ` ) ;
80- return await 处理XHTTP请求 ( request , userID , 反代上下文 ) ;
79+ log ( `[叉HTTP ] 命中请求: ${ url . pathname } ${ url . search } ` ) ;
80+ return await 处理叉HTTP请求 ( request , userID , 反代上下文 ) ;
8181 } else {
8282 if ( url . protocol === 'http:' ) return Response . redirect ( url . href . replace ( `http://${ url . hostname } ` , `https://${ url . hostname } ` ) , 301 ) ;
8383 if ( ! 管理员密码 ) return fetch ( Pages静态页面 + '/noADMIN' ) . then ( r => { const headers = new Headers ( r . headers ) ; headers . set ( 'Cache-Control' , 'no-store, no-cache, must-revalidate, proxy-revalidate' ) ; headers . set ( 'Pragma' , 'no-cache' ) ; headers . set ( 'Expires' , '0' ) ; return new Response ( r . body , { status : 404 , statusText : r . statusText , headers } ) } ) ;
@@ -527,7 +527,7 @@ export default {
527527 return new Response ( await nginx ( ) , { status : 200 , headers : { 'Content-Type' : 'text/html; charset=UTF-8' } } ) ;
528528 }
529529} ;
530- ///////////////////////////////////////////////////////////////////////XHTTP传输数据 ///////////////////////////////////////////////
530+ ///////////////////////////////////////////////////////////////////////叉HTTP传输数据 ///////////////////////////////////////////////
531531const HPACKHuffman码长 = [
532532 13 , 23 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 24 , 30 , 28 , 28 , 30 , 28 , 28 ,
533533 28 , 28 , 28 , 28 , 28 , 28 , 30 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 ,
@@ -548,7 +548,7 @@ const HPACKHuffman码长 = [
548548 30
549549] ;
550550
551- function 获取XHTTPPadding标识 ( yourUUID ) {
551+ function 获取叉HTTPPadding标识 ( yourUUID ) {
552552 return { 头 : yourUUID . slice ( 1 , 7 ) , 键 : '_' + yourUUID . slice ( 1 , 7 ) } ;
553553}
554554
@@ -561,7 +561,7 @@ function 计算HPACKHuffman字节长度(字符串) {
561561 return Math . ceil ( 总位数 / 8 ) ;
562562}
563563
564- function 提取XHTTPPadding值 ( request , 本机Padding头 , 本机Padding键 ) {
564+ function 提取叉HTTPPadding值 ( request , 本机Padding头 , 本机Padding键 ) {
565565 const 头值 = request . headers . get ( 本机Padding头 ) ;
566566 if ( 头值 ) {
567567 try {
@@ -575,29 +575,29 @@ function 提取XHTTPPadding值(request, 本机Padding头, 本机Padding键) {
575575 return 请求URL . searchParams . get ( 本机Padding键 ) || '' ;
576576}
577577
578- function 校验XHTTPPadding ( request , 本机Padding头 , 本机Padding键 ) {
579- const padding值 = 提取XHTTPPadding值 ( request , 本机Padding头 , 本机Padding键 ) ;
578+ function 校验叉HTTPPadding ( request , 本机Padding头 , 本机Padding键 ) {
579+ const padding值 = 提取叉HTTPPadding值 ( request , 本机Padding头 , 本机Padding键 ) ;
580580 if ( ! padding值 ) return true ;
581581 const huffman长度 = 计算HPACKHuffman字节长度 ( padding值 ) ;
582582 return huffman长度 >= 98 && huffman长度 <= 1002 ;
583583}
584584
585- const XHTTPBase62字符集 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ;
586- function 生成XHTTPPadding串 ( 长度 ) {
587- const 字符集长度 = XHTTPBase62字符集 . length ;
585+ const 叉HTTPBase62字符集 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ;
586+ function 生成叉HTTPPadding串 ( 长度 ) {
587+ const 字符集长度 = 叉HTTPBase62字符集 . length ;
588588 let 结果 = '' ;
589589 for ( let i = 0 ; i < 长度 ; i ++ ) {
590- 结果 += XHTTPBase62字符集 [ Math . floor ( Math . random ( ) * 字符集长度 ) ] ;
590+ 结果 += 叉HTTPBase62字符集 [ Math . floor ( Math . random ( ) * 字符集长度 ) ] ;
591591 }
592592 return 结果 ;
593593}
594594
595- async function 处理XHTTP请求 ( request , yourUUID , 反代上下文 = { } ) {
595+ async function 处理叉HTTP请求 ( request , yourUUID , 反代上下文 = { } ) {
596596 if ( ! request . body ) return new Response ( 'Bad Request' , { status : 400 } ) ;
597- const { 头 : 本机Padding头 , 键 : 本机Padding键 } = 获取XHTTPPadding标识 ( yourUUID ) ;
598- if ( ! 校验XHTTPPadding ( request , 本机Padding头 , 本机Padding键 ) ) return new Response ( 'Bad Request' , { status : 400 } ) ;
597+ const { 头 : 本机Padding头 , 键 : 本机Padding键 } = 获取叉HTTPPadding标识 ( yourUUID ) ;
598+ if ( ! 校验叉HTTPPadding ( request , 本机Padding头 , 本机Padding键 ) ) return new Response ( 'Bad Request' , { status : 400 } ) ;
599599 const reader = request . body . getReader ( ) ;
600- const 首包 = await 读取XHTTP首包 ( reader , yourUUID ) ;
600+ const 首包 = await 读取叉HTTP首包 ( reader , yourUUID ) ;
601601 if ( ! 首包 ) {
602602 try { reader . releaseLock ( ) } catch ( e ) { }
603603 return new Response ( 'Invalid request' , { status : 400 } ) ;
@@ -626,11 +626,11 @@ async function 处理XHTTP请求(request, yourUUID, 反代上下文 = {}) {
626626
627627 try {
628628 const 响应URL = new URL ( 'https://x.invalid/' ) ;
629- 响应URL . searchParams . set ( 本机Padding键 , 生成XHTTPPadding串 ( 100 + Math . floor ( Math . random ( ) * 901 ) ) ) ;
629+ 响应URL . searchParams . set ( 本机Padding键 , 生成叉HTTPPadding串 ( 100 + Math . floor ( Math . random ( ) * 901 ) ) ) ;
630630 responseHeaders . set ( 本机Padding头 , 响应URL . toString ( ) ) ;
631631 } catch ( e ) { }
632632
633- if ( 首包 . isUDP ) return 处理XHTTPUDP请求 ( 首包 , reader , request , 反代上下文 , responseHeaders ) ;
633+ if ( 首包 . isUDP ) return 处理叉HTTPUDP请求 ( 首包 , reader , request , 反代上下文 , responseHeaders ) ;
634634
635635 try { reader . releaseLock ( ) } catch ( e ) { }
636636
@@ -650,7 +650,7 @@ async function 处理XHTTP请求(request, yourUUID, 反代上下文 = {}) {
650650 try {
651651 socket = await forwardataTCP ( 首包 . hostname , 首包 . port , 首包 . rawData , 占位WS , 首包 . respHeader , remoteConnWrapper , yourUUID , request , 反代上下文 , 首包 . 协议 === 'trojan' , 首包 . 原始数据 , true ) ;
652652 } catch ( err ) {
653- log ( `[XHTTP -Pipe] 连接失败: ${ err ?. message || err } ` ) ;
653+ log ( `[叉HTTP -Pipe] 连接失败: ${ err ?. message || err } ` ) ;
654654 清理 ( err ) ;
655655 return new Response ( 'bad gateway' , { status : 502 } ) ;
656656 }
@@ -686,7 +686,7 @@ async function 处理XHTTP请求(request, yourUUID, 反代上下文 = {}) {
686686 return new Response ( 响应流 . readable , { status : 200 , headers : responseHeaders } ) ;
687687}
688688
689- function 处理XHTTPUDP请求 ( 首包 , reader , request , 反代上下文 , responseHeaders ) {
689+ function 处理叉HTTPUDP请求 ( 首包 , reader , request , 反代上下文 , responseHeaders ) {
690690 const 木马UDP上下文 = { 缓存 : new Uint8Array ( 0 ) , 反代地址 : 反代上下文 . 木马反代地址 } ;
691691 return new Response ( new ReadableStream ( {
692692 async start ( controller ) {
@@ -739,7 +739,7 @@ function 处理XHTTPUDP请求(首包, reader, request, 反代上下文, response
739739 }
740740 } catch ( err ) {
741741 转发失败 = true ;
742- log ( `[XHTTP转发 ] 处理失败: ${ err ?. message || err } ` ) ;
742+ log ( `[叉HTTP转发 ] 处理失败: ${ err ?. message || err } ` ) ;
743743 closeSocketQuietly ( 叉桥 ) ;
744744 } finally {
745745 const 保持木马UDP反代下行 = ! 转发失败 && 首包 . 协议 === 'trojan' && 木马UDP上下文 . 反代地址 && 木马UDP上下文 . 反代Socket ;
@@ -790,7 +790,7 @@ function 开始TCP连接世代(remoteConnWrapper) {
790790 return { generation, downlinkDrain } ;
791791}
792792
793- async function 读取XHTTP首包 ( reader , token ) {
793+ async function 读取叉HTTP首包 ( reader , token ) {
794794 const decoder = VLESS文本解码器 ;
795795
796796 const 尝试解析魏烈思首包 = ( data ) => {
@@ -4676,7 +4676,7 @@ function base64SecretDecode(encoded, secret) {
46764676
46774677function 获取传输协议配置 ( 配置 = { } ) {
46784678 const 是gRPC = 配置 . 传输协议 === 'grpc' ;
4679- const { 头 : 本机Padding头 , 键 : 本机Padding键 } = 获取XHTTPPadding标识 ( 配置 . UUID ) ;
4679+ const { 头 : 本机Padding头 , 键 : 本机Padding键 } = 获取叉HTTPPadding标识 ( 配置 . UUID ) ;
46804680 return {
46814681 type : 是gRPC ? ( 配置 . gRPC模式 === 'multi' ? 'grpc&mode=multi' : 'grpc&mode=gun' ) : ( 配置 . 传输协议 === 'xhttp' ? `xhttp&mode=stream-one&extra=%7B%22xPaddingObfsMode%22%3Atrue%2C%22xPaddingMethod%22%3A%22tokenish%22%2C%22xPaddingPlacement%22%3A%22queryInHeader%22%2C%22xPaddingHeader%22%3A%22${ 本机Padding头 } %22%2C%22xPaddingKey%22%3A%22${ 本机Padding键 } %22%7D` : 'ws' ) ,
46824682 路径字段名 : 是gRPC ? 'serviceName' : 'path' ,
0 commit comments