1
Crouz Security Teamبه نام خدا
HTTP
(
Clients & Servers) یک راهنمای کاربردی برای نوشتن مشتری و سرویس دهندهبه شما امکان نوشتن مرورگرهای وب،
HTTP یک پروتکل شبکه ساده و قوی برای وب است. دانستن شیوه کاربرد و کارایی HTTPسرورهای وب، صفحه های دانلود خودکار، چک کننده های لینک و بقیه ابزارهای مفید را میدهد
.Clients
برای شروع
) HTTP توضیح می دهد و جزئیات نوشتن مشتری و سرویس دهنده HTTP این متن آموزشی به سادگی در مورد ارتباط باHTTP . آشنا می کند "Socket Programming" را به شما آموزش می دهد. همچنین شما را با کلیات (& Serversکاملا کافی و ساده است
. "Socket Programming"استفاده می کنید در غیر این صورت اول باید آن را یاد بگیرید
و نیمه دوم در مورد نیازمندی های به وجود آمده و امکانات جدید آن بحث می کند
. نیمه اول CGI را می خوانید احتمالاً از Method هنگامی که شما این. HTTP این متن در مورد پایه ها و کلیات 1,0را توضیح نمی دهد بلکه کلیات و چارچوبی از آن را توضیح می دهد تا دریابید به چه طریق نیازها
HTTP این متن تمامی جزئیات 1,1بر آورده می شوند و در صورت نیاز کجا می توانید اطلاعات بیشتر به دست بیاورید
قبل از شروع دو پاراگراف زیر را با دقت مطالعه کنید
. HTTP از طریق:<LECTURE>
و یا سایر برنامه های شبکه نیازمند دقت بیشتر نسبت به نوشتن برنامه برای یک سیستم است
شما باید طبق قوانین استاندارد شده حرکت کنید
نمی گیرید
برنامه ی بد برای سیسم خودتان موجب تلف شدن منابع خودتان میشود میشود که شامل زیر می شود
(به نظر شما چرا؟)! HTTP نوشتن(برنامه بنویسید)،در غیر این صورت کسی شما را درک نمی کند و مورد توجه قرار. ولی از همه چیز مهم تر بار مسئولیتی است که با نوشتن برنامه برای سیستم های دیگر متوجه شما میشود . نوشتن یک:CPU time, bandwidth, memory
نوشتن یک برنامه شبکه بد باعث تلف شدن منابع مردم دیگر و نوشتن یک برنامه واقعاً بد باعث تلف کردن منابع هزاران نفر در یک
زمان می شود
کارایی و بهره کمتری نسبت به یک برنامه نویسی مرتب و از روی اصول خواهد داشت
دیگران احترام بگذارید
! برنامه نویسی در هم و برهم و نامرتب شبکه از طریق استاندارها می تواند اصلاح شود. ممکن است مطمئن تر شود ولی. بنابراین با دقت و مودب باشید و به نظرات.قبل از اینکه بدانید چه می کن ید دچار وسوسه نشوید تا برنامه هایی بنویسید که به طور خودکار لینک های وب را دنبال می کنند
.(
Robots & Spiders)این برنامه ها می توا نند مفید واقع شوند ولی یک روبات که بد نوشته شده یکی از بدترین نوع برنامه ها بر روی وب است
کورکورانه به تعداد لینک ها می افزاید و به سرعت منابع یک سرور را به یغما می برد . اگر خواستید برنامه ای مثل یک روبات بنویسید،
به لینک زیر مراجعه کنید:
2
. به طورCrouz Security Teamhttp://info.webcrawler.com/mak/projects/robots/robots.html
ممکن است در آنجا برنامه مورد نظر شما موجود باشد و اگر هم می خواهید خودتان بنویسید به سه لینک زیر سر بزنید:
http://info.webcrawler.com/mak/projects/robots/guidelines.html
http://info.webcrawler.com/mak/projects/robots/norobots.html
http://info.webcrawler.com/mak/projects/robots/exclusion.html
</LECTURE>
حال شروع به کار می کنیم.
چیست؟
HTTPیک پروتکل شبکه برای انتقال مجازی تمامی فایل ها و انواع داده ها
"Hypertext Transfer Protocol" مخفف عبارت HTTPاست . این داده ها (
جای
میگیرد (و این متن از شرح بقیه حالت ها صرف نظر می کند).
محسوب می شود، زیرا مرورگر درخواست خود را به سرویس دهنده (
به درخواست او پاسخ می دهد . پورت استاندارد و (
World Wide Web) که مجموعا منابع نامیده می شوند) بر روی شبکه تار عنکبوتی جهانی With all EXT)TCP/IP Sockets بر روی HTTP عکس ها، نتایج فرم ها و یا هر چیز دیگر باشد . معمولا ،HTML میتوانند شامل صفحاتHTTP Client) HTTP یک مرورگر وب نوعی مشتریWeb Server) یا وب سرور می فرستد و وب سرور (HTTP Server) HTTPپورت 80 می باشد . بر روی این پورت منتظر درخواست ها می ماند (البته می تواند از هر
پورت دیگر نیز استفاده کند).
HTTP پیش فرض برای سرویس دهندهها چیستند؟
Resourceمشخص
URL توده ای از اطلاعات است که توسط Resource علاوه بر انتقال فایلها، برای انتقال منابع نیز به کار می رود، یک HTTPو به سرور منتقل می شود.
یک ،
سند که قابل دسترسی به زبان های گوناگون است و یا چیزهای دیگر باشد.
برای سادگی بیشتر می توانید منبع را مشابه فایل در نظر بگیرید ولی با حالتی عمومی تر، به عبارت دیگر ،
یا فایل و یا خروجی اسکریپت از طرف سرور می باشند. ،
CGI بیشترین نوع منابع، فایل ها هستند ولی یک منبع می تواند : نتایج تولید شده توسط یک تولید کننده، خروجی ی ک اسکریپتHTTP در هنگام یادگیریHTTP تقریبا تمامی منابع:
HTTP ساختار چگونگی انجام مذاکراتیک
خود را از طریق آن ارتباط می فرستد. (
خواسته
پیغام های درخواست و پاسخ مشابه هم
میباشند و هر دو از کلمات انگلیسی تشکیل شده اند. هر دو شامل:
HTTP استفاده می کند . مشتری (Client-Server) از مدل مشتری-سرویس دهنده HTTP ، مشابه اکثر پروتکل های شبکهRequest Message) با سرویس دهنده برقرار می کند و درخواست (Connection) ارتباطResource معمولا شامل Response Message) را به مشتری برمی گرداند (Response Message) سپس سرور پیغامی حاوی پاسخFormat . شده توسط مشتری است )! بعد از پاسخ به درخواست، سرور ارتباط را قطع می کند- خط آغازین
3
Crouz Security TeamHeader Line
- یک خط خالی
- و پیام اختیاری (مثل یک فایل و یا نتایج فرم یا خروجی فرم).
- یک و یا چنددر زیر ساختار کلی آنرا می بینید:
Example Code
<initial line, different for request vs. response>
Header1: value1
Header2: value2
Header3: value3
<optional message body goes here, like file contents or query data;
it can be many lines long, or even binary data $&*%@!^$@>
و
دارای ارزش 13 و 10 هستند (توجه داشته باشید در سیستم های مختلف شاید این مقادیر تغییر کند).
CR تنظیم شوند (یعنی از پایان یک خط به متن به آغاز خط بعدی منتقل شوند ). در اینجا CRLS باید به ترتیب Headers و Initial خطوطASCII کدهای LFآغاز کردن خط درخواست:
از یکدیگر جدا می شوند:
Space خط آغازین برای درخواست و عکس العمل متفاوت است. خط درخواست دارای 3 قسمت است که بادر حال استفاده
HTTP درخواستی و نسخه Resource آدرس محلی ،(Get Post Head) یک روش درخواستمانند:
Example Code
GET /path/to/file/index.html HTTP/1.0
4
Crouz Security Teamتوجه:
را بده به من !
" روش های دیگر Resource" : متداولترین روش مورد استفاده است که به زبان خودمانی به سرور می گوید GETهستند که در آینده در مورد آنها توضیح داده می شود. نام روش ها همواره با حروف بزرگ است.
مشابه
در حروف بزرگ درج می شود.
HEAD و POST شاملURI نامیده می شود (یک request URI است که بعد از اسم میزبان می آید که URL قسمتی از Resource آدرس محلیHTTP / x.x همواره به فورمت HTTP است ولی در حالتی کلی تر) نسخه URL5
Crouz Security Teamآغاز کردن خط پاسخ (یا خط وضعیت):
HTTP
در حال استفاده، یک کد مربوط به عکس العمل ارسالی سرور و یک اصطلاح انگلیسی که به شرح کد وضعیت می پردازد. مانند:
از یکدیگر جدا می شوند . نسخه Space خط آغازین پاسخ که خط وضعیت هم نامیده می شود، هم دارای 3 قسمت است که باExample Code
HTTP/1.0 200 OK
Or
HTTP/1.0 404 Not Found
توجه:
.
کد وضعیت داده شده برای خواندن کام پیوتر و به اصطلاح انگلیسی برای خواندن انسان درج می شود و می تواند تغییر کند . کد وضعیت
شامل سه عدد صحیح است که در کنار هم آمده اند:
"HTTP/x.x" همانند فورمت خط درخواست درج می شود HTTP نسخه1: تنها نشان دهنده یک پیغام خبری است.
xx2: نشان دهنده پایان یافتن موفقیت آمیز یک عمل است.
xxدیگر هدایت می کند.
URL 3: مشتری را به یک xxمتداول ترین کدهای وضعیت:
درخواستی (فایل و یا خروجی یک اسکریپت ) در بدنه پیغام فرستاده
resource 200 که به معنای موفقیت عمل است و در پی آن OKمیشود
.404 درخواستی موجود نمی باشد
301 Moved Permanently
302 Moved Temporarily
303 See Other (HTTP 1.1 only)
. Not Found resourceپیغام عکس العمل این روش بارها توسط اسکریپت
header در Location : دیگری منتقل شده است (که آدرس جدید در خط URL به Resourceبرای تغییر مکان مرورگر استفاده می شود).
CGI های500 : یک خطای غیر منتظره در سرور:
در اکثر مواقع یک اسکریپت در قسمت سرور دارای خطای منطقی است و یا Server Errorنمی تواند به درستی اجرا شود.
در لینک زیر لیست کامل این کدها را مشاهده می کنید:
http://g0tr00t.mson.org/docs/misc/HTTP.html#httpspec
:
Header خطوط6
Crouz Security Teamمهیا کننده اطلاعات لازم برای، درخواست و یا پاسخ و به طور کلی در رابطه با شئ که در بدنه نامه ارسال می شود،
هستند.
که به
قسمت سوم توضیح
داده شده است).
Header خطوط"Header-Name:Value" در یک خط جدا تعریف می شود Header این خطوط به صورت انگلیسی درج می شوند و هرRFC- پایان می یابد . این همان فورمتی است که برای ارسال نامه و یا اخبار استفاده می شود (در 822 CRLF صورت:
Header در مورد خطوط RFC جزئیات 822نسبت به حروف کوچ ک و بزرگ حساس نمی باشد
آغاز
می شوند و بعضی مواقع برای آسان خواندن در چند خط تجزیه می شوند.
زیر با هم هیچ تفاوتی ندارند:
Header پایان یابند . نام CRLF همان طور که در بالا گفته شد باید به صورتTAB با فاصله و یا Header می تواند بین ":" و ارزش قرار بگیرد. خطوط TAB هر تعداد فاصله و یا .(Not Case Sensitive)Header پس بنابر توضیحات فوق دوExample Code
Header1: some-long-value-1a, some-long-value-1b
HEADER1: some-long-value-1a,
some-long-value-1b
دارای
لازم و ضروری است.
HTTP تعریف شده است که البته هیچ کدام ضروری نیستند و 1,1 Header دارای 16 HTTP بهتر است بدانید که 1,0"Host:" ، ها Header تعریف شده است که از میان این Header 46ها استفاده کنید:
Header برای رعایت کردن آداب شبکه از اینکه آدرس صندوق پستی شخصی که درخواست را فرستاده مشخص می کند و یا برنامه اجرا شده خود این کار را :
Form Headerباید توسط خود کاربر تعیین شود).
نوشته
Header میکند (این"Program-Name/x.xx" مشخص می کند چه برنامه ای درخواست را فرستاده است که بصورت :User-Agent Headerمیشود.
به صورت زیر فرستاده می شود:
Header قسمت ،NetScape شماره نسخه برنامه است. به عنوان مثال برای 3,0 x.xx"User-Agent: Mozilla/3.0 Gold"
به مسئولین سرورها برای رفع مشکل کمک می کند، آنها همچنین مشخصاتی در مورد کاربر آشکار می کنند . وقتی شما
هایی در برنامه خود قرار بدهید باید از امنیت اطلاعاتی که ارسال می کنید مطمئن شوید..
ها در جواب خود تصمیم بگیرید:
در مورد درخواست است که نام و شماره نسخه برنامه پاسخ د هنده به درخواست را
Header اینHeader تصمیم می گیرید چهHeader اگر شما در حال نوشتن یک سرویس دهنده هستید، در مورد قرار دادن اینUser-Agent که همانند :Server Headerقسمت زیر را ،
بر می گرداند:
Apache درج می شود برای مثال نسخه آزمایشی سرورهای "Program-Name/x.xx" مشخص می کند و به صورت"Server: Apache/1.2b3-dev"
7
Crouz Security Teamدرخواستی ارسال می کند که از ساعت گرینویچ استفاده
Resource که تاریخ آخرین تغییرات را برای :Last Modified Headerمیشود:
"Last-Modified: Fri, 31, Dec, 2001 23:59:56 GMT"
8
Crouz Security Team:(
Body) بدنه پیغامشامل یک بدنه پیغام که داده ها در آن ثبت شده باشد . در پاسخ به درخواست
درخوستی در همین قسمت پیغام درج به مشتری فرستاده می شود (متداولترین حالت استفاده از بدنه پیغام ) و یا متن
Header ممکن است بعد از خطوط HTTP یک پیامresourceتوضیح داده شده در مورد یک پیغام خطا باشد.
در یک درخواست اطلاعات وارد شده توسط کاربر و یا فایل فرستاده شده توسط اودر این قسمت ثبت و به سرور فرستاده می شود.
زیر که در مورد بدنه توضیح می دهند در آن پیغام وجود داشته باشد:
header اگر پیغامی شامل بدنه باشد همیشه باید خطوطtext/html
یا Image/gif : نوع داده ثبت شده در بدنه را مشخص می کند. مثل Header این :Content-Typeتعداد بایت های درج شده در متن پیغام را مشخص می کند.
Header این :Content-Length:
HTTP الگوی انجام یک مبادلهدر ابتدا یک ارتباط با میزبان ،
مشخص
http://www.somehost.com/path/file.html مثلا برای URL برای فراخواندن یک فایل درURL بر روی پورت 80 برقرار کنید (پورت پیش فرض وب سرور 80 است و به همین دلیل در www.somehost.comنوشته می شود).
http://www.somehost.com:port نمی شود. در غیر این صورت به فورمتExample Code
GET /path/file.html HTTP/1.0
From: someuser@crouz.com
User-Agent: HTTPTool/1.0
[blank line here]
9
Crouz Security Teamعکس العمل سرور در مقابل درخواست شما چیزی مشابه خطوط زیر خواهد بود:
Example Code
HTTP/1.0 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/html
Content-Length: 1354
<html>
<body>
<h1>Happy New Millennium!</h1>
(more file contents)
.
.
.
<!-- ZoneLabs Popup Blocking Insertion -->
<script language='javascript'>postamble();</script>
</body>
</html>
این ارتباط را برقرار می کنیم (تجربه
:(
برقرار کنید و به صورت دستی درخواست خود را تایپ و ارسال نمائید . به
شما ظاهر می شود . این خیلی اوقات در مواقع رفع اشکال و آگاهی از طریق پاسخ به یک
درخواست خاص، بسیار مفید است.
10
telnet بعد از ارسال پاسخ، سرور ارتباط را قطع می کند . برای آشنایی بیشتر در زیر به وسیلهtelnet به وسیله HTTP عملی باhttp شما می توانید یک ارتباط با سرور telnet به وسیلهtelnet این ترتیب پاسخ سرور در صفحهCrouz Security Teamخود خط زیر را تایپ کنید:
command Prompt خوب درExample Code
telnet www.somehost.com 80
سپس درخواست خود را خط به خط مشابه زیر وارد کنید
GET /path/file.html HTTP/1.0
[headers here, if any]
[blank line here]
:وقتی درخواست شما به پایان رسید به وسیله یک خاط خالی به سرور اعلام می کنید و سرور پاسخ را ارسال می کند که شامل خط
ها و بدنه پیغام است.
Header ، وضعیت:
Post و Head مانند HTTP روش های دیگرهستند.
Post و Head ، دو روشی که بیشترین کاربرد را دارند ،GET در کنار:
Head روشهای پیغام عکس العمل را درخواست و
دریافت نمی کند (به عنوان مثال بدنه پیغام ارسال نمی شود ) و این در مواقعی که می خواهید بدون دانلود یک
از مشخصات آن آگاه شوید، سودمند است.
Header است تنها با این تفاوت که از سرور تنها GET این درخواست دقیقا مشابه درخواستresource هیچ گونهresourceها.
تجربه کنید تنها با این تفوات که خط آغازین یک چیزی مشابه زیر
است:
Header در پاسخ به این درخواست، سرور باید هیچ گاه بدنه پیغام را ارسال کند تنها خط وضعیت وGET همانند روش telnet این روش را هم می توانید به وسیلهHEAD /path/file.html HTTP/1.0
:
POST روشبرای ارسال داده به سرور هنگامی استفاده می شود که داده ها قبل از ارسال نیاز به پردازش و عبور از بعضی مراحل
.(
11
Post روشCGI Script) CGI مشخص شده دارند مانند یک اسکریپتCrouz Security Team:
GET و POST تفاوت های درخواستاضافه برای تشریح داده ها مانند:
همراه درخواست ارسال میشود.
header * در بدنه پیغام درخواست، مجموعه ای از داده ها قرار دارد و معممولا چندContent-Length و Content-Typeاشاره نمی کند بلکه آدرس برنامه ای که عملیات را بر روی داده های ارسالی انجام می دهد را
مشخص می کند.
به طور معمول یک فایل ثابت نیست بلکه خروجی برنامه است.
resource به یک ،URI * درخواستHTTP * عکس العملContent-Type
معمولا به صورت:
بوده است . در این حالت CGI به اسکریپت HTML تاکنون، ارسال اطلاعات یک فرم ،POST بیشترین کاربردapplication/x-www-form-URLEncoded
رمزگذاری شده داده فرم را مشخص می کند (بعد از مبحث به شرح چگونگی رمزگذاری می
پردازیم).
دریافت می کند سپس رمز آنرا می گشاید . در زیر نوعی ثبت (
آمده است:
URL طول Content-Length وSTDIN) بدنه پیغام درخواست را بهصورت ور ودی CGI اسکریپتPOST اطلاعات فرم توسطExample Code
POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
home=Cosby&favorite+flavor=flies
نه تنها برای انتقال داده های فرم بلکه برای هر نوع داده ای استفاده کنید فقط باید توجه داشته باشید
که هم فرستنده و هم گیرنده هر دو با فورمت ارسالی داده ها آشنا باشند.
افزوده می شوند
(در مورد این روش هم توضیح داده می شود).
را مطالعه
.
POST شما می توانید از روشURI هم می تواند بر ای ارسال اطلاعات فرم استفاده شود. در این حالت داده های فرم رمزگذاری و به GET روشNCSA's CGI definition پشتیبانی می کند شما باید CGI دارید که از اسکریپت HTTO اگر شما قصد نوشتن سرورEnvironment Variables کنید و همچنین:
URL-Encondingثبت می شوند و در زیر چگونگی
رمزگذاری تشریح شده است:
12
POST یا GET در روش های URL-encoded معمولا به صورت html داده های یک فرمCrouz Security Teamمعادل ارزش کاراکتر در جدول اسکی است ). به ،
نیز گفته می شود (مثل
دوم- تمام فاصله ها را به
سوم- نام ها و ارزشهای متغیرها را به وسیله = و
xx) تبدیل کنید "%xx" اول- تمامی کاراکترهایی که غیر از حروف و عدد هستند را& ^ % $ # @ = +). "UnSafe" این کاراکترها؛ کاراکترهای ناامن"+" تبدیل کنید.& به صورت رشته تبدیل کنید. مثل:Example Code
name1=value1&name2=value2&name3=value3
می باشد.
دیگر با اسم
رمزگذاری شده به صورت زیر می باشد:
"Query String" قسمت GET در قسمت "بدنه پیام" و در POST چهارم- این رشته درfield را ثبت کند و "Lucy" تعیین شده باشد و کاربر اسم "Name" به صورت field برای مثال اگر در یک فرم نام یکURL باشد "Fred & Ethel" و ارزش "Neighbors"Example Code
name=Lucy&neighbors=Fred+%26+Ethel
که دارای طول 34 می باشد.
( قسمت 2,2
توضیح داده شده است و تمام این مراحل برای تبادل اطلاعات ثبت شده فرم به یک رشته بلند است.
RFC- قسمت 2,4 (سابقا در 1738 RFC- تنها مرحله اول بالا است که در 2396 "URL-encoding" از لحاظ فنی عملبرای ثبت داده های فرم:
GET استفاده ازURI
نیز می توان برای ارسال مجموعه ای از داده ه ای کوچک به سرور استفاده کرد . کلید این کار تنها در فهمیدن دقیق GET از"
حتما نباید اسم فایل باشد بلکه یک رشته بلند است که منبع اطلاعات را بر روی سرور مشخص می کند که این ممکن است اسم
یک درخواست" است.URIفایل یا برای مثال یک آدرس مشخص به یک منبع اطلاعاتی مشخص باشد . نتایج این ثبت داده حتما نباید یک فایل باشد بلکه می تواند
نتایج یک جستجو، که موتور جستجو و داده منتقل شده از فرم به همراه هم آن را تولید کرده اند، باشد.
رشته رمزگذاری را
وارد کنید:
URL با گذاشتن علامت پرسش "?" بعد از GET توسط CGI بنابراین برای ارسال اطلاعات به یک اسکریپتExample Code
GET /path/script.cgi?field1=value1&field2=value2 HTTP/1.0
که برای انتقال داده های کوچک استفاده می شود (برای داده های بزرگ از
استفاده کنید).
GET این بود طریقه ارسال داده های یک فرم به وسیلهPOST13
Crouz Security Team:
HTTP ProxiesProxy
به مشتری می رسد .
ها مورد استفاده
قرار می گیرند.
ارسال می کند . درخواستی که به
درخواستی (به
در واقع برنامه ای است که بین مشتری و سرویس دهنده قرار می گیرد در خواست ها از مشتری به HTTP Proxy یکProxy درخواست را به سرویس دهنده می فرستد . پاسخ هم از همین راه و از طریق Proxy فرستاده می شود وFirewall ها معمولا در Proxy . هم نقش سرویس دهنده و هم نقش مشتری را اعمال می کند proxy به این ترتیبproxy استفاده می کند تمام درخواست های خود را به جای سرور به آن proxy وقتی یک مشتری ازresource کامل URL فرستاده می شود با درخواستی که به سرور ارسال می شود متفاوت است . در خط اول از proxyاستفاده می شود: (
path جایExample Code
GET
http://www.somehost.com/path/file.html HTTP/1.0می داند که درخواست را باید به کدام سرور ارسال کند.
proxy از این طریقپایان قسمت اول:
آشنا شدید
می پردازد و نیازمندی های جدید آن را بررسی میکند
یاد داشته باشید که شعار برنامه نویسی برای شبکه در یک جمله خلاصه می شود:
درخواست خود سخت گیری و در برابر درخواست دیگران مدارا کنید
دیگر درخواست خود را به شما ارسال کنند ولی شما به نحوی باید برنامه را بنویسید تا به درخواست های غیر معمول احتمالی هم پاسخ
دهد:
و
. ادامه این آموزش به HTTP خوب به پایان نیمه اول این آموزش رسیدیم. در این قسمت شما با کلیات و ساختمان 1,0. در پایان این بخش به HTTP نحوه ارتقا برنامه های شما برای استفاده از . 1,1" برای چیزی که درخواست می کنید و در نحوه" . به عبارت دیگر مشتری ها و سرور های دیگر شاید به نوعیCRLF به خط پایان دهد .