معرفی و بررسی و آشنایی با پروتکل HTTP – قسمت سوم

HTTP
اشتراک

معرفی و بررسی و آشنایی با پروتکل HTTP – قسمت سوم

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

 

HTTP-Response

 

بعد از دریافت و تفسیر یک پیام درخواست یا Request Message سرور به Request ارسالی، توسط یک پیام پاسخ که Response Message نامیده می شود،به درخواست ارسالی پاسخ می دهد. پیامی که سرور به درخواست کننده یا Client میدهد، به شکل و فرمت زیر می باشد:

A Status-line

Zero or more header (General|Response|Entity) fields followed by CRLF

An empty line (i.e., a line with nothing preceding the CRLF)
indicating the end of the header fields

Optionally a message-body

هر کدام از محتویات مورد استفاده در یک Response-Message شامل توضیحاتی می باشد که در ادامه به بررسی هر یک از آن میپردازیم.

Message Status-Line
این پیام به نوعی وضعیت کلی خط را به ما نشان می دهد، ساختار آن هم همان طور که در کد زیر پیداست، بدین شکل می باشد که شامل، ورژن پرتکل مورد استفاده در پیام و بدنبال آن یک کد وضعیت نمایش داده می شود که به صورت عددی می باشد و بدنبال آن نیز یک عبارت متنی که به نوعی توضیحاتی در مورد وضعیت خط دریافت می کند نمایش داده می شود. فقط به این نکته هم باید دقت داشت که هر کدام از این بخش ها باید با کاراکتر Space از هم جدا شوند.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

HTTP-Version
این فیلد، ورژن پروتکل HTTP می باشد که سرور از آن پشتیبانی می کند .در اینجا مثالی از HTTP-Versionn آوره شده است.

HTTP-Version = HTTP/1.1

Status Code
این المان، یک کد سه رقمی از نوع عدد صحیح می باشد، اولین رقم آن بیانگر کلاسی از پاسخ ارسالی توسط سرور می باشد، دو رقم آخر این کد، عمل خاصی را انجام نمی دهد. در اینجا برای رقم اول کد پنج نمونه از ارقامی که می پذیرد را ذکر می کنیم.
۱XX: Informational
این کد بدین معنا می باشد که درخواست ارسالی دریافت شده است، و پردازش های لازم به روی درخواست در حال انجام می باشد.
۲XX: Success
این کد بدین معنا می باشد که پیام ارسالی با موفقیت دریافت شده و کاملا واضح و قابل درک بوده و همچنین پیام پذیرفته شده است و مشکلی وجود نخواهد داشت.
۳XX: Redirection
این کد، بدین معنا می باشد که، برای تکمیل درخواست، باید مجددا درخواست مورد نظر ارسال شود.
۴XX: Client Error
این کد بدین معنا می باشد که، درخواست ارسالی از نظر ترکیب و فرمت دارای اشکال می باشد و صحیح نمی باشد یا اینکه کلا پیام درخواست تکمیل شدنی نیست و نمی توان پردازش مورد نظر را بر روی آن انجام داد.
۵XX: Server Error
این کد بدین معنا می باشد که ، درخواستی که ارسال شده است، ظاهرا مشکلی ندارد، اما سرور قادر به پاسخ گویی به آن نمی باشد.
نکته ای که حائز اهمیت می باشد، این است که ، کد های وضعیت HTTP بسیار گسترده هستند ، با این حال برنامه ها و توسعه دهنده های HTTP الزاما نباید مفهوم همه ی کد های ثبت شده را بدانند. مبحث کد های وضعیت HTTP در بخش های بعدی به طور جداگانه بررسی خواهد شد.
فیلد های سرآیند پاسخ(Response Header Fields)
فیلد های سرآیند پاسخ، این اجازه را به سرور می دهند، که یک سری اطلاعات اضافی که تنها جنبه ی توضیحی از Response ارسالی توسطServer را دارند،به همراه پیام ارسالی به سمت Client ارسال کند. مشخصه و ویژگی منحصر به فرد این اطلاعات اضافی این است که هیچ فضایی از خطوط ارسالی را اشغال نمی کنند.این فیلد های سرآیند،اطلاعاتی در مورد سرور و همچنین اظلاعاتی در مورد دسترسی های بیشتر به منابعی که توسط درخواست های URI شناسایی شده است ، به ما می دهند.
مثال هایی از پیام های پاسخ(Response Message)
مثال زیر نحوه ی اضافه کردن یک صفحه ی Hello.htm از یک Web Server به روی یک صفحه ی درحال اجرا را نشان می دهد.

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<html>
<body>
<h1>Hello, World!</h1>
</body>
</htmll>

