duck3-create Claude Opus 4.6 commited on
Commit
b2f7e8c
·
1 Parent(s): 9a37979

Fix Worker encoding: force Accept-Encoding identity + forward Content-Encoding

Browse files

Worker was stripping Content-Encoding header from YouTube responses, causing
compressed bytes to be unparsable by youtube-transcript-api. Now requests
uncompressed data and forwards Content-Encoding if present as fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Files changed (1) hide show
  1. worker/index.js +14 -4
worker/index.js CHANGED
@@ -25,6 +25,9 @@ export default {
25
  headers.delete('cf-connecting-ip');
26
  headers.delete('cf-ray');
27
  headers.delete('cf-ipcountry');
 
 
 
28
  // Override User-Agent with a browser UA
29
  headers.set('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36');
30
  headers.set('Accept-Language', headers.get('Accept-Language') || 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7');
@@ -51,12 +54,19 @@ export default {
51
  const response = await fetch(targetUrl, fetchOptions);
52
  const body = await response.arrayBuffer();
53
 
 
 
 
 
 
 
 
 
 
 
54
  return new Response(body, {
55
  status: response.status,
56
- headers: {
57
- 'Content-Type': response.headers.get('Content-Type') || 'text/html',
58
- 'Access-Control-Allow-Origin': '*',
59
- }
60
  });
61
  } catch (err) {
62
  return new Response(JSON.stringify({ error: err.message }), {
 
25
  headers.delete('cf-connecting-ip');
26
  headers.delete('cf-ray');
27
  headers.delete('cf-ipcountry');
28
+ // Force uncompressed response so downstream clients can parse it
29
+ // (Worker strips Content-Encoding header, so compressed bytes become unparsable)
30
+ headers.set('Accept-Encoding', 'identity');
31
  // Override User-Agent with a browser UA
32
  headers.set('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36');
33
  headers.set('Accept-Language', headers.get('Accept-Language') || 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7');
 
54
  const response = await fetch(targetUrl, fetchOptions);
55
  const body = await response.arrayBuffer();
56
 
57
+ // Forward essential response headers including Content-Encoding
58
+ const responseHeaders = {
59
+ 'Content-Type': response.headers.get('Content-Type') || 'text/html',
60
+ 'Access-Control-Allow-Origin': '*',
61
+ };
62
+ const contentEncoding = response.headers.get('Content-Encoding');
63
+ if (contentEncoding) {
64
+ responseHeaders['Content-Encoding'] = contentEncoding;
65
+ }
66
+
67
  return new Response(body, {
68
  status: response.status,
69
+ headers: responseHeaders,
 
 
 
70
  });
71
  } catch (err) {
72
  return new Response(JSON.stringify({ error: err.message }), {