چه چیزی با درخواست HTTP منتقل می شود. انواع درخواست های HTTP و استراحت فلسفه
این و بخش های زیر به طور خلاصه توضیح داده می شود که چگونه ساده ترین برنامه های وب با استفاده از PHP را ایجاد کنید. آنچه که در بخش توضیح داده شد، به وضوح کافی نیست که بتواند با کاربر ارتباط برقرار کند و بسته به اقدامات انجام شده یا پارامترهای وارد شده شکل گرفته شود. و آنچه که از دست رفته است؟ دانش کافی در مورد چگونگی سازماندهی ورود اطلاعات کاربر و انتقال این داده ها به سرور وجود ندارد. خوب، دانش پایه روش پردازش نرم افزار دریافت شده در اطلاعات سرور شما باید قبلا باشد.
روش های HTTP درخواست ها و پارامترهای آنها
هر برنامه وب پویا پاسخ به کاربر را مطابق با پارامترهای وارد شده یا اقدامات انجام شده در سمت مشتری، پاسخ می دهد. دسترسی به سرور اغلب به دو نوع پرس و جو کاهش می یابد: استفاده از روش GET یا روش پست. چند کلمه در مورد تفاوت بین این دو نوع درخواست.
روش دریافت:پارامترها به هدر پرس و جو HTTP منتقل می شوند، بنابراین آنها را می توان بر روی خط فرمان دیده می شود، و چنین درخواست می تواند در بوک مارک ها ذخیره شود. از آنجا که طول کل هدر محدود است، تعداد و طول پارامترهای منتقل شده با استفاده از GET نیز محدود است.
اعتقاد بر این است که نتایج چندین اجرا شده در یک ردیف از درخواست های دریافتی باید به تنهایی و یکسان باشد.
پارامترهای درخواست در بدن پرس و جو HTTP منتقل می شوند، بنابراین هیچ آنها در خط فرمان وجود ندارد. تعداد و اندازه پارامترها نامحدود است.
اعتقاد بر این است که نتایج چندین درخواست پست یکسان می تواند مقادیر مختلفی را بازگرداند، زیرا می توانند خواص شیء هدف را تغییر دهند.
روش GET باید برای استخراج محتویات منبع اطلاعات مطابق با پارامترها استفاده شود، زمانی که شما نیازی به تغییر ساختار داده های منبع هدف ندارید و درخواست (URL) برای ذخیره در بوک مارک ها حساس است. روش دریافت اجرای ممکن است با استفاده از روش پست بالاتر از درخواست های مشابه باشد.
هنگامی که شما نیاز به پنهان کردن از پارامترهای انتقال URL دارید، باید از روش ارسال استفاده شود. این روش همچنین باید در پرس و جو ها برای تغییر محتویات منابع هدف، انتقال در پارامترها (در بدن پرس و جو) توصیف این بیشتر تغییرات استفاده شود.
مسیر به منابع؟ parameter1 \u003d value1 & parameter2 \u003d value2 & ...
اگر شما یک فرم خاص HTML برای پر کردن پارامترها ندارید، می توانید برنامه PHP خود را با گذراندن پارامترهای آزمون به طور مستقیم در خط فرمان مرورگر، به عنوان مثال:
http: //syt/php-samples/sql.php؟ sql \u003d انتخاب * از d_staff
برای تجدید نظر به پارامترهای سمت سرور، از آرایه های جهانی استفاده کنید $ _get. و $ _post. به ترتیب. اگر برنامه شما هنوز از روش تماس با آن استفاده می کند، باید از یک آرایه استفاده کنید $ _REQUEST.که داده های آرایه ها را ترکیبی از $ _GET و $ _POST، به عنوان مثال، به شرح زیر است:
$ sql \u003d isset ($ _ نیاز به ["SQL"])؟ $ _REQUEST ["SQL"]: ""؛
در این مثال، برنامه تعیین می کند که آیا پارامتر "SQL" انتقال داده شد، اگر بله، پس از آن مقدار خود را به متغیر متناظر اختصاص می دهد، و اگر نه، مقدار خالی آن را اختصاص می دهد.
تعیین پارامترهای HTTP پرس و جو از طریق فرم HTML
البته، این بسیار راحت نیست که پارامترهای دستی به صورت دستی به طور مستقیم در خط فرمان مرورگر تعیین شود. این روش مناسب برای اجرای نرم افزار درخواست های HTTP در هنگام برقراری ارتباطات وب با یکدیگر است. به منظور وارد کردن و استفاده از اطلاعات اولیه در سمت مشتری، شما باید از فرم های HTML استفاده کنید و. در زیر نمونه ای از ساده ترین شکل است که پارامتر متن وارد شده است (مقدار)، که بعدا به عنوان پارامتر POST به سرور منتقل می شود.
در روش روش عنصر فرم، روش روش انتقال داده ها را به سرور (دریافت یا ارسال) مشخص می کند. ویژگی عمل نشان می دهد فایل پی اچ پیکه درخواست را پردازش می کند. اگر پردازنده باید فایل فعلی باشد، ویژگی عمل مورد نیاز نیست. برای همه مواردی که ارزش آنها باید به عنوان یک پارامتر پرس و جو HTTP منتقل شود، مقدار منحصر به فرد از ویژگی نام را تعیین کنید. این مقدار ویژگی است نام. خواهد بود فهرست مطالب در آرایه ها $ _Get، $ _post یا $ _REQUEST (به عنوان مثال بالا را ببینید). فشار دادن دکمه ارسال لباس را با تمام مقادیر وارد شده به سرور ارسال می کند.
اولین روش برای انجام درخواست PHP پس از استفاده از file_get_contents است. روش دوم از Fread در ترکیب با یک جفت توابع دیگر استفاده می کند. هر دو گزینه از تابع stream_context_create برای پر کردن فیلدهای هدر پرس و جو استفاده می کنند.
توضیح کد
متغیر SPD $ حاوی داده هایی است که باید منتقل شوند. این باید یک فرمت رشته پرس و جو HTTP داشته باشد، بنابراین برخی از کاراکترهای خاص باید رمزگذاری شوند.
و در ویژگی های file_get_contents، و در عملکرد Fread ما دو پارامتر جدید داریم. اولین استفاده از use_include_path است. از آنجایی که ما درخواست HTTP را انجام می دهیم، در هر دو نمونه، آن را نادرست خواهد داشت. هنگام استفاده از مقادیر واقعی برای خواندن یک منبع محلی، تابع فایل را در include_path جستجو می کند.
پارامتر دوم زمینه است، آن را با مقدار بازگشتی stream_context_create پر شده است، که مقدار یک آرایه از $ AHTTP را می گیرد.
با استفاده از file_get_contents برای اجرای درخواست های پست
برای ارسال یک درخواست پست به file_get_contents، شما باید Stream_Context_Create را اعمال کنید تا زمینه های هدر را به صورت دستی پر کنید و مشخص کنید که «Wrapper» مورد استفاده قرار می گیرد - در این مورد http:
$ surl \u003d "http://brugbart.com/examples/http-post.php"؛ // URL ارسال $ spd \u003d "name \u003d jacob & bench \u003d 150"؛ // post data $ AHTTP \u003d Array ("http" \u003d\u003e // wrapper که آرایه استفاده می شود ("روش" \u003d\u003e "ارسال"، // درخواست درخواست // هدر پرسش های پرس و جو "header" \u003d\u003e "محتوا - نوع: برنامه / X-www-form-urlencoded "،" محتوا "\u003d\u003e $ SPD))؛ $ context \u003d stream_context_create ($ AHTTP)؛ $ contents \u003d file_get_contents ($ surl، false، $ context)؛ محتویات echo $؛
با استفاده از Fread برای اجرای درخواست های پست
شما می توانید از تابع Fread برای انجام درخواست های پست استفاده کنید. مثال زیر stream_context_create استفاده می شود برای کامپایل هدایای مورد نیاز HTTP:
$ surl \u003d "http://brugbart.com/examples/http-post.php"؛ // URL ارسال $ spd \u003d "name \u003d jacob & bench \u003d 150"؛ // $ AHTTP \u003d ARRAY ("http" \u003d\u003e // wrapper که آرایه استفاده می شود ("روش" \u003d\u003e "post"، // درخواست درخواست // "header" \u003d\u003e "نوع محتوا: نرم افزار / x-www-form-urlencoded "،" محتوا "\u003d\u003e $ SPD))؛ $ context \u003d stream_context_create ($ AHTTP)؛ $ handle \u003d fopen ($ surl، "r"، false، $ context)؛ محتوا \u003d ""؛ در حالی که (! Feof ($ دستگیره)) (محتویات $ \u003d fread ($ دسته، 8192)؛) fclose ($ دسته)؛ محتویات echo $؛
انجام درخواست های دریافتی را با استفاده از PHP انجام دهید
در حال حاضر ما به استفاده از Fread و file_Get_Contents برای دانلود محتوا از اینترنت از طریق HTTP و HTTPS توجه خواهیم کرد. برای استفاده از روش های شرح داده شده در این مقاله، باید گزینه Fopen Wrappers را فعال کنید. برای انجام این کار، در فایل php.ini شما باید پارامتر allow_url_fopen را نصب کنید.
POP و دریافت پرس و جو PHP برای ورود به سیستم در سایت ها، دریافت محتویات یک صفحه وب و یا بررسی نسخه های جدید از برنامه های کاربردی استفاده می شود. ما به شما خواهیم گفت که چگونه درخواست های HTTP ساده انجام دهید.
با استفاده از Fread برای دانلود یا دریافت فایل ها از طریق اینترنت
به یاد داشته باشید که خواندن صفحه وب محدود به بخش موجود بسته است. بنابراین شما باید از تابع stream_get_contents استفاده کنید ( مشابه file_get_contents) یا در حالی که چرخه برای خواندن محتویات قطعات کوچکتر تا پایان فایل رسیده است:
در این مورد، پردازش PHP Query PHP آخرین استدلال تابع FreeD برابر با اندازه قطعه است. این، به عنوان یک قاعده، نباید بیشتر از 8192 باشد ( 8*1024 ).
در حال حاضر معمولا دو روش HTTP استفاده می شود: دریافت و ارسال کنید. اما معلوم شد که حتی در میان این دو "کاج" توسعه دهندگان وب توانستند از دست بدهند. این یک توضیح است: هر دو روش را می توان برای به دست آوردن نتیجه مشابه استفاده کرد. اما باید به یاد داشته باشید که استفاده سریع از هر یک از روش ها می تواند منجر به سپرده شود، از جمله بارهای بزرگ در کانال و سوراخ های امنیتی.
برای جلوگیری از این به اندازه کافی، این دقیق تر از درک قرار ملاقات ها و تفاوت های این روش ها است.
اگر به ارزش اسامی روش ها بروید، در حال حاضر بسیار واضح تر خواهد شد. دریافت (از زبان انگلیسی برای دریافت)، به عنوان مثال این باید به درخواست داده اعمال شود. پست (C انگلیسی ارسال ایمیل) - درخواست ارسال داده ها به سرور. به نظر می رسد همه چیز بسیار ساده و قابل فهم است. اما کسانی که مایل به توسعه سایت ها هستند، فقط توسط سایت کارت کسب و کار با یک فرم بازخورد پیچیده تر می شوند، بهتر است بدانیم که سوال نزدیک تر می شود.
درخواست های HTTP امن و ناامن
مشخصات HTTP 1.1 وارد دو مفهوم می شود: یک درخواست امن و ناامن، یا اگر دقیق تر باشد، روش.
ایمن - اینها روش هایی هستند که فقط می توانند اطلاعات را درخواست کنند. آنها نمی توانند منابع درخواست شده را تغییر دهند، نمی توانند منجر به نتایج نامطلوب برای کاربر، سایر افراد یا سرور شوند. نمونه هایی که ایمن هستند، یک درخواست HTML از صفحه وب یا تصویر وجود دارد. ایمن شامل سر و روشها می شود.
یادداشت
در واقع، صنعتگران البته می توانند به اشتراک بگذارند و پرس و جو شوند. به عنوان مثال، درخواست های تمرکز.
درخواست های ناامن، همانطور که قبلا حدس زده شده است، می تواند به طور بالقوه منجر به عواقب بد شود، اگر آنها دوباره استفاده می کنند. چنین درخواست هایی می توانند محتویات منابع را تغییر دهند تا آنها تجدید نظر کنند. نمونه هایی از چنین درخواست هایی: ارسال پیام ها، ثبت نام، پرداخت آنلاین. ناامن شامل پست، قرار دادن، روش های حذف است.
روش های IdemPotent (IdemPotent)
idmpotency - یک ویژگی از روش هایی است که با بازپرداخت های متعدد، نتیجه مشابهی را به خود جلب می کند، مگر زمانی که اطلاعات منسوخ شده است. این به این معنی است که هنگام دسترسی به همان URL، همه کاربران یکی و محکم ترین صفحه وب، تصویر، ویدئو و غیره را می بینند. این ویژگی روشها را حذف می کند، قرار داده است.
و در حال حاضر بیشتر در مورد روش های دریافت و پست: هر گونه خلاصه "خلاصه".
گرفتن.
- طراحی شده برای دریافت داده ها از سرور؛
- بدن درخواست خالی است
- به دلیل اجسام خالی درخواست، در سمت سرور سریعتر و مصرف کوچکتر منابع سرور را پردازش می کند.
- انتقال متغیرها در نوار آدرس رخ می دهد (این نیز کاربر را نیز می بیند، داده های فنی در خط پرس و جو قرار می گیرند) و بنابراین اطلاعات مربوط به متغیرها و مقادیر آنها (داده ها محافظت نشده اند)؛
- این قادر به انتقال مقدار کمی از داده ها به سرور است: محدودیت های طول URL وجود دارد که به مرورگر بستگی دارد، به عنوان مثال، IE6 \u003d 2KB. این توصیه می شود برای حرکت به توسعه دهندگان یاهو!
- فقط می تواند کاراکترهای ASCII را انتقال دهد؛
- چنین درخواست را می توان کپی کرد، ذخیره (به عنوان مثال، در بوک مارک ها)؛
- درخواست ممکن است ذخیره شود (این می تواند کنترل شود)؛
- برای کاهش بیشتر بار در کانال و سرور و درخواست های جزئی در دسترس هستند؛
- اتصال HTTP را شکست نمی دهد (زمانی که نگهدارنده در سرور فعال می شود).
پست.
- طراحی شده برای ارسال داده به سرور؛
- انتقال داده ها در بدن پرس و جو رخ می دهد؛
- پردازش در کنار سرور، کندتر و "سخت تر" از دریافت است، زیرا علاوه بر هدایا، شما باید بدن پرس و جو را تجزیه و تحلیل کنید؛
- قادر به انتقال مقدار زیادی از داده ها؛
- قادر به انتقال فایل ها؛
- صفحه پست تولید شده را نمی توان به بوک مارک ها ذخیره کرد.
- اتصال HTTP را از بین می برد
- برای انتقال حتی مقدار بسیار کمی از اطلاعات، اکثر مرورگرها حداقل دو بسته TCP را ارسال می کنند: به عنوان عنوان، و سپس بدن درخواست.
این دو روش را خیلی شبیه نیست. استفاده از یک یا چند باید به دلیل وظیفه باشد، اما نه این واقعیت است که دریافت به طور پیش فرض استفاده می شود یا کار راحت تر است. البته، در اغلب موارد، گزینه ای بیشتر Winble، به ویژه در هنگام ساخت آژاکس سریع، اما در مورد کاستی های آن را فراموش نکنید. برای خودم، من یک الگوریتم ساده را بر روی انتخاب روش ساخته شده است.
این پست در نظر گرفته شده است تا اصول انتقال داده ها را در اینترنت با کمک دو روش اصلی توضیح دهد: دریافت و ارسال کنید. من آن را به عنوان یک مکمل به دستورالعمل برای ژنراتور یک برنامه قابل تغییر از کار برای کسانی که به سختی جالب برای جزئیات هستند، نوشتم.
به آدرس زیر بروید (این برای یک توضیح بصری است): http://calendarin.net/calendar.php؟year\u003d2016 لطفا توجه داشته باشید نوار آدرس مرورگر: calendarin.net/calendar.php ؟ سال \u003d 2016 فایل اصلی به نام یک علامت سوال (؟) و پارامتر "سال" با ارزش "2016" نامیده می شود. بنابراین، همه چیز که به دنبال یک علامت سوال است، این یک درخواست دریافتی است. همه چیز ساده است برای انتقال یک پارامتر نه، اما چند، پس از آن آنها باید آمپرس را تقسیم کنند (&). به عنوان مثال: calenderinin.net/calendar.php. ؟ سال \u003d 2016 و نمایش \u003d کار روز و روز
فایل اصلی نیز نامیده می شود، به دنبال یک علامت سوال (؟)، پس از آن "سال" پارامتر با مقدار "2016"، سپس ampersand (و)، پس از آن - پارامتر "صفحه نمایش" با "روز کاری - و روزها "پارامتر -Off.
پارامترهای دریافت می توانند به طور مستقیم در نوار آدرس مرورگر تغییر کنند. به عنوان مثال، تغییر ارزش "2016" به "2017" و فشار دادن کلید، شما به تقویم برای سال 2017 بروید.
این انتقال داده ها به صورت پنهانی (آدرس صفحه تغییر نمی کند)؛ یعنی، برای دیدن آنچه که منتقل شد، فقط می توانید با استفاده از برنامه (اسکریپت). به عنوان مثال، در ابزار زیر برای محاسبه کاراکترها در متن، داده های اولیه توسط روش پست ارسال می شود: http://usefullinineetools.com/free/character-counter.php
اگر سوالی دارید، نظر و ایمیل من در خدمت شما هستند.
علاوه بر روش GET، که ما در یادداشت قبلی بررسی کردیم، یک روش دیگر برای ارسال پرس و جو در پروتکل HTTP - روش پست وجود دارد. روش پست نیز اغلب در عمل استفاده می شود.
اگر، به منظور اشاره به روش دریافت، به اندازه کافی برای ما درخواست URL را تایپ کنید، سپس همه چیز در روش پست بر روی یک اصل دیگر کار می کند.
به منظور اجرای این نوع درخواست، ما باید با کلیک بر روی دکمه با نوع \u003d "Submit Attribute"، که در صفحه وب واقع شده است، کلیک کنید. لطفا توجه داشته باشید که این دکمه در عنصر قرار دارد.
اگر کاربر وارد برخی از متن به فیلد متن و کلیک بر روی دکمه "Submit"، سپس متغیر متن به سرور با محتوای محتوا که کاربر وارد شده است ارسال می شود.
ارسال و دریافت درخواست با کلمات ساده
این متغیر توسط روش پست ارسال می شود.
اگر شما در فرم بنویسید: