أفضل الممارسات للحصول على استجابات JSON عبر المواقع لـ POST؟

StackOverflow https://stackoverflow.com/questions/207554

سؤال

أنا أعمل على إنترانت مع عدة نطاقات فرعية.لدي القدرة على التحكم في كل نطاق فرعي، لذا فإن أمان الطلبات عبر المواقع لا يشكل مصدر قلق.لدي نصوص PHP مع استجابات JSON وأرغب في الاتصال بها من نطاقات فرعية متعددة دون تكرار.بالنسبة لطلبات GET، يمكنني القيام بذلك باستخدام AJAX وJSONP، لكن هذا لا يعمل مع طلبات POST.أرى بعض البدائل، ولا يبدو أي منها جيدًا جدًا:

  • قم بالنشر إلى نسخة على النطاق الفرعي المحلي بأقل قدر من الاستجابة، ثم احصل على استجابة كاملة من الموقع المركزي باستخدام JSONP
  • كل من POST والحصول على نسخة على المجال الفرعي المحلي باستخدام JSON
  • استخدم mod_rewrite لاستخدام عناوين URL المحلية مع برنامج نصي مركزي في النهاية الخلفية باستخدام JSON
  • استخدم الروابط الرمزية لاستخدام عناوين URL المحلية مع برنامج نصي مركزي في النهاية الخلفية باستخدام JSON

هل أفتقد شيئًا أبسط؟ماذا ستفعل هنا؟

هل كانت مفيدة؟

المحلول

مجرد إلقاء نظرة على هذا https://developer.mozilla.org/En/HTTP_access_control صفحة.كل ما تحتاجه - أضف رأسًا إلى جميع البرامج النصية التي تقبل طلب النشر.مثال:

نصائح أخرى

يمكنك كتابة عاكس بسيط على جانب الخادم.أضف برنامجًا نصيًا إلى كل مجال يقوم ببساطة بتمرير طلب ajax الخاص بك إلى المجال المناسب.يمكن أن يكون هذا البرنامج النصي بسيطًا جدًا (سطر أو سطرين من التعليمات البرمجية)، ويتجنب مشكلات البرمجة النصية عبر المواقع ويعني أنك لا تحتاج إلى تكرار منطق العمل المعقد في البرامج النصية الموجودة لديك.

سيؤدي ذلك إلى عمل إضافي لخادمك، لكن هذا قد لا يمثل مشكلة بالنسبة لك.

أقرب مثال على الكود الذي يمكنني العثور عليه على المواقع التي أديرها هو ما يلي.نحن هنا بحاجة إلى أن نكون قادرين على استخدام Googles Chart API على اتصال HTTPS (والذي لا يدعمه بعد).كان الحل هو إضافة البرنامج النصي التالي الذي مرر المكالمات على ...

<?php
// Set header so our output looks like a PNG
header("Content-Type: image/png");

// Reflect the image from googles chart API
echo file_get_contents('http://chart.apis.google.com/chart?'.$_SERVER['QUERY_STRING']);
?>

أستخدم نهج REST في مثل هذه الحالات.ابحث في جوجل لمزيد من المعلومات حول REST.

إذا كانت جميعها نطاقات فرعية لنفس النطاق، فيمكنك فقط إضافة هذا الرمز إلى كل صفحة:

document.domain = 'domain.com';

ثم استخدم فقط xmlHttpRequest العادي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top