نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی
  • خانه
  • برنامه ها
  • PHP: درخواست های POST و GET برای مبتدیان. با استفاده از روش های GET و POST

PHP: درخواست های POST و GET برای مبتدیان. با استفاده از روش های GET و POST

استفاده از متدهای GET و POST در PHP را به سختی می توان بیش از حد تخمین زد، زیرا این روش ها تقریباً در هر سایتی یافت می شوند. قبل از مطالعه مطالبی که در زیر توضیح داده شده است، به شما توصیه می کنم که با برچسب html آشنا شوید

. بیایید هر یک از این روش ها را با جزئیات بررسی کنیم.

روش دریافت

متد GET از یک رشته URL برای ارسال داده استفاده می کند. ممکن است متوجه URL های طولانی و مبهم شده باشید. مثلا: function.php?login=Alex&email=dezyakin. در این حالت داده ها در function.php پردازش می شوند. بعد از علامت سوال "?" یک شمارش پارامترهای منتقل شده وجود دارد (پارامترها با "&" از هم جدا می شوند) با مقادیر: پارامتر ورود بر روی Alex و متغیر ایمیل روی dezyakin تنظیم شده است. داده ها در آرایه superglobal $_GET ذخیره می شوند. نمونه ای از استفاده از روش GET در زیر نشان داده شده است:

وارد شدن : پست الکترونیک : با استفاده از آرایه superglobal $_GET، مقادیر دریافتی را نمایش می دهیم:*/echo"
login = ". $_GET["login"] ; echo "
email = ". $_GET["email"] ; ?>

به نحوه خواندن مقادیر از $_GET superglobal توجه کنید: $_GET["variable_name"]. در مثال ما، نام متغیرها به شکل (name=login و name=email) اعلام شد.

مشاوره:
قبل از پردازش مقادیر دریافتی، به شما توصیه می کنم وجود آنها را از طریق توابع بررسی کنید isset(نام_متغیر)یا خالی (نام_متغیر)- این توابع در درس 2 قبلی پوشش داده شد: متغیرها در PHP. مثلا:

وجود را با isset بررسی کنید: if isset ($_GET["login"] ) ( بیانیه های پردازش ورود ... } //یا وجود را با خالی بررسی کنید:اگر خالی باشد ($_GET["ایمیل"] ) ( اپراتورهای پردازش ایمیل ... } ?>

در فرم می توانید نام فایلی که مقادیر ارسال شده را پردازش می کند را مشخص کنید. این کار با استفاده از ویژگی فرم عمل انجام می شود که می توان آدرس این فایل را به آن اختصاص داد. به طور پیش فرض، این فایل به فایل فعلی اختصاص داده می شود (یعنی در فایلی که فرم در آن قرار دارد پردازش می شود). در اینجا یک مثال است که در آن داده های فرم برای پردازش به فایل srcipt.php منتقل می شود:

وارد شدن : پست الکترونیک :

فایل script.php باید حاوی نوعی کنترل کننده اطلاعات باشد، در غیر این صورت اطلاعات به خالی ارسال می شود.

روش GET معایب زیادی دارد:

  • کاربر مقادیر پارامترهای ارسال شده را می بیند.
  • کاربر به راحتی می تواند پارامترهای ارسال شده را جعل کند.
  • انتقال نامناسب اطلاعات باینری (شما باید در قالب متن کدگذاری کنید).
  • مقدار داده های ارسالی محدود است - 8 کیلوبایت.

با توجه به معایب فوق، روش GET تنها در مواردی استفاده می شود که نیاز به انتقال حجم کمی از داده ها باشد و این داده ها به هیچ وجه طبقه بندی نمی شوند.

روش POST

روش POST با روش GET متفاوت است زیرا داده ها به صورت خصوصی ارسال می شوند. یک آرایه ابرجهانی $_POST وجود دارد که از آن می توانید داده هایی مانند این را بخوانید: $_POST["variable_name"]. مثلا:

وارد شدن : "> ایمیل: ">
با استفاده از آرایه superglobal $_POST، مقادیر پذیرفته شده را نمایش می دهیم:*/echo"
login = ". $_POST["login"] ; echo "
email = ". $_POST["email"] ; ?>

نتیجه اجرای کد بالا در شکل زیر نشان داده شده است:

همانطور که می بینید، URL هیچ پیوستی ندارد، اما با این وجود داده ها دریافت و نمایش داده شده است.

توجه داشته باشید:
1) مقدار مقادیر منتقل شده توسط روش POST به طور پیش فرض محدود و برابر با 8 مگابایت است. برای افزایش این مقدار، باید دستور post_max_size را در php.ini تغییر دهید.

2) در نسخه‌های اولیه PHP، به جای نام‌های کوتاه ابرجهانی‌های $_GET و $_POST، از نام‌های طولانی‌تر استفاده می‌شد: $HTTP_GET_VARS و $HTTP_POST_VARS. آنها به طور پیش فرض در php 5 غیرفعال هستند، اما می توانید آنها را در فایل پیکربندی php.ini با پارامتر register_long_arrays فعال کنید. در نسخه php 6 این نام های طولانی در دسترس نخواهند بود.

3) قبل از پردازش متغیرها از $_POST، به شما توصیه می کنم که وجود متغیرها را بررسی کنید، همانطور که با روش GET انجام شد.

متدهای GET و POST در HTTP و HTTPS دو روش محبوبی هستند که برای انتقال داده ها از یک کلاینت به سرور با استفاده از پروتکل HTTP (پروتکل انتقال ابرمتن) استفاده می شوند. از GET و POST می توان برای ارسال درخواست و دریافت پاسخ استفاده کرد، اما تفاوت قابل توجهی بین این دو وجود دارد.

