@@ -89,6 +89,22 @@ async function handleDoH(request: NextRequest, providerId: string) {
8989 let responseStatus = 500 ;
9090
9191 try {
92+ // 0. Handle HEAD requests immediately (Health Check)
93+ if ( request . method === 'HEAD' ) {
94+ responseStatus = 200 ;
95+ const responseHeaders = new Headers ( ) ;
96+ responseHeaders . set ( 'Cache-Control' , 'no-store, max-age=0' ) ;
97+ responseHeaders . set ( 'Pragma' , 'no-cache' ) ;
98+ responseHeaders . set ( 'Expires' , '0' ) ;
99+ responseHeaders . set ( 'Vary' , 'Accept, Accept-Encoding' ) ;
100+ responseHeaders . set ( 'Access-Control-Allow-Origin' , '*' ) ;
101+
102+ return new NextResponse ( null , {
103+ status : 200 ,
104+ headers : responseHeaders ,
105+ } ) ;
106+ }
107+
92108 // 1. Input Validation
93109 const url = new URL ( request . url ) ;
94110 const validationError = validateRequest ( url ) ;
@@ -133,7 +149,7 @@ async function handleDoH(request: NextRequest, providerId: string) {
133149 const upstreamUrl = new URL ( upstreamEndpoint ) ;
134150
135151 // Pass through query params for GET, excluding internal ones
136- if ( request . method === 'GET' || request . method === 'HEAD' ) {
152+ if ( request . method === 'GET' ) {
137153 url . searchParams . forEach ( ( value , key ) => {
138154 if ( key !== 'upstream' ) { // Don't pass 'upstream' param to the DNS server
139155 upstreamUrl . searchParams . append ( key , value ) ;
@@ -159,25 +175,6 @@ async function handleDoH(request: NextRequest, providerId: string) {
159175 const timeoutId = setTimeout ( ( ) => controller . abort ( ) , REQUEST_TIMEOUT_MS ) ;
160176
161177 try {
162- // Handle HEAD method separately to return health status without fetching upstream body
163- // But user requested to return health status directly for HEAD requests
164- if ( request . method === 'HEAD' ) {
165- clearTimeout ( timeoutId ) ;
166- responseStatus = 204 ;
167- const responseHeaders = new Headers ( ) ;
168- // Strict Cache Control
169- responseHeaders . set ( 'Cache-Control' , 'no-store, max-age=0' ) ;
170- responseHeaders . set ( 'Pragma' , 'no-cache' ) ;
171- responseHeaders . set ( 'Expires' , '0' ) ;
172- responseHeaders . set ( 'Vary' , 'Accept, Accept-Encoding' ) ;
173- responseHeaders . set ( 'Access-Control-Allow-Origin' , '*' ) ;
174-
175- return new NextResponse ( null , {
176- status : 204 ,
177- headers : responseHeaders ,
178- } ) ;
179- }
180-
181178 const upstreamResponse = await fetch ( upstreamUrl . toString ( ) , {
182179 method : request . method ,
183180 headers : headers ,
0 commit comments