با سلام و درود، خب از عنوان مطلب مشخص هست که در مورد چی میخوام صحبت کنم، مقدمه چینی نمی کنم و سریع میرسم سراغ اصل مطلب، احتمالا خیلیامون از Http Requestها ساتفاده کردیم ولی به طور کامل و دقیق با Http Request آشنا نیستیم. در این مطلب سعی کردم حداقل اطلاعاتی که به نظرم یه برنامه نویس وب باید در مورد HTTP Request بدونه رو گردآوری کنم.
آشنایی با HTTP Request
HTTP یک پروتکل request-response می باشد، پس هر چیزی با یک request آغاز می شود، هر HTTP Requestشامل یه تعداد خط متن به تریتب زیر می باشد:
- request line
- صفر یا تعدادی request Headers
- یک خط خالی
- Message Body
یک پیام HTTPمعمولی به شکل زیر می باشد:
GET /Protocols/rfc2616/rfc2616.html HTTP/1.1 Host: www.w3.org User-Agent: Mozilla/5.0 (empty line)
در request خط اول request-line می باشد:
GET /Protocols/rfc2616/rfc2616.html HTTP/1.1
این خط ابتدا request methodرا دارد و سپس Uniform Resource Identifier یا همون (URI) و سپس ورژن HTTP را دارا می باشد.
دقت داشته باشید، خط آخر باید یک خط خالی باشد حتی اگر message body نداشته باشیم.
متد های Request
متد request اولین کلمه از request-line می باشد و عملی که روی سورس باید انجام شود را مشخص می کند.
- HTTP 0.9 فقط دارای یک متد GET بود.
- HTTP 1.0 متد های POSTو HEAD vh hqhti ;vn.
- HTTP 1.1 متد PUT ،DELETE ، OPTIONS ، TRACE و CONNECTرا اضافه کرد و همچنین امکان اضافه کردن متدهای دیگر را فراهم نمود.
HTTP 1.1 در نظر گرفتن متدهای GETو HEAD را اجباری کرد در صورتی که دیگر متدها را به صورت آپشنال در نظر گرفت.
- GET – به سرور می گوید که منبع مورد نظرش را برایش برگرداند.
- HEAD – مشابه با GETبا این تفاوت که server مجبور به بازگرداندن message body نمی باشد. این متد معمولا برای گرفتن header های پاسخ (response) بدون حمل کردن وزن message bodyروی network می باشد.
- POST – به سرور می گوید که message bodyباید به منبعی که توسط URI شناسایی شده، داده شود. این که سرور با message bodyچه کند به خود سرور مربوط است.
- PUT – به سرور می گوید که داده داخل message body باید منبع موجود در URIداده شده باشد.اگر داده درون منبع شناسایی شده توسط URI وجود داشت، داده جدید جایگزین می شود. در غیر این صورت، یکی منبع جدید در مکان URI ساخته می شود.
- DELETE – به سرور می گوید تا منبع شناسایی شده توسط URIرا حذف کند.
- OPTIONS- به سرور می گوید که لیستی از متد های HTTP که سرور پشتیبانی می کند را باز گرداند.
- PATCH- به سرور میگوید که داده درون message body منبع شناسایی شده در URI را ویرایش می کند.
ریکوئست متد های امن – Safe request methods
یک متد، امن در نظر گرفته می شود اگر stateسرور را تغییر ندهد. به این معنی که سرور فقط اطلاعات فراهم کند، نه چیز دیگری. GET، HEAD، OPTIONS و TRACE متد های امن هستند زیرا آنها هیچ چیزی را درون سرور تغییر نمی دهند. در مقایسه، POST، PUT و DELETE متد هایی هستاند که وضعیت/state سرور را تغییر می دهند، برای مثال، پس از یک request از نوع POST ، داده درون سرور تغییر می کند.
ریکوئست متد های idempotent
یک ریکوئست متد در صورتی idempotent در نظر گرفته می شود که state سرور را برای بار دوم که متد با داده مشابه فراخوانی شد، تغییر ندهد.متدهای امن با توجه به تعریفی که داشتند، همگی idempotentهستند. متد های PUT و DELETE هم idempotentهستند ولی safe نیستند.
Request Headers
علاوه بر متد که روکوئست آن را مشخص می کند، اطلاعات دیگری نیز درون HTTP request headers قرار دارد. request headers ها با صورت جفت هان نام:مقدار هستند که توسط دو نقطه از هم جدا و به صورت متن می باشند.
HTTP request headers اغلب آپشنال هستند. تنها header که درون HTTP 1.1 اجباری است، فیلد Host headerمی باشد.اما اگر پیام شامل message bodyباشد، شما نیاز دارید که Content-Length یا فیلد Transfer-Encoding را داشته باشید.
در جدول زیر، HTTP request header های رایج را مشاهده می کنید:
فیلد هدر | توضیحات |
---|---|
Accept | Content type هایی که توسط کلاینت به عنوان قسمتی ازHTTP response قابل پذیرش هستند.برای مثال ،Accept: text/html به سرور این سیگنال را میدهد که کلاینت نیاز به response body دارد که content type آن از نوع HTML باشد. |
Accept-Charset | مجموعه charset هایی که مورد نیاز سرور است. برای مثال، Accept-Charset: utf-8 به سرور می گوید که کلاینت نیاز به response body به صورت utf-8 دارد. |
Authorization | برای ارسال Basic Authentication credential به سمت سرور استفاده می شود |
Cookie | کلاینت باید cookieهایی که توسط سرور فراخوانی شده تنظیم شده است را برگرداند. اگر سرور سه cokkie را قبلا روی مرورگر تنظیم کرده باشد، فیلد هدر Cookie شامل تمامی سه کوکی به صورت جدا شده توسط semicolon و جفت های از نوع stringو به صورت name-value خواهد بود. Cookie: my_first_cookie=hello; my_second_cookie=world |
Content-Length | طول request body یه صورت octet |
Content-Type | نوع محتوای بدنه درخواست (request-body) را مشخص می کند .زمانی که POSTیا PUT فرستاده می شود، نوع محتوی (content-type) به صورت پیش فرض x-www-form-urlen-coded می باشد. اما اگر یک فایل آپلود شود، نوع محتوی باید به صورت multipart/form-data باشد. |
HOST | نام سرور را مشخص می کند، همراه با شماره پورت. اگر شماره پورت فرستاده شنده باشد، پورت ۸۰ در نظر گرفته می شود. |
Referrer | آدرس صفحه قبل که به صفحه درخواست داده شده لینک شده است. |
User-Agent | کلاینتی که فراخوانی کرده است را توصیف می کند. |
HTTP Response
به ازای هر درخواست-request یک HTTP Response فرستاده می شود. همانند HTTP Request، پاسخ یا همان responseنیز شامل چند خط متنی می شود:
- یک خط وضعیت
- صفر یا چند response headers
- یک خط خالی
- بدنه پیام – message body که دلخواه می باشد.
یک HTTP Responseبه شکل زیر خواهد بود:
200 OK Date: Sat, 22 Nov 2014 12:58:58 GMT Server: Apache/2 Last-Modified: Thu, 28 Aug 2014 21:01:33 GMT Content-Length: 33115 Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/ TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns='http://www.w3.org/1999/ xhtml'> <head><title>Hypertext Transfer Protocol -- HTTP/1.1</title></ head><body>…</body></html>
خط اول یا همان خط وضعیت، نشان دهنده یک status code و یک عبارت توضیح دهنده ی آن وضعیت می باشد.
Response Status CODE
۵ کلاس برای Http Response code ها وجود دارد که مبتنی بر رقم اول کد هستند:
status code | توضیحات |
---|---|
1XX | اطلاعاتی. به کلاینت می گوید که سرور ریکوئست را گرفته و در حال پردازش آن است. |
2XX | موفقیت. این چیزیست که کلاینت به دنبال آن است. سرور درخواست را گرفته و آن را با موفقیت پردازش کرده است. پاسخ استاندارد در این کلاس 200 OKمی باشد. |
3XX | تغییر مسیر. به کلاینت می گوید که درخوسات دریافت شده و پردازش شده است، منتهی کلاینت نیاز است تا عما بیشتری برای تکمیل انجام دهد. |
4XX | کلاینت ارور. به کلاینت می گوید که چیزی در requestاشتباه است. وضعیتی که در این کلاس بیشتر از همه شناخته شده است، وضعیت 404 Not Found می باشد |
5XX | سرور ارور. به کلاینت می گوید که مشکلی با درخوسات مورد نظر وجود دارد ولی از سمت سرور است. کد وضعیت معمول در این کلاس 500 Internal Server Errorمی باشد. |
Response Headers
مشابه به request Headers هستند. همگی به صورت جفت متن های name-value و جدا شده با semicolonهستند.
فیلد هدر | توضیحات |
---|---|
Allow | به کلاینت می گوید که چه متدهای ریکوئستی توسط سرور پشتیبانی می شوند. |
Content-Length | طول پاسخ – به صورت بایت های ۸ بیتی |
Content-Type | نوع محتوی بدنه پاسخ |
Date | زمان فعلی را به صورت GMTمی گوید |
Location | این هدر با redirectionاستفاده می شود تا به کلاینت بگوید درخوسات بعدی را به کدام URLبزند. |
Server | نام دامنه سروری که پاسخ را بر می گرداند. |
Set-cookie | کوکی ها را روی کلاینت ثبت می کند |
WWW-Authenticate |
ارسال پاسخ