تفاوت بین درخواست های GET و POST در HTTP یا HTTPS یک سوال رایج در هر مصاحبه برنامه نویسی وب است. از آنجایی که HTML به فناوری وب سرور مانند جاوا، ASP یا PHP وابسته نیست و HTTP پروتکل اصلی در فضای اینترنت است، اهمیت درک روش های GET و POST را نمی توان به وضوح نادیده گرفت. در این مقاله به این خواهیم پرداخت که روش HTTP GET چیست، روش HTTP POST چیست، چه زمانی باید از یک یا آن درخواست استفاده کرد و چه تفاوتی بین آنها وجود دارد. بیایید هر مفهوم را جداگانه تحلیل کنیم.

HTML چیست؟

HTML زبانی است که برای ایجاد صفحات وب استفاده می شود. Hypertext به لینک هایی که یک صفحه HTML می تواند داشته باشد اشاره دارد. زبان نشانه گذاری به روشی اشاره دارد که تگ ها برای تعریف چیدمان صفحه و عناصر در یک صفحه استفاده می شوند.
در زیر نمونه ای از HTML است که برای تعریف یک صفحه وب پایه با عنوان و یک پاراگراف متن استفاده می شود:



<Голова>
<Название>TechTerms.com

<Тело>

این نمونه ای از یک پاراگراف در HTML است.

خط اول نوع محتوای موجود در سند را مشخص می کند., و ، که همگی در مثال بالا گنجانده شده اند. عنوان صفحه، ابرداده و پیوندهای فایل‌ها با لنگرها بین محتوای واقعی صفحه بین تگ‌ها قرار می‌گیرد. .

وب در چند دهه گذشته تغییرات زیادی را پشت سر گذاشته است، اما HTML همیشه زبان اصلی مورد استفاده برای توسعه صفحات وب بوده است. جالب است که اگرچه وب سایت ها پیشرفته تر و تعاملی تر شده اند، HTML ساده تر شده است. اگر منبع یک صفحه HTML5 را با صفحه مشابه نوشته شده در HTML 4.01 یا XHTML 1.0 مقایسه کنید، صفحه HTML5 کد کمتری خواهد داشت. این به این دلیل است که HTML مدرن برای قالب‌بندی تقریباً هر عنصر در یک صفحه، بر برگه‌های سبک آبشاری یا جاوا اسکریپت متکی است.

بسیاری از وب سایت های پویا صفحات وب را با استفاده از یک زبان برنامه نویسی سمت سرور مانند PHP یا ASP تولید می کنند. با این حال، حتی صفحات پویا نیز باید با استفاده از HTML قالب بندی شوند. بنابراین، زبان های برنامه نویسی اغلب کد HTML را تولید می کنند که به یک مرورگر وب ارسال می شود.

پروتکل HTTP Hypertext Transfer Protocol برای ارتباط بین کلاینت ها و سرورها طراحی شده است و به عنوان یک پروتکل درخواست-پاسخ عمل می کند.

مرورگر وب می تواند مشتری باشد و برنامه کاربردی در رایانه میزبان وب سایت می تواند سرور باشد.

مشتری (مرورگر) یک درخواست HTTP به سرور ارسال می کند، سرور پاسخی را برمی گرداند که حاوی اطلاعاتی در مورد وضعیت درخواست است و همچنین ممکن است حاوی محتوای درخواستی باشد.

دو روش درخواست GET و POST

دو روش متداول برای درخواست پاسخ بین مشتری و سرور:

    GET - داده ها را از منبع مشخص شده درخواست می کند.

    POST - داده ها را برای پردازش به منبع مشخص شده ارسال می کند.

ترجمه GET و POST در لغت به معنای دریافت و پس پردازش است.

درباره HTTP بیشتر بدانید

HTTP پروتکلی است که برای انتقال داده ها از طریق اینترنت استفاده می شود. این بخشی از بسته پروتکل اینترنت است و دستورات و خدمات مورد استفاده برای انتقال داده های صفحه وب را تعریف می کند.

HTTP از مدل سرویس گیرنده-سرور استفاده می کند. مشتری می تواند یک رایانه خانگی، لپ تاپ یا دستگاه تلفن همراه باشد. سرور HTTP معمولا یک میزبان وب با نرم افزار وب سرور مانند Apache یا IIS است. هنگامی که کاربر به یک وب سایت دسترسی پیدا می کند، مرورگر درخواستی را به وب سرور مناسب ارسال می کند و با یک کد وضعیت HTTP پاسخ می دهد. اگر URL معتبر باشد و اتصال برقرار شود، سرور صفحه وب و فایل‌های مرتبط را به مرورگر ارسال می‌کند.

کدهای وضعیت معمول HTTP عبارتند از:

    200 - درخواست موفقیت آمیز (صفحه وب وجود دارد).

    301 - به طور دائم حرکت می کند (اغلب به یک URL جدید هدایت می شود)

    401 - درخواست غیرمجاز (مجوز لازم است).

    500 یک خطای داخلی سرور است (اغلب به دلیل پیکربندی نادرست سرور ایجاد می شود).

در HTTP پست کنید و دریافت کنید

HTTP دستورات GET و POST را تعریف می کند که برای پردازش فرم های ارسالی در وب سایت ها استفاده می شود. دستور CONNECT برای تسهیل یک اتصال امن که با استفاده از SSL رمزگذاری شده است استفاده می شود. اتصالات HTTP رمزگذاری شده از طریق HTTPS، یک برنامه افزودنی از HTTP که برای انتقال امن داده طراحی شده است، رخ می دهد.

