🔶 یه ایده خوبی به ذهنم رسید که در خود سایت ترب پیاده نشده است و دوست دارم یه دسکتاپ برایش بنویسم ولی به api خود ترب دسترسی ندارم.
میگن ترب api های خود در اسکریپت های که استفاده شده بلاک می کنه نمی دونم درسته یا نه
مطمئنا این ایده ای که دارم برای فروشندگان کاربردی است.
@TheRaymondDev
میگن ترب api های خود در اسکریپت های که استفاده شده بلاک می کنه نمی دونم درسته یا نه
مطمئنا این ایده ای که دارم برای فروشندگان کاربردی است.
@TheRaymondDev
❤8
Forwarded from Md Daily (Mahan)
خطای CORS باگ نیست؛ داره دقیقاً از وباپلیکیشن شما محافظت میکنه.
اگه با API کار کرده باشی، حتماً با این ارور اعصابخُردکن برخورد کردی:
پیغام Access to fetch has been blocked by CORS policy (مسدود شدن درخواست بهخاطر سیاست CORS)
آدرس درسته، کدت سالمه، اما مرورگر اجازه نمیده. نکته مهم اینه: CORS خطا نیست؛ یه مکانیزم امنیتیه که درست داره کارش رو انجام میده.
بریم ببینیم داستان چیه👇
اول اصل ماجرا: قانون SOP
مرورگر یه قانون پایه داره به اسم Same-Origin Policy یا SOP (سیاست هممبدأ). طبق این قانون، یه سایت فقط اجازه داره به پاسخِ درخواستهایی دسترسی داشته باشه که از همون مبدأ اومدن.
پس CORS دقیقاً چیکار میکنه؟
حالا CORS (اشتراکگذاری منابع بین مبدأهای مختلف) راهیه که سرور میتونه بهصورت کنترلشده به مرورگر بگه: «اوکیه، اجازه بده این مبدأ خاص به پاسخ من دسترسی داشته باشه.»
پس CORS دشمن SOP نیست. یه جورایی مکمل هم دیگه هستن
چرا اصلاً این محدودیت لازمه؟ (سناریوی بانک)
فرض کن توی یه تب وارد حساب بانک شدی و لاگین هستی. کوکیها (اطلاعات نشست کاربر) ذخیره شدن.
حالا توی یه تب دیگه، یه سایت مخرب باز میکنی و این کد اجرا میشه:
مرورگر ممکنه درخواست رو با کوکیهای تو بفرسته، اما نکته حیاتی اینجاست:
بدون CORS، سایت مخرب نباید بتونه پاسخ سرور رو بخونه.
اینجا SOP و CORS وارد میشن و میگن: «درخواست شاید بره، ولی دسترسی به پاسخ ممنوعه.»
نتیجه: اطلاعات حساس کاربر لو نمیره.
🌐 دقیقاً "Origin" یا مبدأ یعنی چی؟
مبدأ یا Origin فقط دامین نیست. مرورگر سه چیز رو با هم چک میکنه:
پروتکل (http یا https)
هاست (نام دامنه مثل site.com)
پورت (مثل 80، 443، 5173)
اگه یکی فرق کنه، Origin فرق کرده:
❌ https://site.dev vs https://api.site.dev (هاست متفاوت)
❌ https://site.dev vs https://site.dev (پروتکل متفاوت)
❌ localhost:3000 vs localhost:8000 (پورت متفاوت)
✅ نکته: آدرسهایی مثل site.com/page1 و site.com/page2 چون فقط مسیر (Path) متفاوتی دارن، "Same-Origin" حساب میشن و مشکلی ندارن.
🤔 چرا توی Postman یا Curl کار میکنه ولی توی مرورگر نه؟
چون CORS فقط توسط مرورگر enforce میشه (اعمال میشه).
حالا Postman و curl مشمول SOP نیستن. مهم نیست کوکی دارن یا نه؛ اصلاً این قوانین براشون وجود نداره.
مرورگر اما جاییه که کدِ هزاران سایت مختلف کنار هم اجرا میشه، پس مجبورِ سختگیر باشه.
✈️ داستان Preflight چیه؟
برای درخواستهای حساس (مثل PUT، DELETE یا ارسال JSON)، مرورگر ریسک نمیکنه.
اول یه درخواست OPTIONS (درخواست آزمایشی) میفرسته و از سرور میپرسه:
«اجازه هست با این متد و این هدرها درخواست بدم؟»
اگه سرور با هدرهای مناسب جواب بده، درخواست اصلی ارسال میشه.
این فقط برای non-simple request (درخواستهای غیرساده) اتفاق میافته؛ GETهای ساده معمولاً preflight ندارن.
🛠 چطور حلش کنیم؟
قاعده طلایی:
مسئله CORS از فرانتاند (کد جاوااسکریپت سمت کاربر) قابل حل نیست.
سروره که باید صریحاً بگه به کدوم Origin اجازه دسترسی میده:
💡 حرف آخر
دفعه بعد که ارور CORS دیدی، عصبی نشو.
این مرورگره که داره از اطلاعات کاربر محافظت میکنه.
راهحل همیشه طرفه سرور.
—-
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
اگه با API کار کرده باشی، حتماً با این ارور اعصابخُردکن برخورد کردی:
پیغام Access to fetch has been blocked by CORS policy (مسدود شدن درخواست بهخاطر سیاست CORS)
آدرس درسته، کدت سالمه، اما مرورگر اجازه نمیده. نکته مهم اینه: CORS خطا نیست؛ یه مکانیزم امنیتیه که درست داره کارش رو انجام میده.
بریم ببینیم داستان چیه
اول اصل ماجرا: قانون SOP
مرورگر یه قانون پایه داره به اسم Same-Origin Policy یا SOP (سیاست هممبدأ). طبق این قانون، یه سایت فقط اجازه داره به پاسخِ درخواستهایی دسترسی داشته باشه که از همون مبدأ اومدن.
پس CORS دقیقاً چیکار میکنه؟
حالا CORS (اشتراکگذاری منابع بین مبدأهای مختلف) راهیه که سرور میتونه بهصورت کنترلشده به مرورگر بگه: «اوکیه، اجازه بده این مبدأ خاص به پاسخ من دسترسی داشته باشه.»
پس CORS دشمن SOP نیست. یه جورایی مکمل هم دیگه هستن
چرا اصلاً این محدودیت لازمه؟ (سناریوی بانک)
فرض کن توی یه تب وارد حساب بانک شدی و لاگین هستی. کوکیها (اطلاعات نشست کاربر) ذخیره شدن.
حالا توی یه تب دیگه، یه سایت مخرب باز میکنی و این کد اجرا میشه:
fetch("https://bank.com/api/balance")مرورگر ممکنه درخواست رو با کوکیهای تو بفرسته، اما نکته حیاتی اینجاست:
بدون CORS، سایت مخرب نباید بتونه پاسخ سرور رو بخونه.
اینجا SOP و CORS وارد میشن و میگن: «درخواست شاید بره، ولی دسترسی به پاسخ ممنوعه.»
نکته: جمله دسترسی به پاسخ ممنوعه برای متدهای GET درسته اما برای متدهای تغییردهنده مثل POST یا DELETE که اثر جانبی (Side Effect) دارن، خطر اصلی ارسال خودِ درخواست وجود داره (نه فقط صرف دسترسی به پاسخ). برای همین Preflight Request درست شد تا از رسیدنِ درخواستهای غیرایمن به سرور جلوگیری کنن، نه اینکه فقط جلوی خوندن پاسخ رو بگیره. که در ادامه بیشتر راجبش توضیح دادم.
نتیجه: اطلاعات حساس کاربر لو نمیره.
مبدأ یا Origin فقط دامین نیست. مرورگر سه چیز رو با هم چک میکنه:
پروتکل (http یا https)
هاست (نام دامنه مثل site.com)
پورت (مثل 80، 443، 5173)
اگه یکی فرق کنه، Origin فرق کرده:
❌ https://site.dev vs https://api.site.dev (هاست متفاوت)
❌ https://site.dev vs https://site.dev (پروتکل متفاوت)
❌ localhost:3000 vs localhost:8000 (پورت متفاوت)
چون CORS فقط توسط مرورگر enforce میشه (اعمال میشه).
حالا Postman و curl مشمول SOP نیستن. مهم نیست کوکی دارن یا نه؛ اصلاً این قوانین براشون وجود نداره.
مرورگر اما جاییه که کدِ هزاران سایت مختلف کنار هم اجرا میشه، پس مجبورِ سختگیر باشه.
برای درخواستهای حساس (مثل PUT، DELETE یا ارسال JSON)، مرورگر ریسک نمیکنه.
اول یه درخواست OPTIONS (درخواست آزمایشی) میفرسته و از سرور میپرسه:
«اجازه هست با این متد و این هدرها درخواست بدم؟»
اگه سرور با هدرهای مناسب جواب بده، درخواست اصلی ارسال میشه.
این فقط برای non-simple request (درخواستهای غیرساده) اتفاق میافته؛ GETهای ساده معمولاً preflight ندارن.
قاعده طلایی:
مسئله CORS از فرانتاند (کد جاوااسکریپت سمت کاربر) قابل حل نیست.
سروره که باید صریحاً بگه به کدوم Origin اجازه دسترسی میده:
Access-Control-Allow-Origin: https://my-app.com (دامنه مجاز)⚠️ هشدار مهم: Wildcard (*) راهحل نیست
یکی از رایجترین اشتباهها برای «حل» CORS اینه که روی سرور بنویسن:
Access-Control-Allow-Origin: *
این کار فقط در سادهترین حالتها بیخطره. به محض اینکه Credentials (کوکی، سشن، Authorization header) وارد بازی بشن، wildcard عملاً امنیت رو نابود میکنه.
مرورگر حتی طبق استاندارد اجازه نمیده * با Access-Control-Allow-Credentials: true همزمان استفاده بشه، چون یعنی: «هر سایتی به اطلاعات احراز هویتشدهی کاربر دسترسی داشته باشه».
راه درست اینه که Originها رو صریح و محدود تعریف کنی، نه اینکه در رو به روی همه باز بذاری و CORS اگر بد تنظیم بشه، دیگه مکانیزم امنیتی نیست میشه توهم امنیت.
در محیط توسعه، ابزارهایی مثل dev proxy فقط درخواست رو server-side (سمت سرور) میکنن و CORS رو دور نمیزنن، فقط مسیر درخواست رو عوض میکنن.
دفعه بعد که ارور CORS دیدی، عصبی نشو.
این مرورگره که داره از اطلاعات کاربر محافظت میکنه.
راهحل همیشه طرفه سرور.
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
اشتراک رایگان دو ساله ChatGPT:
برید تو سایت https://em.bjedu.tech/en و یک ایمیل https://erzi.me بسازید. کد Credential رو جایی ذخیره کنید تا اگر بعداً دوباره کد OTP خواست به ایمیلتون دسترسی داشته باشید. با ویپیانِ آمریکا و همین ایمیل، یک اکانت جدید ChatGPT بسازید. تمام.
@TheRaymondDev
👍4
🔶 شرکت چینی لیسوان ارسال کارتهای گرافیک سری G100 را به مشتریان داخلی آغاز کرد؛ اقدامی که میتواند نشانهی نزدیکبودن عرضهی رسمی این گرافیکها در بازار چین و ورود جدی شرکت مورد اشاره به رقابت با ایامدی و انویدیا باشد.
#خبر
@TheRaymondDev
#خبر
@TheRaymondDev
Wccftech
China’s Long-Awaited Lisuan G100 GPUs Begin Shipping, Bringing a Domestic NVIDIA/AMD Challenger Closer to Retail Market
China's Lisuan 7G100, the GPU touted as a competitor to NVIDIA's RTX 4060, has now begun shipping to Chinese customers.
👏5❤3
🔶 کیم دات کام موسس مگا آپلود قصد دارد که با هوش مصنوعی مگا آپلود را احیا کند که در سال ۲۰۱۲ به جرم نقص کپی رایت تعطیل شد.
این برنامه شامل آپلود های کاملاً رمزگذاری شده، با استفاده از میزبانی IPFS. همراه با FileShop تا بتوانید آثار خود را از طریق رمز ارز بفروشید و به صورت آنی به دیگران برای بازاریابی محصولاتتان پول پرداخت کنید و یک سیستم عامل بدون در پشتی دریافت خواهید کرد که میتواند تمام نرمافزار ها را روی آن اجرا کند.
#خبر
#توییت
@TheRaymondDev
این برنامه شامل آپلود های کاملاً رمزگذاری شده، با استفاده از میزبانی IPFS. همراه با FileShop تا بتوانید آثار خود را از طریق رمز ارز بفروشید و به صورت آنی به دیگران برای بازاریابی محصولاتتان پول پرداخت کنید و یک سیستم عامل بدون در پشتی دریافت خواهید کرد که میتواند تمام نرمافزار ها را روی آن اجرا کند.
#خبر
#توییت
@TheRaymondDev
👍8❤2
Forwarded from Linuxor ?
خیلیا شاکی میشن که چرا هوش مصنوعی های چتی بعد یه مدت که باهاشون چت میکنیم اوسگول میشن؟
این چت باتا ساختارشون جوریه که توی هر چت فقط تعداد محدودی کلمه موسوم به Context Window رو میتونن پردازش کنن، و وقتی چت طولانی میشه چون حجم چت بالا رفته مجبورن خلاصه چت های بالا که باهاش کردید رو به صورت فکت های تک خطی ذخیره کنن مثلا سه ساعت چت کردید اون چیزی که میبینه اینه :
"کاربر درباره حلقهها و توابع در پایتون پرسیده و مثالهای کد ارائه شده"
پس اصلا جزئیاتی از چت های بالا نداره بنده خدا و مجبوره وانمود کنه این چت همون چته تا تجربه کاربری شما به هم نخوره.
@Linuxor
این چت باتا ساختارشون جوریه که توی هر چت فقط تعداد محدودی کلمه موسوم به Context Window رو میتونن پردازش کنن، و وقتی چت طولانی میشه چون حجم چت بالا رفته مجبورن خلاصه چت های بالا که باهاش کردید رو به صورت فکت های تک خطی ذخیره کنن مثلا سه ساعت چت کردید اون چیزی که میبینه اینه :
"کاربر درباره حلقهها و توابع در پایتون پرسیده و مثالهای کد ارائه شده"
پس اصلا جزئیاتی از چت های بالا نداره بنده خدا و مجبوره وانمود کنه این چت همون چته تا تجربه کاربری شما به هم نخوره.
@Linuxor
👍4👏1
🔶 اضافه کردن زبان Rust به کرنل لینوکس با موفقیت به پایان رسید و حالا Rust رسماً در کنار C پشتیبانیشده و در کرنل قرار گرفته است.
#خبر
#لینوکس
@TheRaymondDev
#خبر
#لینوکس
@TheRaymondDev
LWN.net
The (successful) end of the kernel Rust experiment
The topic of the Rust experiment was just discussed at the annual Maintainers Summit. The cons [...]
👍11😢1
🔶 از اول ژانویه 2026، بلغارستان با نرخ تبدیل هر 1 یورو = 1.95583 لو، وارد حوزه مالی یورو میشود و لو بلغاری منسوخ میشود.
#خبر
@TheRaymondDev
#خبر
@TheRaymondDev
👍3
🔸Medium Unlocker is an android app designed to access Medium articles without any paywalls.
medium-unlocker.inulute.com
github:
https://github.com/inulute/medium-unlocker
@TheRaymondDev
medium-unlocker.inulute.com
github:
https://github.com/inulute/medium-unlocker
@TheRaymondDev
💔8
Forwarded from Milwad Khosravi | میلاد خسروی
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
🔶 دارم کم کم امیدم به زرین پال از دست میدم
دو هفته اش که سایتم در انتظار تایید شاپرک هست.
نمی دونم برم درگاه های دیگه امتحان کنم
همین بیت پی برای تایید مجدد ۲۵۰ تومان پول می خواد
ببینم زیبال چجوریه
@TheRaymondDev
دو هفته اش که سایتم در انتظار تایید شاپرک هست.
نمی دونم برم درگاه های دیگه امتحان کنم
همین بیت پی برای تایید مجدد ۲۵۰ تومان پول می خواد
ببینم زیبال چجوریه
@TheRaymondDev
💔2
🔶 باگ عجیب اینماد
حتی شماره تماس هم نمی تونم احراز هویت کنم.
تمدید اینماد برای آدم اعصاب نمی زاره و هر روز بازی در میاره
@TheRaymondDev
حتی شماره تماس هم نمی تونم احراز هویت کنم.
تمدید اینماد برای آدم اعصاب نمی زاره و هر روز بازی در میاره
@TheRaymondDev
👍7
🔶 طبق آخرین دادههای وزارت آموزش و پرورش کره جنوبی، تاکنون در مجموع ۴۰۰۸ مدرسه در سراسر کشور به دلیل کمبود دانشآموز تعطیل شدهاند.
در میان مدارسی که تعطیل شدهاند، مدارس ابتدایی با ۳۶۷۴ مدرسه اکثریت را تشکیل میدهند و پس از آن مدارس راهنمایی با ۲۶۴ مدرسه و دبیرستانها با ۷۰ مدرسه قرار دارند.
تنها در پنج سال گذشته، ۱۵۸ مدرسه تعطیل شدهاند و پیشبینی میشود که ۱۰۷ مدرسه دیگر نیز در پنج سال آینده تعطیل شوند
#خبر
@TheRaymondDev
در میان مدارسی که تعطیل شدهاند، مدارس ابتدایی با ۳۶۷۴ مدرسه اکثریت را تشکیل میدهند و پس از آن مدارس راهنمایی با ۲۶۴ مدرسه و دبیرستانها با ۷۰ مدرسه قرار دارند.
تنها در پنج سال گذشته، ۱۵۸ مدرسه تعطیل شدهاند و پیشبینی میشود که ۱۰۷ مدرسه دیگر نیز در پنج سال آینده تعطیل شوند
#خبر
@TheRaymondDev
🥰4👏1🆒1
🔶 اینماد راییوم به ۲ سال دیگر ارتقا پیدا کرد.
هزینه های تمدید به ترتیب زیر:
- پست ملی ایران : ۱۰۸۰۰۰ تومان
- تمدید اینماد : ۱۷۵۰۰۰ تومان
جمع کل : ۲۸۳۰۰۰ تومان
فقط یک ستاره داده است.
@TheRaymondDev
هزینه های تمدید به ترتیب زیر:
- پست ملی ایران : ۱۰۸۰۰۰ تومان
- تمدید اینماد : ۱۷۵۰۰۰ تومان
جمع کل : ۲۸۳۰۰۰ تومان
فقط یک ستاره داده است.
@TheRaymondDev
👍2