درک "همان سایت» و «همان منبع»

اصطلاحات "همان سایت" و "همان منبع" اغلب ذکر می شوند اما اغلب به اشتباه درک می شوند. به عنوان مثال، آنها در زمینه انتقال صفحه، درخواست‌های fetch() ، کوکی‌ها، باز کردن پنجره‌های بازشو، منابع جاسازی شده و iframes ذکر شده‌اند.

اصل و نسب

اصل و نسب

"Origin" ترکیبی از یک طرح (همچنین به عنوان پروتکل شناخته می شود، برای مثال HTTP یا HTTPSنام میزبان و پورت (در صورت مشخص شدن). برای مثال، با توجه به URL https://www.example.com:443/foo ، "origin" https://www.example.com:443 است.

"همان منشاء" و "تقاطع"

وب‌سایت‌هایی که ترکیبی از طرح، نام میزبان و پورت یکسان دارند، «منشأ یکسان» در نظر گرفته می‌شوند. هر چیز دیگری "منشا متقاطع" در نظر گرفته می شود.

مبدا A مبدا B توضیح اینکه آیا مبدا A و B "منشا یکسان" هستند یا "مبدع متقاطع"
https://www.example.com:443 https://www.evil.com :443 مبدا متقابل: دامنه های مختلف
https:// example.com :443 cross-origin: زیر دامنه های مختلف
https:// login .example.com:443 cross-origin: زیر دامنه های مختلف
http://www.example.com:443 منبع متقابل: طرح های مختلف
https://www.example.com: 80 منبع متقابل: پورت های مختلف
https://www.example.com:443 همان منبع: مطابقت دقیق
https://www.example.com همان منبع: شماره پورت ضمنی (443) مطابقت دارد

سایت

سایت (TLD+1)

دامنه های سطح بالا (TLD) مانند .com و .org در پایگاه داده Root Zone فهرست شده اند. در مثال بالا، "سایت" ترکیبی از طرح ، TLD و بخشی از دامنه درست قبل از آن است (ما آن را TLD+1 می نامیم). برای مثال، با توجه به URL https://www.example.com:443/foo ، "سایت" https://example.com است.

فهرست پسوند عمومی و eTLD

برای دامنه هایی که شامل مواردی مانند .co.jp یا .github.io هستند، استفاده از .jp یا .io به اندازه کافی برای شناسایی «سایت» مشخص نیست. هیچ راهی برای تعیین الگوریتمی سطح دامنه های قابل ثبت برای یک TLD خاص وجود ندارد. به همین دلیل لیستی از پسوندهای عمومی تعریف شده در فهرست پسوند عمومی ایجاد شد. این پسوندهای عمومی TLDهای موثر (eTLD) نیز نامیده می شوند. فهرست eTLD ها در publicsuffix.org/list نگهداری می شود.

برای شناسایی قسمت "سایت" دامنه ای که شامل eTLD است، همان روشی را که در مثال با .com انجام دادید، اعمال کنید. با در نظر گرفتن https://www.project.github.io:443/foo به عنوان مثال، طرح https ، eTLD .github.io و eTLD+1 project.github.io است، بنابراین https://project.github.io "سایت" برای این URL در نظر گرفته می شود.

سایت (eTLD+1)

"Same-site" و "Cross-site"

وب‌سایت‌هایی که دارای طرح یکسان و eTLD+1 یکسان هستند «همان سایت» در نظر گرفته می‌شوند. وب‌سایت‌هایی که طرح متفاوتی دارند یا eTLD+1 متفاوتی دارند «متقابل سایت» هستند.

مبدا A مبدا B توضیح اینکه آیا مبدا A و B "یک سایت" هستند یا "مقطع سایت"
https://www.example.com:443 https://www.evil.com :443 cross-site: دامنه های مختلف
https:// login .example.com:443 همان سایت: زیر دامنه های مختلف مهم نیست
http://www.example.com:443 cross-site: طرح های مختلف
https://www.example.com: 80 همان سایت: پورت های مختلف مهم نیست
https://www.example.com:443 همان سایت: مطابقت دقیق
https://www.example.com همان سایت: پورت ها مهم نیست

"همان سایت بدون طرح"

همان سایت بدون طرح

تعریف "سایت یکسان" برای در نظر گرفتن طرح URL به عنوان بخشی از سایت به منظور جلوگیری از استفاده از HTTP به عنوان یک کانال ضعیف تکامل یافته است. مفهوم قدیمی تر "سایت یکسان" بدون مقایسه طرح، اکنون "همان سایت بدون طرح" نامیده می شود. به عنوان مثال، http://www.example.com و https://www.example.com به عنوان یک سایت بدون طرح و نه یک سایت در نظر گرفته می شوند، زیرا فقط قسمت eTLD+1 مهم است و این طرح در نظر گرفته نمی شود. .

مبدا A مبدا B توضیح اینکه آیا Origin A و B "هم سایت بدون طرح" هستند یا خیر
https://www.example.com:443 https://www.evil.com :443 cross-site: دامنه های مختلف
https:// login .example.com:443 schemeless same-site: زیر دامنه های مختلف مهم نیست
http://www.example.com:443 schemeless same-site: طرح های مختلف مهم نیست
https://www.example.com: 80 schemeless same-site: پورت های مختلف مهم نیست
https://www.example.com:443 schemeless same-site: مطابقت دقیق
https://www.example.com schemeless same-site: پورت ها مهم نیستند

چگونه بررسی کنیم که آیا یک درخواست "همان سایت"، "همان منبع" یا "مقطع سایت" است

همه مرورگرهای مدرن (سافاری به زودی از آن پشتیبانی می‌کند) درخواست‌ها را همراه با هدر HTTP Sec-Fetch-Site ارسال می‌کنند. هدر یکی از مقادیر زیر را دارد:

  • cross-site
  • same-site
  • same-origin
  • none

با بررسی مقدار Sec-Fetch-Site ، می توانید تعیین کنید که آیا درخواست "همان سایت"، "همان منبع" یا "مقطع سایت" است.