URL هایی که با "http://" شروع می شوند از طریق پروتکل های استاندارد انتقال ابرمتن قابل دسترسی هستند و به طور پیش فرض از پورت 80 استفاده می کنند. URL هایی که با "https://" شروع می شوند از طریق یک اتصال امن HTTPS قابل دسترسی هستند و اغلب از پورت 443 استفاده می کنند.

پست

POST مجموعه ای از بررسی های سیستمی است که توسط رایانه ها و سایر دستگاه های الکترونیکی هنگام روشن شدن آنها انجام می شود. نتایج آزمایش را می توان بر روی صفحه نمایش، خروجی از طریق LED های چشمک زن، یا به سادگی ضبط داخلی نمایش داد. در سیستم های کامپیوتری، عملیات POST در ابتدای دنباله بوت انجام می شود. اگر تمام تست ها با موفقیت انجام شود، بقیه مراحل راه اندازی به طور خودکار ادامه می یابد.

سیستم عامل های دستگاه مک و ویندوز هر بار که کامپیوتر بوت می شود یا راه اندازی مجدد می شود، POST را اجرا می کنند. اسکن سخت افزار را بررسی می کند و اطمینان می دهد که پردازنده، رم و دستگاه های ذخیره سازی به درستی کار می کنند. اگر در حین POST خطایی رخ دهد، فرآیند راه اندازی ممکن است به طور کامل متوقف یا متوقف شود و ممکن است پیامی روی مانیتور ظاهر شود. در رایانه شخصی، خطاهای POST اغلب در صفحه اطلاعات بایوس نمایش داده می شوند. آنها می توانند به عنوان کدهای رمز مانند "08" یا به عنوان یک پیام سیستمی مانند "خطای حافظه سیستم در هنگام افست" خروجی شوند. در مک، خطاهای POST اغلب با گرافیک های ساده نشان داده می شوند، مانند نماد پوشه شکسته، که نشان می دهد دستگاه بوت یافت نشد.

تظاهرات فیزیکی

در برخی موارد، صفحه کامپیوتر حتی ممکن است قبل از خطاهای POST روشن نشود. اگر این اتفاق بیفتد، ممکن است کدهای خطا از طریق چراغ های LED چشمک زن یا بوق نمایش داده شوند. به عنوان مثال، Apple iMac سه زنگ متوالی را پخش می کند، پنج ثانیه مکث می کند و پس از شناسایی رم ضعیف در هنگام راه اندازی، زنگ ها را تکرار می کند. اکثر رایانه‌های شخصی هنگامی که با خطاهای POST مواجه می‌شوند، بوق می‌زنند، اگرچه هر سازنده از کدهای خود استفاده می‌کند.

POST یک اصطلاح فنی است که فقط تکنسین های کامپیوتر به طور منظم از آن استفاده می کنند. با این حال، مخفف خوبی است زیرا به درک بهتر پیام های خطایی که ممکن است در رایانه ها یا سایر دستگاه های الکترونیکی ظاهر شوند کمک می کند. اگر رایانه به دلیل خطای POST روشن نشد، می توانید از دستگاه دیگری برای جستجوی معنی و علت خطا از وب سایت سازنده استفاده کنید. سپس می توانید اقدامات مناسب را انجام دهید، مانند حذف ماژول حافظه یا نصب مجدد کارت گرافیک و سپس راه اندازی مجدد سخت افزار.

گرفتن

POST همچنین روشی برای انتقال متغیرهای فرم HTML از یک صفحه وب به صفحه دیگر بدون نمایش آنها در نوار آدرس است. یک روش جایگزین GET است که مقادیری را به URL اضافه می کند. درخواست های HTTP POST داده های اضافی را از مشتری (مرورگر) به سرور در متن پیام ارائه می دهد. در مقابل، درخواست های GET شامل تمام داده های مورد نیاز در URL است. فرم‌ها در HTML می‌توانند از هر روشی با تعیین متد=POST یا متد=GET (پیش‌فرض) روی عنصر استفاده کنند.

. روش مشخص شده نحوه ارسال داده های فرم به سرور را تعیین می کند. هنگامی که از روش GET استفاده می شود، تمام داده های فرم به عنوان پارامترهای رشته پرس و جو با URL رمزگذاری می شوند. با POST، داده های فرم در متن پیام درخواست HTTP ظاهر می شود.

تفاوت در ارائه فرم

روش درخواست POST از وب سرور می خواهد که داده های محصور شده در متن پیام درخواست را بپذیرد و ذخیره کند. اغلب هنگام آپلود یک فایل یا ارسال یک فرم وب تکمیل شده استفاده می شود.

روش درخواست HTTP GET اطلاعات را از سرور بازیابی می کند. به عنوان بخشی از یک درخواست GET، ممکن است برخی از داده ها در رشته جستجوی URL ارسال شود و عبارات جستجو، محدوده تاریخ، یا سایر اطلاعاتی که درخواست را تعریف می کند، مشخص شود.

به عنوان بخشی از درخواست POST، مقدار دلخواه داده از هر نوع می تواند به سرور در متن پیام درخواست ارسال شود. فیلد سرصفحه در درخواست POST معمولاً نوع رسانه اینترنتی متن پیام را مشخص می کند.

