اصطلاحات "همان سایت" و "همان منبع" اغلب ذکر می شوند اما اغلب به اشتباه درک می شوند. به عنوان مثال، آنها در زمینه انتقال صفحه، درخواستهای 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) مانند .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 در نظر گرفته می شود.
"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
، می توانید تعیین کنید که آیا درخواست "همان سایت"، "همان منبع" یا "مقطع سایت" است.