ما المقصود بمشاركة الموارد متعددة الأصول (CORS) - كيف تضيفها إلى خادم الويب الخاص بجافا جيرسي؟

نشرت: 2014-07-19

برنامج تعليمي لمشاركة الموارد عبر المنشأ (CORS) من Crunchify

كيف يتم إصلاح هذا الخطأ أثناء client-server ؟ يرسل الخادم البيانات بتنسيق JSON أو XML ويلقي العميل أسفل الاستثناء.

يمكن لصفحات الويب العادية استخدام كائن XMLHttpRequest لإرسال البيانات واستلامها من الخوادم البعيدة ، لكنها مقيدة بنفس سياسة الأصل. الامتدادات ليست محدودة للغاية. يمكن للإضافة التحدث إلى الخوادم البعيدة خارج أصلها ، طالما أنها تطلب أولاً أذونات عبر الأصل.

أيضًا ، إذا كانت لديك أسئلة أدناه ، فأنت في الموقع الصحيح:

  1. فهم مشاركة الموارد متعددة الأصول (مرشحات CORS)
  2. هل يمكنني استخدام مشاركة الموارد عبر الأصول
  3. كيفية تمكين مشاركة الموارد عبر الأصول
  4. ما هو نطاق Ajax مع مشاركة الموارد عبر الأصول
  5. ما هو التحكم في الوصول HTTP (CORS)

CORS (مشاركة الموارد عبر الأصل) هي آلية يدعمها W3C لتمكين الطلبات عبر الأصل في متصفحات الويب. يتطلب CORS دعمًا من كل من المتصفح والخادم للعمل. هذا هو تنفيذ عامل تصفية Java Jersey Web Server من CORS من جانب الخادم لحاويات الويب مثل Apache Tomcat وخوادم الويب المضمنة الأخرى.

مثال Crunchify CORSFilter Jersey Server

الخطوة 1:

يمكن أن تتضمن الاستجابة رأس Access-Control-Allow-Origin ، مع أصل مصدر الطلب كقيمة ، للسماح بالوصول إلى محتويات المورد. يتحقق وكيل المستخدم من تطابق قيمة وأصل مصدر الطلب.

الخطوة 2:

يمكن لوكلاء المستخدم أن يكتشفوا من خلال طلب الاختبار المبدئي ما إذا كان مورد متعدد المنشأ جاهزًا لقبول الطلبات ، باستخدام طريقة غير بسيطة ، من أصل معين. تم التحقق من صحة هذا مرة أخرى من قبل وكيل المستخدم.

الخطوه 3:

يتم تمكين التطبيقات من جانب الخادم لاكتشاف أن طلب HTTP قد تم اعتباره طلبًا عبر الأصل من قبل وكيل المستخدم ، من خلال عنوان Origin. يمكّن هذا الامتداد التطبيقات من جانب الخادم من فرض قيود (مثل عدم إرجاع أي شيء) على الطلبات عبر الأصل التي يرغبون في خدمتها.

لنبدأ الآن بالأمثلة.

مثال 1: خادم الويب Java Jersey

قبل أسبوعين ، كتبت مقالًا عن كيفية بدء تشغيل خادم HTTP Jersey أثناء بدء تشغيل تطبيق Java. سيغطي هذا المنشور خطوات حول كيفية إضافة عامل تصفية CORS إلى خادم Jersey نفسه.

نحن بحاجة إلى تمديد ContainerResponseFilter. واجهة تنفذ بواسطة مرشحات استجابة الحاوية. بشكل افتراضي ، على سبيل المثال ، إذا لم يتم تطبيق ربط اسم على فئة تنفيذ عامل التصفية ، فسيتم تطبيق مثيل المرشح بشكل عام على أي استجابة صادرة.

لإصلاح هذا ، دعونا نحاول إضافة 4 رؤوس أدناه إلى استجابة الخادم:

  1. التحكم في الوصول والسماح بالأصل
  2. طرق التحكم في الوصول والسماح
  3. التحكم في الوصول ، الحد الأقصى للعمر
  4. الوصول والتحكم والسماح الرؤوس

كود مرشح CORS:

التعديل في JerseyEmbeddedHTTPServerCrunchify.java من البرنامج التعليمي السابق.

فقط أضف السطر أدناه في createHttpServer () وأعد تشغيل الخادم.

نتيجة:

http: // localhost: 8085 / api

Crunchify رأس الاستجابة مع مرشح CORS

هنا تفاصيل الرؤوس.

Crunchify رأس الاستجابة بدون مرشح CORS

مثال 2: خادم Apache HTTP

لعرض الرأس ، يمكنك إضافة السطر التالي داخل أقسام <Directory> و <الموقع> و <الملفات> ، أو داخل ملف .htaccess .

مثال 3: يمكن لخادم .NET تكوين هذا في web.config على النحو التالي

مثال 4: لرصيف المراكب الصغيرة (7 وما فوق)

قم بتضمين jetty-servlets JAR في WEB-INF / lib الخاص بك وادمجها في WEB-INF / web.xml الخاص بك

مثال 5: Apache Tomcat Server (v 7.0.41 +)

مثال 6: في PHP

يُرجى إعلامي إذا كان لديك أي أسئلة أخرى حول هذا الموضوع. يمكن العثور على قائمة بجميع دروس Java التعليمية هنا.