در مثال زیر یک صفحه ای نمایش داده شده است که حاوی متن Error می باشد، که دلیل بروز این Error پیدا نشدن صفحه ی درخواستی توسط Clientمی باشد، این Error از طرف Web Server ارسال می شود.

HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL /t.html was not found on this server.</p>
</body>
</htmll>

مثال زیر نمایانگر یک Error می باشد که، علت بروز آن، ناشناس بودن ورژن HTTP درخواستی می باشد.

HTTP/1.1 400 Bad Request
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Content-Type: text/html; charset=iso-8859-1
Connection: Closed

<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>
<html>
<head>
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.</p>
<p>The request line contained invalid characters following the protocol string.</p>
</body>
</htmll>

HTTP-Method

Request Method نوع کار یا (Method) که باید بر روی منابع مشخص انجام شود را مشخص می کند . نکته ای که در بحث Request Method باید به آن توجه داشت، این است که متد هایی که Request method تعیین می کند ، به حروف بزرگ و کوچک حساس می باشد، علاوه بر این باید با حروف بزرگ نوشته شوند تا بتواند آن ها را شناسایی کند.در اینجا توضیح مختصری از متدهایی که Request Method از آنها پشتیبانی می کند را ذکر کردیم.

GET Method 

متد GET برای بازیابی اطلاعات از سرور استفاده می شود، که برای این کار از URI کمک می گیرد. درخواست هایی که از متد GET استفاده می کنند، تنها کاری که باید انجام دهند، بازیابی داده ها می باشد بدین معنا که نباید هیچ گونه اثری بر روی داده ها بگذارد، و تنها کاری که میکند، بازیابی اظلاعات از سرور داده باید باشد. در اینجا مثالی از نحوه ی ایجاد صفحه ی hello.htm توسط متد Get را ذکر کردیم.

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.TSMandegar.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

 پاسخ سرور به درخواستی که در مثال بالا ذکر شده است را در اینجا می بینید

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Vary: Authorization,Accept
Accept-Ranges: bytes
Content-Length: 88
Content-Type: text/html
Connection: Closed
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
HEAD 
همانند متد GET می باشد با این تفاوت که متد HEAD وضعیت خط یا (Line) و همچنین بخش سرآیند پیام را نیز انتقال می دهد. در اینجا نحوه ی ایجاد فایل سرآیند برای صفحه ی hello.htm را آوردیم
HEAD /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.TSMandegar.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
و همچنین پاسخی که سرور به این درخواست می دهد
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Vary: Authorization,Accept
Accept-Ranges: bytes
Content-Length: 88
Content-Type: text/html
Connection: Closed
از این مثال پیداست که سرور بعد از فایل سرآیند هیچگونه اطلاعاتی را ارسال نمی کند.
POST 
از متد POST برای ارسال اطلاعات به Server استفاده می شود، اطلاعاتی همچون اطلاعات مربوط به مشتری، آپلود فایل و موارد دیگر. متد POST برای ارسال اطلاعات به Server از فرم های ورود اطلاعات HTML استفاده می کند. در اینجا نیز یک مثالی ذکر کردیم که برای ارسال داده های یک فرم از متد POST استفاده شده است، که توسط process.cgi پردازش و در نهایت یک پاسخ برگردانده خواهد شد.
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: TSMandegar.com
Content-Type: text/xml; charset=utf-8
Content-Length: 88
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<?xml version=”1.0″ encoding=”utf-8″?>
<string xmlns=”http://clearforest.com/”>string</stringg>
در اینجا اسکریپت سمت سرور process.cgi داده ها را پردازش کرد و یک پاسخ به عنوان تایید عملیات پردازش ارسال می کند.
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: “34aa387-d-1568eb00”
Vary: Authorization,Accept
Accept-Ranges: bytes
Content-Length: 88
Content-Type: text/html
Connection: Closed
<html>
<body>
<h1>Request Processed Successfully</h1>
</body>
</htmll>
PUT
این متد، تمام نمونه های فعلی از منابع هدف را با آپلود کردن محتویات جایگزین می کند. در اینجا مثالی ذکر شده که درخواست های دریافتی از سرور را به صفحه ی hello.htm تحویل میدهد تا بتواند آن ها را در پوشه ی root در سرور ذخیره کند.
PUT /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.TSMandegar.com
Accept-Language: en-us
Connection: Keep-Alive
Content-type: text/html
Content-Length: 182
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
سرور نیز به محض دریافت پیام و آپلود کردن محتویات، یک پاسخ تحت عنوان موفقیت آمیز بودن عملیات به Client ارسال می کند.
HTTP/1.1 201 Created
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Content-type: text/html
Content-length: 30
Connection: Closed
<html>
<body>
<h1>The file was created.</h1>
</body>
</htmll>
DELETE
این متد دقیقا برعکس PUT عمل می کند، تمام نمونه های فعلی از منابع هدف را با استفاده از URII پاک می کند. در مثال زیر سرور برای حذف کردن محتویاتی که در داخل پوشه ی root صفحه ی hello.htm قرار دارد یک پیام درخواست ارسال می کند.
DELETE /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Accept-Language: en-us
Connection: Keep-Alive
سرور نیز بعد از حذف محتویات درخواستی یک پیام تایید به Client ارسال می کند.
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Content-type: text/html
Content-length: 30
Connection: Closed
<html>
<body>
<h1>URL deleted.</h1>
</body>
</htmll>
CONNECT
این متد یک تونل با استفاده از URI به سمت Serverr شناسایی و ایجاد می کند. در مثال زیر درخواست هایی که سرور برای ارتباط با یک هاست میدهد، به طور مثال itpro.ir ، ذکر شده است.
CONNECT www.TSMandegar.com HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NTT)
فرآیند ایجاد کانکشن با سرور مربوط به هاست شرکت پذیرنده و ارسال پیام تایید کانکشن به Client را در اینجا مشاهده می کنید.
HTTP/1.1 200 Connection established
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win322)
OPTIONS
این متد بیشتر برای Client مفید می باشد، تا بتواند به وسیله ی آن متد های HTTP و سایر optionn هایی که وب سرور از ان ها پشتیبانی می کند را شناسایی و دریافت کند، ممکن است که یک Client بخواهد فقط از یک یا چند متد خاص استفاده کند، یا اینکه از همه ی متد هایی که وب سرور از آن ها پشتیبانی می کند، استفاده کند، که برای اینکار کافیست که از یک علامت ستاره(*) استفاده کند، به مثال زیر توجه کنید:
OPTIONS * HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NTT)
در پاسخ سرور لیستی از تمامی متد هایی که توانایی پشتیبانی از آن ها را دارد برای ما نمایش می دهد.
TRACE
این متد باعث می شود که کاربر به صورت مرحله به مرحله هر گونه تغییراتی که در روند Requestt صورت می گیرد را ببیند. در اینجا مثالی از نحوه ی انجام این عمل را ذکر کردیم.
TRACE / HTTP/1.1
Host: www.TSMandegar.com
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
سرور هم در پاسخ به این درخواست اطلاعات زیر را برای ما لیست می کند.
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Connection: close
Content-Type: message/http
Content-Length: 39TRACE / HTTP/1.1
Host: www.tutorialspoint.com
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

ارسال دیدگاه

Your email address will not be published. Required fields are marked *

9 + 7 =

*