تفاوت اصلی بین درخواست های GET و POST این است که مطابق با درخواست های HTTP مختلف همانطور که در مشخصات HTTP تعریف شده است. فرآیند ارسال برای هر دو روش به یک شکل شروع می شود: مجموعه داده فرم توسط مرورگر ایجاد می شود و سپس به روشی که توسط ویژگی enctype مشخص شده است کدگذاری می شود. برای METHOD="POST مشخصه enctype می تواند multipart/form-data یا application/x-www-form-urlencoded باشد، در حالی که برای METHOD="GET" فقط از طریق application/x-www-form-urlencoded فعال می شود. داده های فرم و سپس به سرور ارسال می شود.

برای ارسال فرم با METHOD = "GET"، مرورگر با گرفتن مقدار مشخصه action و اضافه کردن مجموعه ای از داده های فرم کدگذاری شده با استفاده از نوع محتوای application/x-www-form-urlencoded، یک URL می سازد. سپس مرورگر با این URL به گونه ای برخورد می کند که گویی به یک پیوند اشاره می کند (یا انگار کاربر به صورت دستی URL را تایپ کرده است). مرورگر URL را به بخش‌هایی تقسیم می‌کند و میزبان را می‌شناسد، سپس یک درخواست GET را با بقیه URL به عنوان آرگومان برای آن میزبان ارسال می‌کند. توجه به این نکته ضروری است که این فرآیند به این معنی است که داده های فرم به کدهای اسکی محدود می شود. هنگام ارسال آن ها به URL ASCII باید دقت ویژه ای برای رمزگذاری و رمزگشایی انواع دیگر کاراکترها انجام شود.

ارسال فرم با METHOD="POST" باعث می شود که یک درخواست POST با استفاده از مقدار ویژگی action و یک پست تولید شده با توجه به نوع محتوای مشخص شده توسط ویژگی enctype ارسال شود.

PHP

PHP در HTML تعبیه شده است. این بدان معناست که کد PHP را می توان در یک صفحه HTML درج کرد. کد PHP توسط سروری که صفحه را میزبانی می کند خوانده یا تجزیه می شود. خروجی توابع GET و POST PHP در یک صفحه معمولاً به صورت کد HTML قابل خواندن توسط مرورگر برگردانده می شود. از آنجا که کد PHP قبل از بارگذاری صفحه به HTML تبدیل می شود، کاربران نمی توانند کد PHP را در صفحه مشاهده کنند. این باعث می شود صفحات PHP برای دسترسی به پایگاه های داده و سایر اطلاعات محافظت شده کافی باشند.

بیشتر سینتکس PHP از زبان های دیگر مانند C، Java و Perl وام گرفته شده است. با این حال، PHP دارای تعدادی ویژگی منحصر به فرد و ویژگی های خاص است. هدف از این زبان این است که توسعه دهندگان وب را قادر می سازد تا به سرعت و به راحتی صفحات تولید شده به صورت پویا را بنویسند.

وردپرس

وردپرس یک سیستم مدیریت محتوای رایگان است که برای ایجاد و نگهداری وب سایت ها استفاده می شود. سهولت استفاده و ویژگی های منحصر به فرد وبلاگ نویسی به آن کمک کرده است تا به محبوب ترین ابزار وبلاگ نویسی در وب تبدیل شود.

رابط وردپرس به هر کسی که تجربه توسعه وب را ندارد اجازه می دهد تا یک وب سایت ایجاد و منتشر کند. ابزارهای وبلاگ نویسی داخلی راهی آسان برای ردیابی پست ها، بازدیدکنندگان و نظرات کاربران را فراهم می کند.

اگرچه هزاران قالب و افزونه وردپرس در دسترس است، سیستم POST GET در وردپرس همچنان محدودیت‌های خود را دارد. از آنجایی که این یک سرویس مبتنی بر قالب است، کاربر باید به جای ایجاد صفحات از ابتدا با یک وب سایت از پیش ساخته شده شروع کند. همچنین، هیچ راهی برای جاسازی اسکریپت ها یا نگهداری پایگاه داده با همان سطح کنترلی که یک وب سایت سفارشی ارائه می دهد وجود ندارد.

ابزار POST_GET_ID() به اسکریپت اجازه می دهد تا عنصر را به دلیل داشتن شناسه منحصر به فرد دستکاری کند و هنگامی که به عنوان فرم از طریق این روش ها ارسال می شود، فهرست کشویی با یک شناسه منحصر به فرد ارسال می شود که به اسکریپت اجازه می دهد متوجه شود که کدام پست در حال اجرا است. از طرف دیگر، می‌توان یک متغیر پنهان ارسال کرد که به اسکریپت اجازه می‌دهد ببیند کدام پست متعلق به view است.

بله، هرکسی در مقطعی چیزی یاد گرفته است. تنها چیزی که افراد را در این زمینه متمایز می کند این است که برای برخی آموزش ها به راحتی داده می شود، در حالی که برخی دیگر ماه ها نمی توانند اصل موضوع را درک کنند. امروز در مورد درخواست های POST و GET در HTML\PHP صحبت خواهیم کرد.

خود درخواست‌های POST و GET (که از این پس به آنها درخواست گفته می‌شود) مدت‌هاست که در تمام منابع اینترنتی ریشه دارند. اگر ناگهان روزی جایگزینی برای این فناوری ها ظاهر شود، احتمالاً به این زودی نخواهد بود و احتمالاً ضروری نیست. زیرا درخواست های ما به طور کامل وظیفه تبادل داده بین صفحات اینترنتی را انجام می دهد.

بیایید ابتدا یک درخواست GET را بررسی کنیم. بیایید یک فایل index.php با یک کد html استاندارد ایجاد کنیم و یک فرم روی آن قرار دهیم، اجازه دهید فرم سفارش محصول باشد.

بیایید نگاهی به برچسب اینجا بیندازیم. فرم. دو پارامتر دارد عملو روش. اولی مسئول آدرس صفحه ای است که داده های خود را به آن منتقل می کنیم، دومی مربوط به روشی است که این داده ها توسط آن منتقل می شوند. در داخل این تگ، مجموعه ای از داده های خود را که می خواهیم منتقل کنیم، توصیف می کنیم. نام ها باید به داده ها اختصاص داده شوند (پارامتر نام). همچنین نوع ورودی مورد نیاز است ارسال، که دکمه ای است که داده ها را با کلیک کردن ارسال می کند.

بیایید فایل خود را ذخیره کرده و در یک مرورگر باز کنیم.
مسیر صفحه ما در مرورگر ".../index.php" است. در خود صفحه شاهد دو فیلد ورودی و یک دکمه هستیم. بیایید چیزی را در فیلدهای خود پر کنیم و روی دکمه "سفارش" کلیک کنیم. صفحه ما به روز شد بیایید به آدرس او نگاه کنیم: ".../index.php?orderName=Test&count=12". (من در فیلد اول کلمه "تست" را در "12" دوم تایپ کردم). همانطور که می بینیم آدرس صفحه کمی تغییر کرده است. واقعیت این است که انتقال پارامترهای GET توسط یک درخواست با اختصاص دادن آنها به رشته آدرس صفحه انجام می شود. پارامترها با کاراکتر '?' از آدرس اصلی و با کاراکتر '&' از پارامترهای مختلف جدا می شوند. ساختار پارامتر به شرح زیر است: پارامتر_نام=مقدار. نام پارامتر با مقدار مشخصه name در قسمت ورودی مطابقت دارد.
بیایید کد صفحه را کمی ویرایش کنیم:

> >

حالا دوباره روی دکمه «سفارش» کلیک کنید. همانطور که می بینیم، صفحه به روز شده است، اما فیلدهای ما پر شده است. این به این دلیل است که ما یک مقدار پیش فرض برای فیلدهای خود ارائه کرده ایم. علاوه بر این، این مقادیر پارامتر GET دریافتی هستند. همانطور که در کد PHP می بینیم، پارامترهای GET یک آرایه با یک شاخص رشته ای برابر با نام پارامتر هستند. اگر اکنون با آدرس سایت بازی می کنیم و مقادیر پارامتر را در آن تغییر می دهیم و دکمه "Enter" را فشار می دهیم، دوباره متوجه تصویری با به روز رسانی صفحه و پر کردن فرم خود خواهیم شد.

بدیهی است که ارسال اطلاعات مخفی یا خدماتی در یک درخواست GET اشتباه است (و ایمن نیست). بهتر است از آن برای انتقال مثلا id خبری که باید از دیتابیس گرفته شود یا نام صفحه ای که باید نمایش داده شود استفاده کنید.

درخواست POST موضوع دیگری است. به طور مشابه کار می کند، اما پارامترها را در نوار آدرس ذخیره نمی کند. بیایید شکل خود را تغییر دهیم:

$_POST["orderName"]?> > $_POST["count"]?> >

همانطور که می بینید، با این حال، چیز زیادی تغییر نکرده است! بیایید صفحه خود را باز کنیم، چیزی را در فیلدها پر کنید و دکمه "سفارش" را فشار دهید. همه چیز به همین صورت کار می کرد، با این حال، همانطور که در رشته پرس و جو می بینیم، آدرس "…/index.php" بدون هیچ گونه پارامتری به نمایش در می آید. بنابراین، ما به نوعی داده های خود را از چشمان کنجکاو "پنهان می کنیم". البته، این مفهوم پنهان بود، نه مشروط، زیرا این داده ها هنوز هم قابل رهگیری هستند، اما این داستان دیگری است. بیایید پارامترهای ".../index.php?orderName=Trololo&count=100" را به آدرس خود اضافه کرده و "Enter" را فشار دهید. همانطور که می بینیم، صفحه بارگیری شده است، اما حتی با وجود گذشتن پارامترها، فیلدها خالی هستند. این نشان می دهد که علیرغم شباهت زیاد، این نوع درخواست ها به هیچ وجه با یکدیگر تلاقی ندارند و در صورت لزوم، ارزش آن را دارد که برای هر نوع درخواست جداگانه یک هندلر بنویسید.

فکر می کنم همین کافی باشد. به نظرم اصول سوال با یک سر توضیح داده شده است.

و کمی بیشتر… فراموش نکنید که پارامترهای ارسال شده را بررسی کنید. اگر مطمئن هستید که پارامتر باید یک عدد باشد، تمام تلاش‌ها برای ارسال یک مقدار غیر عددی و غیره را قطع کنید.

این پست برای توضیح نحوه انتقال داده ها از طریق اینترنت با استفاده از دو روش اصلی GET و POST در نظر گرفته شده است. من آن را به عنوان مکمل دستورالعمل ژنراتور شیفت کاری برای کسانی که به سختی به جزئیات علاقه مند هستند نوشتم ☺.

به آدرس زیر بروید (این برای توضیح تصویری است): http://calendarin.net/calendar.php?year=2016 به نوار آدرس مرورگر توجه کنید: calendarin.net/calendar.php ?year=2016فایل اصلی نامگذاری شده و به دنبال آن علامت سوال (؟) و پارامتر "year" با مقدار "2016" آمده است. بنابراین، هر چیزی که به دنبال علامت سوال می آید، درخواست GET است. همه چیز ساده است. برای ارسال بیش از یک پارامتر، آنها باید با علامت (&) از هم جدا شوند. مثال: calendarin.net/calendar.php ?year=2016&display=روزهای کاری-و-روزهای-تعطیلی

