HTTP/HTTPS — پروتکلهای بنیادین انتقال داده هستند که اساس تمام ارتباطات در اینترنت و برنامههای موبایل را تشکیل میدهند. HTTP (HyperText Transfer Protocol) قالب درخواستها و پاسخها بین کلاینت و سرور را تعریف میکند، و HTTPS (HTTP Secure) رمزنگاری را از طریق پروتکلهای TLS (Transport Layer Security) یا SSL (Secure Sockets Layer) به آن اضافه میکند. طبق Google Transparency Report (2025)، بیش از 95٪ از کل ترافیک وب در جهان در حال حاضر از HTTPS استفاده میکند، و مرورگرهای Chrome و Safari سایتهای HTTP را به عنوان ناامن علامتگذاری میکنند. درک تفاوتهای بین HTTP و HTTPS، ساختار درخواستها و کدهای وضعیت — حداقل لازم برای هر توسعهدهنده برنامههای موبایل است که با درخواستهای شبکه کار میکند.
نکات اصلی
HTTP (HyperText Transfer Protocol) — پروتکل لایه کاربردی مدل OSI است که برای انتقال اسناد ابرمتنی و سایر دادهها در وب جهانی طراحی شده است. HTTP که توسط تیم برنرز-لی در سال 1989 توسعه یافت، چندین نسخه را پشت سر گذاشته است: از HTTP/0.9 (فقط درخواستهای GET و پاسخهای HTML) تا HTTP/2 و HTTP/3 مدرن. پروتکل بر اساس طرح درخواست-پاسخ کار میکند: کلاینت درخواستی به سرور ارسال میکند، سرور آن را پردازش کرده و پاسخ را برمیگرداند.
HTTPS (HTTP Secure) — افزونه پروتکل HTTP است که لایه رمزنگاری را از طریق TLS (Transport Layer Security) اضافه میکند. HTTPS یک پروتکل جداگانه نیست — ترکیبی از HTTP و TLS است. دادههای منتقل شده از طریق HTTPS در سمت کلاینت رمزنگاری و در سرور رمزگشایی میشوند که آنها را برای رهگیری و جعل غیرقابل دسترس میکند. HTTPS همچنین احراز هویت سرور را از طریق گواهیهای SSL/TLS فراهم میکند و تضمین میکند که کلاینت به سرور واقعی متصل میشود، نه به مهاجم.
تفاوت کلیدی بین HTTP و HTTPS امنیت است. HTTP دادهها را به صورت متن باز منتقل میکند: هر گره شبکه بین کلاینت و سرور میتواند محتوای درخواست یا پاسخ را بخواند. HTTPS تمام محتوا از جمله URL، هدرها و بدنه درخواست را رمزنگاری میکند و فقط آدرس IP سرور و پورت اتصال را قابل مشاهده میگذارد. برای برنامههای موبایل که از طریق شبکههای Wi-Fi عمومی کار میکنند، HTTPS یک الزام امنیتی اجباری است.
HTTP — پروتکل بدون حالت (stateless) است که روی TCP/IP کار میکند. کلاینت یک اتصال TCP با سرور برقرار میکند (معمولاً روی پورت 80 برای HTTP یا 443 برای HTTPS)، درخواست HTTP ارسال میکند، پاسخ HTTP دریافت میکند و اتصال را میبندد (در HTTP/1.1 اتصال میتواند دوباره استفاده شود). هر تعامل بین کلاینت و سرور شامل یک درخواست و پاسخ است. بدون حالت بودن به این معنی است که سرور اطلاعاتی درباره درخواستهای قبلی کلاینت ذخیره نمیکند — هر درخواست به طور مستقل پردازش میشود.
فرآیند تعامل HTTP شامل مراحل زیر است:
یک ویژگی مهم HTTP idempotent بودن متدها است. GET، HEAD، PUT، DELETE و OPTIONS idempotent هستند: اجرای مکرر همان درخواست وضعیت سرور را پس از اولین اجرا تغییر نمیدهد. POST، PATCH و CONNECT idempotent نیستند — هر فراخوانی میتواند منبع جدیدی ایجاد کند یا وضعیت را تغییر دهد. برای توسعه موبایل درک idempotent بودن حیاتی است: هنگام ارسال مجدد درخواست به دلیل خطای شبکه، کلاینت باید بداند که آیا تکرار درخواست ایمن است یا خیر.
HTTPS از پروتکل رمزنگاری TLS (Transport Layer Security) برای محافظت از دادههای ارسالی استفاده میکند. TLS — جانشین SSL (Secure Sockets Layer) است که توسط شرکت Netscape در سال 1995 توسعه یافت. نسخههای SSL 2.0 و 3.0 قدیمی و ناامن محسوب میشوند؛ نسخههای مدرن TLS 1.2 (منتشر شده در 2008) و TLS 1.3 (منتشر شده در 2018) به طور گسترده استفاده میشوند. TLS 1.3 به ویژه زمان برقراری اتصال را از 2 round-trips به 1 کاهش میدهد که بارگذاری را در دستگاههای موبایل به طور قابل توجهی سرعت میبخشد.
فرآیند دست دادن TLS (handshake) شامل مراحل زیر است:
بررسی گواهی SSL/TLS — مرحله حیاتی برای امنیت است. کلاینت بررسی میکند که گواهی: منقضی نشده باشد، توسط مرکز صدور گواهی معتبر (CA) امضا شده باشد، با دامنه در URL مطابقت داشته باشد و لغو نشده باشد (از طریق CRL یا OCSP). در برنامههای موبایل توصیه میشود از Certificate Pinning — اتصال به گواهی خاص یا کلید عمومی سرور استفاده کنید. این کار از حملات MITM حتی در صورت به خطر افتادن CA جلوگیری میکند. با این حال pinning نیاز به احتیاط دارد: هنگام تغییر گواهی، برنامه باید از قبل بهروزرسانی شود.
درخواست HTTP از سه بخش تشکیل شده است: خط شروع (request line)، هدرها (headers) و بدنه اختیاری (body). خط شروع شامل متد HTTP، URL درخواست و نسخه HTTP است. هدرها ابرداده را منتقل میکنند: نوع محتوا، توکنهای احراز هویت، تنظیمات کش. بدنه فقط در متدهایی که داده ارسال میکنند (POST، PUT، PATCH) وجود دارد و در GET و DELETE وجود ندارد.
مثال درخواست HTTP به REST API:
POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Cache-Control: no-cache
{
"name": "آنا",
"email": "anna@example.com"
}
پاسخ HTTP ساختار مشابهی دارد: خط شروع با نسخه HTTP و کد وضعیت، هدرها و بدنه. کد وضعیت — عددی سه رقمی که نتیجه پردازش درخواست را تعیین میکند. هدرهای پاسخ شامل Content-Type، Content-Length، Cache-Control، Set-Cookie و موارد دیگر هستند. بدنه پاسخ شامل دادههای درخواست شده در قالبی است که در Content-Type مشخص شده (معمولاً JSON برای API، HTML برای صفحات وب، تصاویر برای محتوای رسانهای).
هدرها نقش حیاتی در کار HTTP دارند. Content-Type و Accept فرمت داده را مدیریت میکنند. Authorization توکنهای دسترسی را منتقل میکند. Cache-Control کش را مدیریت میکند. هدرهای CORS (Access-Control-Allow-Origin) دسترسی از دامنههای دیگر را در مرورگرها کنترل میکنند. User-Agent برنامه کلاینت را شناسایی میکند. برای برنامههای موبایل هدرهای مدیریت کش اهمیت ویژهای دارند — آنها به کاهش حجم دادههای منتقل شده و بهبود عملکرد در سیگنال ضعیف کمک میکنند.
کدهای وضعیت HTTP به پنج کلاس تقسیم میشوند که با رقم اول مشخص میشوند: 1xx (اطلاعاتی)، 2xx (موفقیت)، 3xx (تغییر مسیر)، 4xx (خطای کلاینت)، 5xx (خطای سرور). درک این کدها برای پردازش صحیح پاسخها در برنامه موبایل ضروری است: 2xx به معنای موفقیت است و دادهها قابل نمایش هستند، 4xx نشاندهنده مشکل در درخواست است (باید خطا به کاربر نشان داده شود)، 5xx — مشکل در سرور است (باید درخواست بعداً تکرار شود).
| کد | نام | توضیحات | اقدام کلاینت |
|---|---|---|---|
| 200 | OK | درخواست موفق | پردازش داده |
| 201 | Created | منبع ایجاد شد | بهروزرسانی UI |
| 301 | Moved Permanently | منبع به URL جدید منتقل شد | بهروزرسانی URL در کد |
| 400 | Bad Request | درخواست نامعتبر | نمایش خطای اعتبارسنجی |
| 401 | Unauthorized | احراز هویت لازم است | هدایت به صفحه ورود |
| 404 | Not Found | منبع یافت نشد | نمایش 404 |
| 429 | Too Many Requests | محدودیت درخواست exceeded | تکرار با تأخیر |
| 500 | Internal Server Error | خطای سرور | بعداً تکرار کنید |
برای برنامههای موبایل مدیریت کد 401 Unauthorized اهمیت ویژهای دارد. پس از دریافت این کد، کلاینت باید سعی کند توکن دسترسی را از طریق Refresh Token بهروز کند و درخواست اصلی را تکرار کند. اگر بهروزرسانی توکن نیز 401 برگرداند، کاربر باید به صفحه ورود هدایت شود. این منطق معمولاً در Interceptor (OkHttp) یا لایه middleware کلاینت شبکه پیادهسازی میشود.
HTTP/1.1، منتشر شده در سال 1999، هنوز هم نسخه پرکاربرد پروتکل است. عیب اصلی آن — head-of-line blocking: درخواستها به یک سرور به صورت ترتیبی انجام میشوند، هر کدام منتظر اتمام قبلی است. برای دور زدن این محدودیت، مرورگرها 6–8 اتصال TCP موازی به یک دامنه باز میکنند که بار سرور و مصرف حافظه را افزایش میدهد. HTTP/1.1 همچنین هدرها را به صورت رمزنگاری نشده منتقل میکند و از server push پشتیبانی نمیکند.
HTTP/2 (2015) مشکل مسدودسازی را از طریق مالتیپلکسینگ حل میکند — چندین جریان داده به طور همزمان از طریق یک اتصال TCP منتقل میشوند. سرور میتواند منابع را قبل از درخواست کلاینت ارسال کند (server push). HTTP/2 همچنین هدرها را از طریق HPACK فشرده میکند که حجم دادههای منتقل شده را کاهش میدهد. برای برنامههای موبایل HTTP/2 بسیار مفید است: یک اتصال جایگزین چندین اتصال میشود و زمان دست دادن TLS و مصرف باتری را کاهش میدهد.
HTTP/3 (2022) — آخرین نسخه پروتکل است که به جای TCP از QUIC (Quick UDP Internet Connections) استفاده میکند. QUIC روی UDP کار میکند و مشکل head-of-line blocking را در سطح پروتکل حمل و نقل از بین میبرد. HTTP/3 زمان برقراری اتصال را در بهترین حالت به 0 round-trips (در اتصالات مجدد) و در اولین اتصال به 1 round-trip کاهش میدهد که بسیار سریعتر از HTTP/2 با 2–3 round-trips است. برای دستگاههای موبایل HTTP/3 هنگام جابجایی بین Wi-Fi و شبکه همراه بسیار مؤثر است – اتصال قطع نمیشود زیرا QUIC از شناسه اتصال به جای آدرس IP استفاده میکند.
استفاده از HTTPS در برنامههای موبایل — یک توصیه نیست، بلکه الزامی اجباری است. از Android 9 (API 28) و iOS 9 (ATS — App Transport Security) به بعد، تمام درخواستهای شبکه به طور پیشفرض باید از HTTPS استفاده کنند. درخواستهای HTTP توسط سیستم مسدود میشوند و برای مجاز کردن آنها نیاز به استثنای صریح در تنظیمات برنامه است. Google Play Store و App Store برنامههایی را که دادههای محرمانه از جمله رمز عبور، توکنها و اطلاعات شخصی را از طریق HTTP منتقل میکنند، رد میکنند.
تنظیمات HTTPS در برنامه موبایل در Android شامل موارد زیر است:
<!-- AndroidManifest.xml — مجوز درخواستهای شبکه -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- network_security_config.xml — پیکربندی HTTPS -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">api.example.com</domain>
<pin-set expiration="2027-12-31">
<pin digest="SHA-256">rDjsFv3bGf...</pin>
</pin-set>
</domain-config>
</network-security-config>
در iOS تنظیمات مشابه از طریق Info.plist با کلید NSAppTransportSecurity انجام میشود. برای اشکالزدایی ترافیک HTTPS در برنامههای موبایل از ابزارهای پروکسی استفاده میشود: Charles Proxy، Proxyman یا mitmproxy. آنها نیاز به نصب گواهی SSL معتبر روی دستگاه دارند. در بیلدهای تولیدی باید امکان اشکالزدایی غیرفعال شود و Certificate Pinning به درستی پیکربندی شده باشد. استفاده از OkHttp در Android با CertificatePinner یا TrustManager در iOS با SecTrustEvaluate — رویکردهای استاندارد برای پیادهسازی pinning هستند.
یک جنبه مهم امنیت HTTPS در توسعه موبایل — SSL Pinning است. بدون pinning برنامه به هر گواهی امضا شده توسط CA شناخته شده اعتماد میکند. اگر CA به خطر بیفتد، مهاجم میتواند ترافیک برنامه را رهگیری کند. Pinning برنامه را به گواهی خاص یا کلید عمومی سرور متصل میکند. هنگام تغییر گواهی در سرور باید بهروزرسانی برنامه منتشر شود، بنابراین pinning با احتیاط برنامهریزی میشود — به گواهی CA بالادست متصل میشوند یا از چندین کلید یدکی استفاده میکنند.
سوالات متداول
HTTP دادهها را به صورت متن باز منتقل میکند، HTTPS ترافیک را از طریق TLS/SSL رمزنگاری میکند. HTTPS از پورت 443 استفاده میکند، HTTP — از پورت 80. HTTPS نیاز به گواهی SSL دارد و محرمانگی، یکپارچگی و احراز هویت سرور را فراهم میکند.
بله، از Android 9 و iOS 9 به بعد HTTPS به طور پیشفرض اجباری است. درخواستهای HTTP توسط سیستم مسدود میشوند مگر اینکه صریحاً در تنظیمات مجاز شده باشند. فروشگاههای برنامه برای تمام درخواستهای شبکه با دادههای محرمانه HTTPS را الزامی میکنند.
گواهی SSL — سند دیجیتالی است که اصالت سرور را تأیید میکند. توسط مراکز صدور گواهی (CA) صادر میشود: Let’s Encrypt (رایگان)، Sectigo، DigiCert. برای توسعه میتوان از گواهی خودامضا استفاده کرد.
HTTP/2 از مالتیپلکسینگ (چندین درخواست از طریق یک اتصال TCP)، فشردهسازی هدر (HPACK) و server push پشتیبانی میکند. برخلاف HTTP/1.1 که درخواستها یکدیگر را مسدود میکنند (head-of-line blocking)، HTTP/2 دادهها را به صورت موازی ارسال میکند.
Certificate Pinning — تکنیک امنیتی که در آن برنامه فقط به گواهی یا کلید عمومی مشخصی اعتماد میکند. برای برنامههایی با الزامات امنیتی بالا (بانکداری، پرداختها، دادههای پزشکی) توصیه میشود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید