JavaRush /وبلاگ جاوا /Random-FA /بخش 3. پروتکل های HTTP/HTTPS

بخش 3. پروتکل های HTTP/HTTPS

در گروه منتشر شد
این مطالب بخشی از مجموعه "مقدمه ای بر توسعه سازمانی" است. مقالات قبلی: سلام! امروز با پروتکل های HTTP و HTTPS آشنا خواهیم شد. اما ابتدا اجازه دهید یک نکته را روشن کنیم: ما در مورد پروتکل های انتقال داده از طریق شبکه در لایه کاربردی مدل OSI صحبت می کنیم. همانطور که به یاد دارید در یکی از مقالات قبلی به بررسی مدل OSI پرداختیم. و اگر به خاطر ندارید، اینجاست . قسمت 3. پروتکل های HTTP/HTTPS - 1

پروتکل انتقال داده چیست؟

این نامی است که به توافق نامه پذیرفته شده عمومی داده شده است که به لطف آن توسعه دهندگان خدمات مختلف اطلاعات را در یک فرم ارسال می کنند. به عنوان مثال، با استفاده از Google Chrome، می توانید اطلاعات را از فیس بوک و توییتر دریافت کنید، زیرا توسعه دهندگان آن را با استفاده از پروتکل استاندارد HTTP انتقال می دهند و مرورگر شما می تواند آن را مدیریت کند. قوانین یکنواخت برای خود توسعه دهندگان سمت سرور نیز بسیار راحت است: کتابخانه های زیادی وجود دارند که می توانند اطلاعات را برای شما تبدیل کرده و با استفاده از پروتکل مورد نیاز ارسال کنند. HTTP در ابتدا به عنوان پروتکلی برای انتقال صفحات HTML در نظر گرفته شد. این مورد برای مدت طولانی بود، اما اکنون برنامه نویسان اغلب رشته ها و فایل های رسانه ای را روی آن انتقال می دهند. به طور کلی، این پروتکل همه کاره و انعطاف پذیر است و استفاده از آن واقعاً آسان است. حالا بیایید بفهمیم که چگونه این کار را انجام دهیم.

ساختار HTTP

شایان ذکر است که پروتکل HTTP فقط از متن تشکیل شده است. خب، ما بیشتر به ساختاری که این متن در آن قرار دارد علاقه مندیم. هر پیام از سه بخش تشکیل شده است:
  1. خط شروع - داده های سرویس را تعریف می کند.
  2. سرصفحه ها - شرح پارامترهای پیام.
  3. متن پیام (بدن) - داده پیام. باید با یک خط خالی از سرفصل ها جدا شود.
با استفاده از پروتکل HTTP می توانید درخواستی را به سرور ارسال کنید (درخواست) و پاسخی را از سرور دریافت کنید (پاسخ). درخواست ها و پاسخ ها دارای پارامترهای کمی متفاوت هستند.

یک درخواست HTTP ساده چگونه به نظر می رسد

GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
خط شروع شامل:
  • GET - روش درخواست؛
  • / — مسیر درخواست (مسیر)؛
  • HTTP/1.1 - نسخه پروتکل انتقال داده.
سپس سرفصل ها می آیند:
  • میزبان - میزبانی که درخواست به آن خطاب می شود.
  • User-Agent مشتری است که درخواست را ارسال می کند.
هیچ متن پیامی وجود ندارد. در درخواست HTTP، فقط خط شروع و هدر Host مورد نیاز است. حالا بیایید همه چیز را به ترتیب بررسی کنیم. درخواست HTTP باید حاوی روشی باشد. در مجموع 9 مورد وجود دارد: GET، POST، PUT، OPTIONS، HEAD، PATCH، DELETE، TRACE، CONNECT. رایج ترین آنها GET و POST هستند. این دو روش در ابتدا کافی خواهند بود. GET - محتوا را از سرور درخواست می کند. بنابراین درخواست هایی با متد GET بدنه پیام ندارند. اما در صورت لزوم می توانید پارامترها را از طریق مسیر در این قالب ارسال کنید: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2 اینجا: java .com - میزبان، / ارسال - مسیر درخواست، ? - یک جداکننده که نشان می دهد پارامترهای درخواست دنبال می شوند. در انتها، پارامترها با فرمت کلید=مقدار فهرست شده اند که با علامت علامت از هم جدا شده اند. POST - اطلاعات را روی سرور منتشر می کند. یک درخواست POST می تواند اطلاعات مختلفی را منتقل کند: پارامترها در قالب کلید = ارزش، JSON، کد HTML یا حتی فایل ها. تمام اطلاعات در متن پیام منتقل می شود. مثلا:
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com

{
  "Id": 12345,
  "User": "John"
}
درخواست به javarush.com/user/create/json ارسال می شود، نسخه پروتکل HTTP/1.1 است. Accept مشخص می‌کند که مشتری انتظار دارد چه قالب پاسخی را دریافت کند، Content-Type مشخص می‌کند که بدنه پیام در چه قالبی ارسال می‌شود. Content-Length - تعداد کاراکترهای موجود در بدنه. یک درخواست HTTP می‌تواند حاوی هدرهای مختلف باشد. جزئیات بیشتر را می توان در مشخصات پروتکل یافت .

پاسخ های HTTP

پس از دریافت درخواست، سرور آن را پردازش کرده و پاسخی را برای مشتری ارسال می کند:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    <p>Hello World</p>
  </body>
</html>
خط شروع در پاسخ شامل نسخه پروتکل (HTTP/1.1)، کد وضعیت (200)، شرح وضعیت (OK) است. سرفصل ها نوع و طول مطالب را نشان می دهند. بدنه پاسخ حاوی کد HTML است که مرورگر به صفحه HTML می کشد.

کدهای وضعیت پاسخ

همه چیز با متن و هدر پیام واضح است، اما ارزش گفتن چند کلمه در مورد کدهای وضعیت را دارد. کدهای وضعیت پاسخ همیشه سه رقمی هستند و رقم اول کد، دسته بندی پاسخ را نشان می دهد:
  • 1xx - اطلاعاتی. درخواست دریافت شده است، سرور آماده ادامه است.
  • 2xx - موفق درخواست دریافت، درک و پردازش شده است.
  • 3xx - تغییر مسیر. برای پردازش درخواست باید مراحل زیر انجام شود.
  • 4xx - خطای مشتری. درخواست حاوی خطاهایی است یا با پروتکل مطابقت ندارد.
  • 5xx - خطای سرور. سرور قادر به پردازش درخواست نبود، اگرچه به درستی تشکیل شده بود.
رقم دوم و سوم در کد جزئیات پاسخ را نشان می دهد. مثلا:
  • 200 OK - درخواست دریافت شد و با موفقیت پردازش شد.
  • 201 Created - درخواست دریافت شد و با موفقیت پردازش شد که منجر به ایجاد یک منبع جدید یا نمونه آن شد.
  • 301 انتقال دائمی - منبع درخواستی به طور دائم منتقل شده است و درخواست های بعدی باید در آدرس جدید انجام شود.
  • 307 تغییر مسیر موقت - منبع به طور موقت منتقل شده است. در حال حاضر، می توانید با استفاده از تغییر مسیر خودکار به آن دسترسی داشته باشید.
  • 403 ممنوع - درخواست واضح است، اما مجوز لازم است.
  • 404 یافت نشد - سرور منبع را در این آدرس پیدا نکرد.
  • 501 اجرا نشد - سرور از عملکردی برای پاسخ به این درخواست پشتیبانی نمی کند.
  • نسخه 505 HTTP پشتیبانی نمی شود - سرور از نسخه مشخص شده پروتکل HTTP پشتیبانی نمی کند.
علاوه بر کد وضعیت پاسخ، شرح وضعیت نیز ارسال می شود که درک معنای یک وضعیت خاص را بصری می کند. پروتکل HTTP بسیار کاربردی است: تعداد زیادی هدر را فراهم می کند که با استفاده از آنها می توانید ارتباط انعطاف پذیری را بین مشتری و سرور تنظیم کنید. تمام سرفصل های درخواست و پاسخ، روش های درخواست و کدهای وضعیت پاسخ را نمی توان در یک مقاله در نظر گرفت. در صورت لزوم، می توانید مشخصات پروتکل رسمی را بخوانید که تمام تفاوت های ظریف را توضیح می دهد. پروتکل HTTP معمولا در پورت 80 استفاده می شود، بنابراین وقتی آدرسی را مشاهده می کنید که به پورت 80 ختم می شود، می توانید مطمئن باشید که باید از طریق HTTP به آن دسترسی داشته باشید. با توسعه فناوری و جابجایی فعال داده های شخصی در اینترنت، ما باید به این فکر می کردیم که چگونه محافظت بیشتری برای اطلاعاتی که مشتری به سرور منتقل می کند، ارائه دهیم. نتیجه پروتکل HTTPS بود.

تفاوت بین HTTPS و HTTP چیست؟

HTTPS از نظر نحوی با پروتکل HTTP یکسان است، یعنی از همان خطوط شروع و هدرها استفاده می کند. تنها تفاوت ها رمزگذاری اضافی و پورت پیش فرض (443) است . HTTPS بین HTTP و TCP رمزگذاری می شود، یعنی بین لایه های برنامه و انتقال. اگر فراموش کرده اید که چیست، به مقاله مدل OSI نگاهی بیندازید . استاندارد رمزگذاری مدرن TLS است. ما خیلی به این موضوع نمی پردازیم، اما به یاد داشته باشید که رمزگذاری قبل از رسیدن اطلاعات به لایه انتقال اتفاق می افتد . HTTPS کاملاً تمام اطلاعات را رمزگذاری می کند به جز میزبان و پورتی که درخواست به آن ارسال می شود. برای تغییر سرور به استفاده از پروتکل HTTPS به جای HTTP، نیازی به تغییر کد سرور نداریم. این قابلیت در ظروف servlet فعال است که در مقالات بعدی در مورد آن صحبت خواهیم کرد. برای امروز کافی است. اما یک دقیقه صبر کنید. برای درک درخواست های HTTP، Google Chrome را باز کنید، F12 را فشار دهید، تب Network را انتخاب کنید. تمام درخواست ها و پاسخ های ارسال/دریافت شده توسط مرورگر شما در اینجا نمایش داده می شود. قسمت 4. Maven Basics قسمت 5. Servlets. نوشتن یک برنامه وب ساده قسمت 6. ظروف Servlet قسمت 7. معرفی الگوی MVC (Model-View-Controller) قسمت 8. نوشتن یک برنامه کوچک فنری بوت
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION