Spaces:
Sleeping
Sleeping
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 filesWorker 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>
- 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 }), {
|