محتوای آموزشی وبلاگ نتآرام
کاربر فایل را دانلود میکند اما نام فارسی آن به علامت سؤال یا حروف نامفهوم تبدیل میشود. در این مشکل باید دو نام را از هم جدا کنیم: نام یا مسیر فایل روی سرور و نامی که سرور هنگام دانلود به مرورگر پیشنهاد میدهد. دومی معمولاً در هدر
Content-Disposition قرار دارد.این راهنما برای نام فایل ذخیرهشده توسط مرورگر است. اگر نام فایلهای داخل یک آرشیو ZIP پس از استخراج خراب میشود، مسئله کدگذاری داخل آرشیو و ابزار استخراج است و باید جداگانه بررسی شود.
۱. پاسخ واقعی را ببینید
در مرورگر F12 را بزنید و در زبانه Network درخواست فایل را انتخاب کنید. در Response Headers، مقدار
کد / دستورContent-Disposition و Content-Type را بخوانید. در ترمینال هم برای یک فایل عمومی کوچک:curl -sS -D - -o /dev/null 'https://download.example.com/report.pdf'
نشانی را عوض کنید. این دستور بدنه را روی دیسک ذخیره نمیکند، ولی ممکن است تمام فایل را از شبکه بگیرد؛ از فایل کوچک استفاده کنید. اگر پاسخ تغییر مسیر است، هدر
Location را ببینید و مقصد نهایی را جدا آزمایش کنید. نشانی خصوصی یا دارای توکن را در محل عمومی کپی نکنید.اگر هدر اصلاً وجود ندارد، مرورگر معمولاً از نام انتهای URL یا روش خودش استفاده میکند. اگر نام URL نیز به فایل درست نمیرسد، اول راهنمای ۴۰۴ نام فارسی و فاصله را دنبال کنید؛ هدر نام دانلود، مسیر اشتباه روی سرور را درست نمیکند.
۲. نمونه هدر سازگار را بشناسید
برای پیشنهاد نام فارسی، میتوان هم یک نام جایگزین لاتین در
کد / دستورfilename و هم نام UTF-8 کدگذاریشده در filename* فرستاد:Content-Disposition: attachment; filename="report.pdf"; filename*=UTF-8''%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4.pdf
در این نمونه، بخش دوم نام «گزارش.pdf» را معرفی میکند. مرورگرهایی که
filename* را میفهمند معمولاً آن را ترجیح میدهند و نام لاتین برای سازگاری بیشتر باقی میماند. رفتار دقیق مرورگر و سیستمعامل یکسان نیست. attachment پیشنهاد دانلود میدهد، اما تنظیم مرورگر و برنامه کاربر نیز در رفتار نهایی اثر دارد.در
filename معمولی، نوشتن دستی رشتههای درصدی ممکن است بین مرورگرها متفاوت تفسیر شود. نام فارسی را طبق قالب filename* و بدون دوبارهکدگذاری ارسال کنید.۳. مقدار نام را برای یک نمونه ساده بسازید
در ترمینال دارای Python:
کد / دستورpython3 -c 'from urllib.parse import quote; print(quote("گزارش.pdf", safe=""))'
خروجی را فقط برای همان نام نمونه در بخش بعد از
UTF-8'' قرار دهید. کدگذاری مسیر URL و قالب هدر دقیقاً یک کار یکسان نیستند؛ برای نامهای دلخواه شامل نشانههای خاص، از کتابخانه معتبر چارچوب خود که Content-Disposition را طبق استاندارد میسازد استفاده کنید. کل URL یا کل خط هدر را به جای نام فایل کدگذاری نکنید.اگر نام از کاربر دریافت میشود، مسیرهای
/ و کاراکترهای کنترلی مانند CR و LF را نپذیرید و از ابزار معتبر ساخت هدر استفاده کنید. نام ارائهشده توسط کاربر قابل اعتماد نیست و نباید بتواند هدر اضافه یا مسیر دلخواه بسازد. فایل خصوصی نیز باید پیش از پاسخ، کنترل دسترسی شود.۴. هدر را در لایه درست تنظیم کنید
اگر برنامه دانلود را تولید میکند، هدر را در همان برنامه و پیش از ارسال بدنه تنظیم کنید. اگر وبسرور فایل استاتیک را مستقیم میدهد، امکان تنظیم هدر به وبسرور و سطح دسترسی شما بستگی دارد. در هاست اشتراکی، بخش تنظیم هدر در پنل یا راهنمای سرویس را ببینید؛ فایل
.htaccess روی همه وبسرورها قابل استفاده نیست.اگر از پراکسی یا CDN استفاده میکنید، هدر پاسخ نهایی را از سمت کاربر بخوانید. ممکن است برنامه هدر درست بسازد اما لایه دیگری آن را بازنویسی کند یا پاسخ قدیمی کش شده باشد. برای محتوا و لینک نسخهدار، راهنمای کش فایل دانلود را ببینید.
اگر در پاسخ چند هدر متناقض
Content-Disposition میبینید، ابتدا محل اضافهشدن هر کدام را مشخص کنید. برای نمونه، برنامه و تنظیم وبسرور ممکن است هر دو نامی متفاوت بفرستند. یکی از آنها را مطابق ساختار سرویس مسئول تنظیم نام کنید و با درخواست تازه دوباره خروجی نهایی را بخوانید. پیش از ویرایش قواعد مشترک، اثر آن بر فایلهای دیگر و امکان بازگشت را بررسی کنید. هدر پیشنهادی نام، روش اعتبارسنجی یا محافظت در برابر فایل مخرب نیست؛ پسوند و محتوا باید با فایل مورد انتظار هماهنگ باشند.۵. با دو مرورگر نتیجه را تأیید کنید
یک فایل بیاهمیت با هدر جدید بفرستید و در دو مرورگر مختلف ذخیره کنید. نام واقعی فایل ذخیرهشده، پسوند و بازشدن محتوای آن را ببینید؛ صرف دیدن هدر در ترمینال کافی نیست. بعضی سیستمعاملها کاراکترهای غیرمجاز نام فایل را تغییر میدهند. اگر فقط یک مرورگر مشکل دارد، نسخه و تنظیم دانلود آن را نیز مقایسه کنید.
اشتراکگذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
