↪️
Templating & Static Files

Redirects & Downloads

res.redirect aur res.download
💡 res.redirect EK "DUKAAN SHIFT HO GAYI HAI — naya pata yahan" ka board hai, aur res.download counter se parcel dena hai jise customer ka browser SAVE karta hai, kholta nahi.

res.redirect(url) Location header aur 302 (temporary) status bhejta hai. PERMANENT move ke liye 301 do — res.redirect(301, "/new"). Browser 301 ko CACHE kar leta hai, isliye galti se 301 dena mushkil se undo hota hai.

res.download(path, filename) file bhejta hai Content-Disposition: attachment ke saath, jisse browser use save karta hai. res.sendFile() ke ulat, jo browser mein khol sakta hai.

res.redirect("/login");                    // 302 temporary
res.redirect(301, "/new-home");            // permanent, browser cache karega
res.redirect("back");                      // Referer header par wapas

res.download("/files/report.pdf", "monthly-report.pdf");
↪️
res.redirect EK "DUKAAN SHIFT HO GAYI HAI — naya pata yahan" ka board hai, aur res.download counter se parcel dena hai jise customer ka browser SAVE karta hai, kholta nahi.
1 / 2
⚡ Quick Recap
  • res.redirect() default 302 (temporary), 301 permanent aur browser-cached hota hai
  • res.download() file ko attachment ki tarah bhejta hai, browser save karta hai
  • res.sendFile() browser mein inline dikha sakta hai, download nahi karata
Is page mein (2 subtopics)

302 (default) temporary hai — browser next time phir original URL try karega. 301 permanent hai aur browser use CACHE kar leta hai, isliye galti se diya gaya 301 users ke browsers mein atak jaata hai. 303 POST ke baad GET par bhejne ke liye, aur 307/308 method preserve karte hain.

res.redirect("/login");             // 302
res.redirect(301, "/new-url");      // permanent (cached!)
res.redirect(303, "/success");      // POST -> GET pattern

res.download() Content-Disposition: attachment set karta hai jisse browser file save karta hai. Doosra argument custom download filename deta hai, teesra ek callback hai jo error (jaise file missing) handle karne ke liye kaam aata hai.

res.download("/tmp/report-2026.pdf", "Monthly-Report.pdf", (err) => {
  if (err && !res.headersSent) res.status(404).json({ error: "File missing" });
});