فایل اصلی هنوز نامگذاری شده است، به دنبال آن یک علامت سوال (؟)، سپس یک پارامتر "year" با مقدار "2016"، سپس یک علامت (&)، سپس یک پارامتر "نمایش" با مقدار "work-". روزها و روزهای تعطیل".

پارامترهای GET را می توان مستقیماً در نوار آدرس مرورگر تغییر داد. برای مثال، تغییر مقدار "2016" به "2017" و فشار دادن کلید، شما را به تقویم سال 2017 می برد.

این یک انتقال داده به صورت مخفی است (آدرس صفحه تغییر نمی کند). یعنی فقط با کمک یک برنامه (اسکریپت) می توانید آنچه را که منتقل شده است ببینید. به عنوان مثال، در ابزار زیر برای شمارش کاراکترهای متن، داده های اولیه به روش POST منتقل می شود: http://usefulonlinetools.com/free/character-counter.php

در صورت داشتن هرگونه سوال، نظر و ایمیل من در خدمت شما هستم.

علاوه بر روش GET که در یادداشت قبلی به آن پرداختیم، روش دیگری برای ارسال درخواست از طریق پروتکل HTTP وجود دارد - روش POST. روش POST نیز اغلب در عمل مورد استفاده قرار می گیرد.

اگر برای دسترسی به سرور با استفاده از روش GET کافی بود که یک درخواست را در URL تایپ کنیم، در روش POST همه چیز طبق یک اصل متفاوت کار می کند.

برای انجام این نوع درخواست باید روی دکمه ای با ویژگی type="submit" که در صفحه وب قرار دارد کلیک کنیم. توجه داشته باشید که این دکمه در عنصر قرار دارد

، که دارای ویژگی متد برای ارسال است.

این کد HTML را در نظر بگیرید:

متن را وارد کنید:


اگر کاربر مقداری متن را در قسمت متن وارد کرده و روی دکمه "ارسال" کلیک کند، متغیر متن با مقدار محتوایی که کاربر وارد کرده است به سرور ارسال می شود.

درخواست های POST و GET به زبان ساده

این متغیر با روش POST ارسال خواهد شد.

اگر به شکل زیر بنویسید:

داده ها با استفاده از روش GET ارسال خواهند شد.

اگر در مورد درخواست GET، مقدار داده‌ای که می‌توانیم منتقل کنیم با طول نوار آدرس مرورگر محدود می‌شد، در مورد درخواست POST، چنین محدودیتی وجود ندارد و می‌توانیم مقادیر قابل توجهی را انتقال دهیم. از اطلاعات

تفاوت دیگر روش POST با متد GET این است که متد POST تمامی متغیرها و مقادیر آنها را در بدنه خود (Entity-Body) مخفی می کند. در مورد روش GET، آنها در رشته درخواست (Request-URI) ذخیره می شدند.

در اینجا نمونه ای از درخواستی است که با استفاده از روش POST انجام شده است:

POST / HTTP/1.0\r\n
میزبان: www.site.ru\r\n
مرجع: http://www.site.ru/index.html\r\n
کوکی: درآمد=1\r\n
نوع محتوا: application/x-www-form-urlencoded\r\n
طول محتوا: 35\r\n
\r\n
login=Dima&password=12345

بنابراین، هنگام انتقال داده ها با استفاده از روش POST، رهگیری آن برای مهاجم بسیار دشوارتر خواهد بود، زیرا آنها از دید مستقیم پنهان هستند، بنابراین روش POST برای انتقال داده، روش امن تری در نظر گرفته می شود.

علاوه بر این، با استفاده از روش POST، می توانید نه تنها متن، بلکه داده های چند رسانه ای (تصاویر، صدا، ویدئو) را نیز انتقال دهید. یک پارامتر Content-Type ویژه وجود دارد که نوع اطلاعات ارسالی را مشخص می کند.

و در نهایت برای دریافت داده هایی که با این روش روی سرور منتقل شده اند از متغیر POST استفاده می شود.

نمونه ای از پردازش در PHP:

echo $_POST['text'];
?>

در آخرین یادداشت، تصمیم گرفتیم که مرورگر (مشتری) درخواست های HTTP را به سرور ارسال کند و سرور پاسخ های HTTP را برای مشتری ارسال کند. این درخواست ها و پاسخ ها بر اساس قوانین خاصی انجام می شود. چیزی مانند نحو وجود دارد که چگونه و با چه ترتیبی باید نوشته شود. باید یک ساختار کاملاً تعریف شده وجود داشته باشد.

بیایید نگاهی دقیق تر به این ساختار بیندازیم که درخواست ها و پاسخ ها را در پروتکل HTTP ایجاد می کند.

درخواست HTTP از سه بخش اصلی تشکیل شده است که به ترتیب فهرست شده در زیر ظاهر می شوند. بین سرصفحه ها و متن پیام یک خط خالی (به عنوان جداکننده) وجود دارد که نشان دهنده کاراکتر خط جدید است.

رشته خالی (جداکننده)

درخواست ارسال و دریافت کنید، تفاوت آنها چیست و کدام بهتر است و برای چه اهدافی؟

بدن پیام (Entity Body) - پارامتر اختیاری

رشته پرس و جو- روش انتقال، URL برای دسترسی و نسخه پروتکل HTTP را مشخص می کند.

