התחברות ל-API שרץ על AWS ec2
-
יש לי instance שמריץ API שבנוי ב-django-rest-framework, על גבי שרת ec2 של AWS,
הוא רץ בתוך קונטיינר (Docker) עם nginx, ומאזין בפורט 8000. (ה-security group מאפשרת בקשות של HTTP ו-HTTPS מכל כתובת).
זה הדף אינטרנט שאני מנסה להריץ ממנו בקשות:<!DOCTYPE html> <html> <head> <title>Password Authentication</title> </head> <body> <h1>Authentication</h1> <form id="authenticationForm"> <label for = "username">Enter your username:</label> <input type = "text" id="username" name="username" required> <label for="password">Enter Password:</label> <input type="password" id="password" name="password" required> <button type="button" id="submit">Submit</button> </form> <p id="message"></p> <script> document.getElementById("submit").addEventListener("click", function() { let password = document.getElementById("password").value; let username = document.getElementById("username").value; let message = document.getElementById("message"); // Send a POST request to the Django API for password validation fetch('http://<my ec2 public ip address>:8000/api/', { method: 'POST', headers: { 'Content-Type': 'application/json', }, credentials: 'include', body: JSON.stringify({username: username, password: password }), }) .then(response => response.json()) .then(data => { if (data.correct) { // Redirect to another page upon successful authentication console.log(data) message.textContent = 'Password is correct.'; window.location.href = 'json-upload.html'; } else { const cookies = data.cookies; console.log(cookies); // Display an error message if the password is incorrect message.textContent = 'Password is incorrect. Please try again.'; } }); }); </script> </body> </html>
כאשר אני מריץ בgoogle chrome התגובה לוקחת המון המון זמן ולבסוף מגיע:
כשהלוגים של הקונטיינר שמריץ את nginx בשרת כמובן אינם מראים את הבקשה כלל, לאחר שזו נכשלה.
באופן מוזר, לעתים אני מקבל כן לוגים כמו אלו:172.104.11.51 - - [14/Nov/2023:08:58:57 +0000] "\x16\x03\x01\x00\x85\x01\x00\x00\x81\x03\x03\xF2\x94{A\xFBpRh\xB2\xBC$\xC3\xD0\xF8\x97\xF3\xD0\xB0\xBE\xF9IL5:\xA4SM\x80\xE1X7\xD9\x00\x00 \xC0/\xC00\xC0+\xC0,\xCC\xA8\xCC\xA9\xC0\x13\xC0\x09\xC0\x14\xC0" 400 157 "-" "-" "-"
או
147.235.193.187 - - [14/Nov/2023:08:55:25 +0000] "\x16\x03\x01\x02\x1A\x01\x00\x02\x16\x03\x03d\xD3\xA7\xE7\xB51v\x16Q7\xEE\x0EB\x06VJ\x8B\x91r\xF5(\xB1)\xD0\x83W#\xE8l\x0E<\xC4 \x02k\x19XnU&7\x84\xBF\x8FR;\xF6#\xBE\x17A\xDE\x10\xD2j\xA4\xEB:{L\x5C\xDA\x80\xF4\xA5\x00 \x8A\x8A\x13\x01\x13\x02\x13\x03\xC0+\xC0/\xC0,\xC00\xCC\xA9\xCC\xA8\xC0\x13\xC0\x14\x00\x9C\x00\x9D\x00/\x005\x01\x00\x01\xADjj\x00\x00\x00\x05\x00\x05\x01\x00\x00\x00\x00\xFE" 400 157 "-" "-" "-"
במקרים אלו, נוצרת בקשת preflight:
אציין כי מתי שאני מריץ את אותו קונטיינר בדיוק על המחשב שלי, הכל עובד פיקס, כך שאין בעיה עם CORS מצד הקוד בכל אופן.
אני עובד עם נטפרי, זה יכול להיות קשור לסינון? פתחתי את כל החסימות שהיו בהקלטות.
או שזה קשור לAWS? -
@איש_ימיני כתב בהתחברות ל-API שרץ על AWS ec2:
הוא רץ בתוך קונטיינר (Docker) עם nginx, ומאזין בפורט 8000. (ה-security group מאפשרת בקשות של HTTP ו-HTTPS מכל כתובת).
איזה פורט פתחת? HTTP ו-HTTPS זה בד"כ אומר פורט 80 ופורט 443, אחרת קוראים לזה TCP
תנסה לפתוח בחומת אש את פורט 8000
כמו כן תוודא עם CURL וכדו' בתוך השרת שאכן האתר נגיש בlocalhost:8000
-
כפי ש@צדיק-תמים כתב, http\s זה סה"כ קיצור לTCP:80/TCP:443, כך שאתה צריך לפתוח TCP 8000.
בעיית איטיות זה תמיד חומת אש, אף פעם לא CORS.
לשם ההבנה, CORS זו חסימה של צד לקוח, לא של צד שרת. כלומר מבחינת הרשת הכל עובד פיקס השרת לא חושב בכלל פעמיים לפי הref או כל דבר אחר, ןלולי הpreflight שנועד לחסוך התשובה אפילו הייתה כבר מגיעה למחשב לפני השגיאה ורק אז הדפדפן חוסם לJS אפשרות לגשת אליה. בcurl או כלי אחר חוץ מהדפדפן התשובה מתקבלת יופי, אין מושג של CORS.