سلام،
اونوقت این header کجا ذخیره میشه؟؟؟
هدر لازم نیست جایی ذخیره بشه! همون طور که بقیه هدرهایی که بین سرور و کلاینت ردوبدل می شن ذخیره نمی شن (مگه در موارد خاصی که سرور یا کلاینت تصمیم به ذخیره کردن یه هدر خاص بگیره، که مصداقش هموم کوکی هست که کلاینت تصمیم می گیره از بین چندین هدر دریافت شده از یه سایت، اطلاعات موجود در هدر کوکی رو به عنوان یه کوکی ذخیره کنه). به عنوان مثال این لیست تعدادی از هدرهایی هست که شما وقتی صفحه اول گوگل رو می بینید به سرور ارسال می شه:
GET / HTTP/1.1
Host:
www.google.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
این هم تعداد از هدرهایی هست که گوگل به کلاینت برمیگردونه:
HTTP/1.1 200 OK
Connection: Keep-Alive
Cache-Control: private
Content-Type: text/html
Content-Encoding: gzip
Server: GWS/2.1
Content-Length: 2027
Date: Thu, 12 Oct 2006 07:57:45 GMT
آیا این هدرهای ذخیره می شن؟ نه. اینها فقط برای اطلاع دادن به سری چیزها به طرف مقابل هست. البته ممکنه یکی دوتاشون هم ذخیره بشن. اما اگه ذخیره هم نشن مشکلی پیش نمیاد.
سایت **نمی تونه** و **حق** نداره چیزی جز کوکی رو چک کنه. در حقیقت این مرورگر است که کوکی رو دوباره ارسال می کنه به سمت سرور و سرور چیزی از روی کلاینت نمی خونه.
به عنوان مثال وقتی که یه سایت از روی همین هدرهایی که از طرف کلاینت به سرور پاس شده نوع Browser رو تشخیص می ده ( و یا حتی نوع سیستم عامل کلاینت و ...) آیا داره چیزی از کلاینت می خونه؟ مسلما نه. اینها اطلاعاتی هستن که به دلخواه خود کلاینت به سرور فرستاده شده. شاید اگه جلمه "سایت نمی تونه و حق نداره چیزی جز کوکی رو بخونه" رو به جمله "سایت نمی تونه و حق نداره چیزی جز هدر ها رو چک کنه." تغییر بدیم بهتر باشه. چون کوکی هم جزو کل بزرگتری به اسم هدر است و درون هدر های قرار می گیره.
چنین چیزی نیست، منبعی برای حرفت داری؟؟
بله. این RFC مربوط به HTTP هست و قانون هایی که سرور و کلالینت برای ارتباط با هم باید رعایت بکنن رو توضیح می ده.
http://www.w3.org/Protocols/rfc1945/rfc1945
در قسمت "4.1 Message Types" این RFC نوشته شده که :
Both messages may include optional
header fields (also known as "headers")
پس در نتیجه سرور و یا کلاینت در ارتباطاتشون با طرف مقابل می تونن هدرهای اختیاری داشته باشن.
همچنین در قسمت "5.2 Request Header Fields" نوشته شده:
However, new or
experimental header fields may be given the semantics of request
header fields if all parties in the communication recognize them to
be request header fields. Unrecognized header fields are treated as
Entity-Header fields.
گفته که "Unrecognized header" جزو "Entity-Header" حساب خواهند شد و طبق توضیحات "Entity-Header"، این ها، هدرهای هایی هستن که کلاینت در هر درخواست به سرور ارسال می کنه (البته همونطور که خودش هم توضیح داده انواع هدری دیگه ای هم وجود داره). پس در نتیجه Browser هایی که این RFC رو رعایت کرده باشن تمامی هدرهایی رو که شناسایی نکنن در درخواست بعدی به همون شکلی که دریافت کردن برای سرور پاس می کنن (یه مثال دیگه: فرض کنیم که این اتفاق نمی افتاد. یعنی هدرهایی که توسط کلاینت شناسایی نمی شدن به حال خودشون رها می شدن. و فقط و فقط هدرهایی رو که میشناختن دوباره به سرور پاس می کردن. در این صورت تمامی سایت هایی که هدر های خاص خودشون رو دارن مجبور بودن به IE و یا Firefox اعلام کنن که این هدرها رو توی نسخه های بعدی مرورگرهای خودشون ثبت کنن)