عناوین- توصیف بدنه پیام، ارسال پارامترهای مختلف و سایر اطلاعات و اطلاعات.

بدنه ی پیام- این خود داده ای است که در درخواست منتقل می شود. متن پیام اختیاری است و ممکن است حذف شود.

هنگامی که ما یک درخواست پاسخ از سرور دریافت می کنیم، بدنه پیام اغلب محتوای صفحه وب است. اما، هنگام درخواست به سرور، گاهی اوقات ممکن است وجود داشته باشد، به عنوان مثال، زمانی که داده هایی را که در فرم بازخورد پر کرده ایم به سرور منتقل می کنیم.

با جزئیات بیشتر، هر یک از عناصر درخواست را در یادداشت های بعدی بررسی خواهیم کرد.

بیایید، برای مثال، یک درخواست واقعی به سرور را در نظر بگیریم. من هر قسمت از درخواست را با رنگ متفاوتی هایلایت کردم: رشته جستجو سبز، سرصفحه ها نارنجی و متن پیام آبی است.

درخواست مرورگر:

میزبان: webgyry.info

کوکی: wp-settings

اتصال: زنده نگه دارید

در مثال زیر، بدنه پیام از قبل وجود دارد.

پاسخ سرور:

نوع محتوا: text/html; charset=UTF-8

Transfer-Encoding: تکه تکه شده

اتصال: زنده نگه دارید

Keep Alive: timeout=5

X-Pingback: //webgyry.info/xmlrpc.php

سند بدون عنوان

اینها پیام هایی هستند که از طریق پروتکل HTTP بین مشتری و سرور رد و بدل می شوند.

به هر حال، آیا می خواهید بدانید که استفاده از "اهداف" Yandex Metrica و Google Analytics در برخی از عناصر سایت شما معنی دارد یا خیر؟

مواردی را که کار نمی کند حذف کنید، موارد مفید را اضافه کنید و درآمد خود را دو برابر کنید.

دوره تعیین هدف Yandex Metrics.

دوره تعیین هدف گوگل آنالیتیکس.

سرویس گیرنده HTTP درخواستی را در قالب یک پیام درخواست به سرور ارسال می کند که دارای فرمت زیر است:

  • رشته پرس و جو (عنصر مورد نیاز)
  • عنوان (عنصر اختیاری)
  • رشته خالی (عنصر مورد نیاز)
  • متن پیام (عنصر اختیاری)

بیایید هر یک از این عناصر را جداگانه در نظر بگیریم.

رشته پرس و جو

رشته درخواست با یک نشانه متد و سپس URI درخواست و نسخه پروتکل شروع می شود. عناصر با فاصله از یکدیگر جدا می شوند:

بیایید این عنصر را با جزئیات بیشتری بررسی کنیم.

روش درخواست

این عنصر روشی را که باید در سمت سرور در URI مشخص شده فراخوانی شود، مشخص می کند.

هشت روش در HTTP وجود دارد:

  • سر
    برای دریافت رشته وضعیت و عنوان از سرور توسط URI استفاده می شود. داده ها را تغییر نمی دهد.
  • گرفتن
    برای دریافت داده ها از سرور در URI مشخص شده استفاده می شود. داده ها را تغییر نمی دهد.
  • پست
    برای ارسال داده ها به سرور (مانند اطلاعات مربوط به توسعه دهنده و غیره) با استفاده از فرم های HTML استفاده می شود.
  • قرار دادن
    تمام داده های قبلی روی منبع را با داده های بارگذاری شده جدید جایگزین می کند.
  • حذف
    تمام داده های فعلی منبع مشخص شده توسط URI را حذف می کند.
  • اتصال
    یک اتصال تونلی به سرور در URI مشخص شده برقرار می کند.
  • گزینه ها
    ویژگی های اتصال را برای منبع مشخص شده شرح می دهد.
  • پی گیری
    یک پیام حاوی یک ردیابی از مکان منبع مشخص شده در URI ارائه می دهد.

URI را درخواست کنید

URI (Uniform Resource Identifier) ​​شناسه منبعی است که درخواست به آن ارسال می شود. فرمت زیر رایج ترین فرمت URI است:

‘*’ هنگامی که درخواست HTTP برای یک منبع خاص نیست، بلکه برای یک سرور استفاده می شود. فقط زمانی استفاده می شود که روش لازم نباشد روی منبع اعمال شود. مثلا،

absoluteURIهنگامی که یک درخواست HTTP به یک پروکسی ارسال می شود استفاده می شود. از پروکسی خواسته می شود که درخواست را از حافظه پنهان موجود ارسال کند و پاسخی را برمی گرداند. مثلا:

مسیر_ مطلق | منبعبیشتر استفاده می شود

آموزش کار با درخواست های GET و POST

یک منبع خاص از یک سرور خاص درخواست شده است. به عنوان مثال، یک کلاینت می خواهد منبعی را از یک سرور در پورت 80 دریافت کند. آدرس منبع "www.proselyte.net" است و درخواست زیر را ارسال می کند:

درخواست فیلدهای سرصفحه

فیلدهای هدر به مشتری اجازه می دهد تا اطلاعات اضافی در مورد درخواست و در مورد خود را به سرور ارسال کند. این فیلدها به عنوان اصلاح کننده پرس و جو عمل می کنند.

