# زبان های اسکریپتی > Classic ASP >  تفاوت Response.Redirect با Server.Transfer و Server.Execute

## odiseh

سلام

لطفا کسانی که واقعا کار کرده اند و نتیجه رو کامل متوجه شدند من رو راهنمایی کنند:

فرق Response.Redirect با server.trasfer و server.Execute چیه؟ کدوم بار کمتری در شرایطی که میخواهیم فقط به صفحه دیگری رجوع کنیم ، روی سرور می اندازد؟

با تشکر فراوان

----------


## M-Gheibi

Server.Transfer یکی از متدهایی هست که به متدهای موجود در ASP 2.0 اضافه و به هنگام ارائه ASP 3.0 معرفی شد . پیش از این در ASP 2.0 برای انتقال به صفحه‌ای دیگر از متد Response.Redirect استفاده می‌شد ( اگرچه در نسخه 3 همچنان امکان استفاده از متد قدیمی وجود داره ) که در نسخه‌ی جدید این روند با استفاده از متد Server.Transfer هم انجام میشه .

به طور خیلی خلاصه وقتی از Response.Redirect استفاده می‌کنید در واقع مراحل زیر طی می‌شوند :
ارسال پیامی مبنی بر لود آدرس URL‌ جدید به مرورگر وب دستگاه کاربر ( کلاینت )دریافت پیام توسط مرورگر وب دستگاه کاربر ( کلاینت )اعلام درخواست دریافت اطلاعات آدرس جدید به سرورپردازش درخواست ارسالی در سرور و ارسال اطلاعات مربوطه ( کدهای HTML صفحه‌ی جدید ) به مرورگر وب دستگاه کاربر ( کلاینت )واضحه که برای اجرای یک دستور و رسیدن به هدف اصلی بار زیادی به شبکه وارد میشه و در سرعت برنامه هم تأثیر منفی خودش رو میذاره . برای جلوگیری از تحمیل بار اضافی بهتره از Server.Transfer استفاده کنید . با استفاده از این متد به جای اینکه درخواست دریافت اطلاعات صفحه‌ی جدید از کلاینت ارسال بشه ، مستقیماً در سرور اعلام نیاز برای تغییر دستورات اجرا شده به دستورات صفحه مورد نظر انجام می‌گیره . یعنی در واقع مراحل یک ، دو و سه که در بالا بهشون اشاره شد حذف می‌شوند .

موقع استفاده از Server.Transfer به این موارد دقت کنید که :
هنگام استفاده از این متد اگرچه آدرس صفحه در پشت صحنه تغییر کرده و پردازش‌های لازم روی فایل با آدرس جدید صورت می‌گیره ولی آدرس نمایش داده شده در نوار آدرس مرورگر وب همان آدرس ابتدایی خواهد بود . ( چون هیچگونه پیامی مبنی بر تغییر آدرس به دستگاه کاربر ارسال نمیشه )زمانی می‌تونید از این متد استفاده کنید که صفحه‌ی مقصدتون برای انتقال جزوی از سایت خودتون باشه ، به این معنی که نمی‌تونید مثلاً به سایت یاهو از این طریق لینک کنید . ( دلیلش هم کاملاً روشنه ! )در مورد متد Server.Execute هم باید بگم که ربطی به دو متد قبل نداره . در واقع این متد کاری که انجام میده مشابه includeها هست ( با کمی تفاوت ) . وقتی در یک صفحه از این متد استفاده می‌کنید ، دستورات فایل اصلی شما تا رسیدن به این متد اجرا می‌شوند ، سپس کدهای موجود در آدرس مشخص شده ( فایل اشاره شده با استفاده از این متد ) اجرا می‌شوند و در آخر ( پس از اجرای آخرین دستور فایل اشاره شده ) ادامه دستورات فایل ابتدایی اجرا می‌گردند .

برای مثال فرض کنید دو فایل file1.asp و file2.asp داریم . دستورات هر فایل به این شکل است :
file1.aspTest1 (File1)
<%Server.Execute " file2.asp"%>
 

Test3 (File1)file2.aspTest2 (File2)با اجرای فایل اول ( file1.asp ) مشاهده می‌کنید که خروجی زیر نمایش داده میشه :
Test1 (File1)
Test2 (File2)
Test3 (File1)یعنی ابتدا خط اول از فایل اول اجرا میشه ، سپس اجرای دستورات فایل دوم آغاز میشه و بعد از پایان کار فایل دوم ، به فایل اول بازگشته ، ادامه دستورات اجرا می‌شوند .


امیدوارم با خوندن مطالب بالا به نتیجه مورد نظرت رسیده باشی .  :لبخند:

----------


## m_nanaji

ممنون از راهنمایی 
همانطور که گفتین اگر از متد Server.Transfer استفاده کنم آدرس بار تغییر نمیکنه . این مشکل رو چطور حل کنم.

----------

