في كثير من الأحيان، يتم الاستشهاد بمصطلحات "الموقع نفسه" و "المصدر نفسه"، ولكن غالبًا ما يُساء فهمهما. على سبيل المثال، تُستخدَم هذه الشارات في سياق عمليات انتقال الصفحات وطلبات fetch()
وملفات تعريف الارتباط وفتح النوافذ المنبثقة والموارد المضمّنة وإطارات iframe. تشرح هذه الصفحة ماهيتها وكيف تختلف عن بعضها البعض.
الأصل
![الأصل](https://web.dev/static/articles/same-site-same-origin/image/origin-scheme.png?authuser=6&hl=ar)
"الأصل" هو تركيبة من مخطط
(يُعرَف أيضًا باسم
البروتوكول، على سبيل المثال
HTTP أو
HTTPS)،
واسم مضيف،
ومنفذ
(في حال تحديده). على سبيل المثال، إذا كان عنوان URL هو https://www.example.com:443/foo
،
يكون "المصدر" هو https://www.example.com:443
.
"Same-origin" و " Cross-origin"
تُعتبر المواقع الإلكترونية التي تتضمّن نفس التركيبة من المخطط واسم المضيف والمنفذ "المصدر نفسه". يُعتبر كل شيء آخر "مشترك من مصادر متعددة".
المصدر (أ) | المصدر (ب) | "نفس المصدر" أم "مشترك من المصدر"؟ |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | مشاركة المصدر: نطاقات مختلفة |
https://example.com:443 | مشتركة المصدر: نطاقات فرعية مختلفة | |
https://login.example.com:443 | مشتركة المصدر: نطاقات فرعية مختلفة | |
http://www.example.com:443 | مشاركة المصدر: مخططات مختلفة | |
https://www.example.com:80 | جميع المصادر: منافذ مختلفة | |
https://www.example.com:443 | نفس المصدر: مطابقة تامة | |
https://www.example.com | Same-origin: يتطابق رقم المنفذ الضمني (443) |
الموقع
![الموقع الإلكتروني (TLD+1)](https://web.dev/static/articles/same-site-same-origin/image/site-tld1-ae5ebbc587fbe.png?authuser=6&hl=ar)
يتم إدراج نطاقات المستوى الأعلى (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)](https://web.dev/static/articles/same-site-same-origin/image/site-etld1-2ffebe0e355bd.png?authuser=6&hl=ar)
"المواقع الإلكترونية نفسها" و "المواقع الإلكترونية المتعدّدة"
تُعتبر المواقع الإلكترونية التي لها النظام نفسه ونطاق eTLD+1 نفسه "موقعًا واحدًا على الويب". المواقع الإلكترونية التي تحتوي على مخطط مختلف أو eTLD+1 مختلف هي "مواقع إلكترونية متعدِّدة".
المصدر (أ) | المصدر (ب) | "المواقع الإلكترونية نفسها" أم "متعددة المواقع الإلكترونية"؟ |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | مواقع مختلفة: نطاقات مختلفة |
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 | الموقع الإلكتروني نفسه: المنافذ غير مهمة |
"الموقع نفسه بلا مخطط"
![الموقع نفسه بلا مخطط](https://web.dev/static/articles/same-site-same-origin/image/schemeless-same-site-3ba215c9666cd.png?authuser=6&hl=ar)
تم تغيير تعريف "الموقع الإلكتروني نفسه" ليشمل نظام عنوان URL كجزء من الموقع الإلكتروني لمنع استخدام HTTP كقناة ضعيفة.
إنّ المفهوم القديم لـ "الموقع الإلكتروني نفسه" بدون مقارنة المخططات يُطلق عليه الآن اسم
"الموقع الإلكتروني نفسه الذي لا مضمون له". على سبيل المثال، يتم اعتبار http://www.example.com
وhttps://www.example.com
موقعًا إلكترونيًا واحدًا بلا مخططات ولكن ليس نفس الموقع، لأنّ الجزء eTLD+1 فقط مهم جدًا ولا يتم أخذ المخطط في الاعتبار.
المصدر (أ) | المصدر (ب) | هل "موقع إلكتروني واحد بلا مخططات" أم "مواقع إلكترونية متعددة"؟ |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | مواقع مختلفة: نطاقات مختلفة |
https://login.example.com:443 | استخدام الموقع الإلكتروني نفسه بدون مخطط: لا تهم النطاقات الفرعية المختلفة | |
http://www.example.com:443 | استخدام الموقع الإلكتروني نفسه بلا مخططات: لا تهم المخططات المختلفة | |
https://www.example.com:80 | استخدام الموقع الإلكتروني نفسه بلا مخطط: لا تهم المنافذ المختلفة | |
https://www.example.com:443 | استخدام الموقع الإلكتروني نفسه بدون مخطط: مطابقة تامة | |
https://www.example.com | استخدام الموقع الإلكتروني نفسه بلا مخطط: لا تهم المنافذ |
كيفية التحقّق مما إذا كان الطلب هو "الموقع الإلكتروني نفسه" أو "المصدر نفسه" أو "من مواقع إلكترونية متعددة"
ترسِل جميع المتصفّحات الحديثة الطلبات باستخدام
عنوان HTTP يتضمّن العلامة Sec-Fetch-Site
.
يحتوي العنوان على إحدى القيم التالية:
cross-site
same-site
(يشير إلى الموقع الإلكتروني نفسه المخطط)same-origin
none
يمكنك فحص قيمة Sec-Fetch-Site
لتحديد ما إذا كان الطلب من موقع إلكتروني واحد أو مصدر واحد أو عدة مواقع إلكترونية.
يمكنك الوثوق بشكل معقول في قيمة عنوان Sec-Fetch-Site
، للأسباب التالية:
- لا يمكن تعديل عناوين HTTP التي تبدأ بـ
Sec-
من خلال JavaScript - يضبط المتصفّح هذه العناوين دائمًا.