در زیر لیستی از مهمترین فیلدهای سرصفحه قابل استفاده آورده شده است:

  • Charset را بپذیرید
  • رمزگذاری را بپذیرید
  • پذیرش-زبان
  • مجوز
  • انتظار
  • اگر مطابقت داشته باشد
  • If-Modified-Since
  • اگر-هیچ-تطابق
  • اگر محدوده
  • If-Unmodified-Since
  • دامنه
  • ارجاع دهنده
  • عامل کاربر

اگر بخواهیم کلاینت و وب سرور خود را پیاده سازی کنیم، می توانیم فیلدهای هدر خود را ایجاد کنیم.

مثال درخواست HTTP

این مطالعه ما در مورد درخواست های HTTP را به پایان می رساند.
در مقاله بعدی به پاسخ های HTTP خواهیم پرداخت.

یکی از راه های ارسال درخواست HTTP به سرور استفاده از روش GET است. این روش رایج ترین است و درخواست ها به سرور اغلب با استفاده از آن انجام می شود.

ساده ترین راه برای ایجاد درخواست GET این است که URL را در نوار آدرس مرورگر تایپ کنید.

مرورگر اطلاعات زیر را به سرور ارسال می کند:

GET/HTTP/1.1
میزبان: webgyry.info
عامل کاربر: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
پذیرش: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip، deflate
کوکی: wp-settings
اتصال: زنده نگه دارید

درخواست دارای دو بخش است:

1. خط درخواست

2. سرصفحه ها (سرصفحه های پیام)

توجه داشته باشید که درخواست GET بدنه پیام ندارد. اما این بدان معنا نیست که با کمک آن نمی توانیم هیچ اطلاعاتی را به سرور منتقل کنیم.

تفاوت بین روش های GET و POST

این را می توان با استفاده از پارامترهای خاص GET انجام داد.

برای افزودن پارامترهای GET به یک درخواست، باید یک "؟" در انتهای URL قرار دهید. و بعد از آن شروع به پرسیدن از آنها طبق قانون زیر کنید:

parameter_name1=parameter_value1& parameter_name2=parameter_value2&…

جداکننده بین پارامترها علامت "&" است.

به عنوان مثال، اگر بخواهیم دو مقدار نام کاربری و سن را به سرور ارسال کنیم، این کار را می توان با خط زیر انجام داد:

http://site.ru/page.php?name=dima&age=27

هنگامی که این پرس و جو اجرا می شود، داده ها به متغیر محیطی QUERY_STRING می روند، که می توان آن را با استفاده از یک زبان برنامه نویسی وب سمت سرور در سرور به دست آورد.

در اینجا مثالی از نحوه انجام این کار در PHP آورده شده است.

echo "نام شما: ". $_GET["نام"]. "
»;
echo "سن شما این است: " . $_GET["سن"]. "
»;
?>

ساختار $_GET["parameter_name"] به شما امکان می دهد مقدار پارامتر ارسال شده را نمایش دهید.

در نتیجه اجرای این کد در مرورگر، خواهید دید:

نام شما: دیما
سن شما: 27

ما همچنین با استفاده از روش GET درخواستی را به سرور ارسال می کنیم.

HTTP یک پروتکل انتقال ابرمتن، یکی از پروتکل های پشته TCP/IP است. این پروتکل در ابتدا برای ارسال و دریافت صفحات HTML ایجاد شد، اما اکنون به خوبی برای سیستم های اطلاعاتی توزیع شده استفاده می شود. این پروتکل یکی از پر استفاده ترین پروتکل ها در شبکه جهانی وب است.

تصویر 1

بر اساس طرح درخواست/پاسخ. هنگامی که یک کلاینت درخواستی را به یک سرور ارسال می کند، می تواند این کار را با 3 نوع درخواست انجام دهد: GET، PUT، و POST.

دریافت درخواست HTTP

گرفتندرخواست مشتری برای اطلاعات است. مرورگر وب مشتری یک پیام GET برای بازیابی صفحات از آن ارسال می کند. درخواست دارای دو بخش است:

  • رشته پرس و جو
  • سرفصل ها

درخواست GET بدنه داده ای ندارد، اما این بدان معنا نیست که نمی تواند هیچ داده ای را به سرور ارسال کند. با استفاده از پارامترهای خاص در رشته URL، می توانید داده ها را به سرور ارسال کنید. امضاء کردن ? بعد از دامنه در URL به این معنی است که پارامترها بیشتر منتقل می شوند. شکل 2 دقیقاً نشان می دهد که مرورگر چه اطلاعاتی را برای سرور ارسال می کند.

نقاشی - 2

ارسال و ارسال درخواست HTTP

این دو روش به منظور ارسال اطلاعات به وب سرور پیاده سازی می شوند. به عنوان مثال با استفاده از وب فرم های خاص، با پر کردن آنها، آنها را به روش POST به سرور ارسال می کنیم. PUT، از طرف دیگر، منابع یا داده ها را در یک وب سرور (تصویر، ویدئو) آپلود می کند.

HTTP یک پروتکل امن نیست و پیام های POST را می توان رهگیری و خواند زیرا رمزگذاری نشده است. برای امنیت انتقال داده ها با استفاده از روش POST از پروتکل HTTPS استفاده می شود. داده ها را رمزگذاری می کند و می تواند احراز هویت را انجام دهد. همچنین الزامات اضافی را برای انتقال اطلاعات بین لایه های حمل و نقل و برنامه پیاده سازی می کند.

تفاوت های اصلی بین روش های POST و GET در جدول 1 نشان داده شده است.

شکل 3 قوانین اساسی را نشان می دهد که هنگام انتخاب روش GET یا POST برای اجرای کار بر روی سرور خود باید رعایت کنید.

برترین مقالات مرتبط