קורס Node.JS שיעור שיתוף API בין דומיינים באמצעות CORS


זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/nodejs/lessons/32-api-cors

הי ינון,
בסרטון ראיתי שדובר על פעולת GET.
תוכל לתת פרט על פעולת ה-DELETE כאשר אני נתקל בבעיית ה-CORS בפעולה זו?

האם הטיפול בבעיית ה-CORS של ה-delete דומה בין הטכנולוגיות של Node.js עם טכנולוגיית SPRING וטכנולוגיות אחרות?
תודה מראש

הי ניר,

אין הבדל בין delete ל get מבחינת הטיפול ב CORS. בכל מקרה אתה צריך את הכותרת Access Control Allow Origin כדי שדפדפן יסכים להסתכל על התשובה של הבקשה.

באיזה בעיה נתקלת?

כשמנסים למחוק פריט מרשימה (כפתור delete) מקבלים את השגיאה הבאה:

options localhost/8080/delete/20 
net::err conection refused

להלן גם תצלום השגיאה:
image

אה עכשיו אני מבין-

בבקשות GET הנחת העבודה היא ששום נזק לא יקרה אם הבקשה תגיע ״בטעות״ לשרת. מקסימום התשובה לא תכיל את ה Access-Control-Allow-Origin והדפדפן יתעלם מהתשובה.

אבל בבקשות כמו POST, PUT וכמובן גם DELETE אם בקשה תגיע בטעות לשרת משהו עלול לקרות שלא היה אמור לקרות (בגלל טעות קוד בצד השרת). לכן דפדפנים מוסיפים ״מנגנון הגנה״ על בקשות אלה. לפני ששולחים אותן שולחים בקשת OPTIONS כדי לבדוק אם בכלל השרת מסכים לקבל בקשות XmlHttpRequest מהדומיין שלנו. אם התשובה ל Options כוללת את כותרת ה Access Control Allow Origin הדפדפן ימשיך וישלח את בקשת ה POST או ה DELETE שרצית.

אתה יכול להוסיף בעצמך גם הגדרת נתיב ל options שישלח את הכותרות הנכונות עבור כל אחד מנתיבי ה POST או DELETE שלך:

app.options(...)

אבל בדרך כלל משתמשים במידלוור שכבר עושה את זה בשבילך (או כותבים לבד מידלוור לזה).

כאן יש דוגמת קוד עם הסבר לכתיבת מידלוור בעצמך עבור נושא זה:

וזה המידלוור המוכן שכבר ידאג לך לכל צרכי ה CORS שעשויים להיות לך: