Hypertext Transfer Protocol

## HTTP протокол 
### Интернэт протоколууд: 
Интернэт протокол гэдэг нь файлууд буюу өгөгдлийг нэг машинаас нөгөө машинд дамжуулахад хэрэглэгддэг командын цуглуулга юм. Интернэтэд холбогдсон бүх компьютерүүд нь өөр хоорондоо TCP/IP (Transmission Control Protocol / Internet Protocol) протокол ашиглан холбогддог. 

Жишээ нь сервер-ээс клиент-д өгөгдөл TCP/IP –ийг хэрэглэн дамжуулагдана. • 

Протоколууд: 

– HTTP (HyperText Transfer Protocol): вэб хуудсууд болон вэбд агуулагдах зураг гэх мэт файлуудыг дамжуулахад хэрэглэгддэг. 

– FTP (File Transfer Protocol): нэг машинаас нөгөө машинд файл дамжуулахад хэрэглэгддэг. 

– SMTP (Simple Mail Transport Protocol): и-майл-д хэрэглэгддэг. 

– Telnet Protocol: Телнэт хэсгийг нээхэд хэрэглэгддэг.

### HTTP протоколын тухай товч түүх: 
Өнөөгийн хамгийн хэрэгцээт зүйл болох "World Wide Web" 1989 онд төслийг  Berners Lee анх санал болгосон. Протоколын анхны хувилбар нь зөвхөн нэг аргыг, тухайлбал GET, серверээс хариу үргэлж HTML хуудсыг шаарддаг байв. 

HTTP эхний баримтжуулсан хувилбар HTTP V0.9 (1991) байсан юм. Дэйв Raggett 1995 онд HTTP Ажлын хэсэг (HTTP АХ) удирдсан болон өргөтгөсөн үйл ажиллагаа, өргөтгөсөн хэлэлцээ, баян мета-мэдээлэл, нэмэлт арга барил, толгойн талбаруудыг нэмж илүү үр дүнтэй болсон нь аюулгүй байдлын протокол нягт уялдаатай нь протоколыг өргөжүүлэх хүссэн юм.   онд албан ёсоор танилцуулж, 1996 онд HTTP V1.0 хүлээн зөвшөөрсөн
.

2007 онд HTTPbis ажлын хэсэг, хэсэгчлэн, шинэчлэх болон HTTP / 1.1 тодорхойлолт тодруулах байгуулагдсан. 2014 оны зургадугаар сард, АХ  obsoleting шинэчилсэн зургаан хэсэг тодорхойлолт гаргасан. 
* , *HTTP/1.1: Мессежтэй холбоотой систем болон чиглэл*
* , *HTTP/1.1: Семантиз болон агуулга*
* , *HTTP/1.1: Нөхцөлт хүсэлт*
* , *HTTP/1.1: Үечилсэн хүсэлт*
* , *HTTP/1.1: Кеш*
* , *HTTP/1.1: Нотолгоо*

### HTTP горим: 
HTTP горим нь хурал сүлжээний хүсэлт, хариу гүйлгээний дараалал юм. HTTP клиент сервер дээр нь тодорхой порт уруу Transmission Control Protocol (TCP) холболт тогтоох замаар хүсэлт эхлүүлнэ (ихэвчлэн порт нь 80, хааяа порт нь 8080, TCP болон UDP портын дугаарын жагсаалтыг үзнэ үү). HTTP сервер нь үйлчлүүлэгчийн хүсэлтийг хүлээн авч,  хүсэлтийг серверт  "HTTP / 1.1 200 OK" гэсэн статус шугам, мөн өөрийн гэсэн зурвас буцааж илгээж байдаг. Энэ зурваст бие ч алдааны мэдээлэл болон бусад мэдээллийг мөн буцаж болно, хүссэн эх үүсвэр нь ихэвчлэн юм

**Hypertext Transfer Protocol (HTTP - Гипертекст Дамжуулалтын Протокол)** нь дэлхий нийтийн  вэбэд (WWW) файлуудыг (текст, график,  дүрс, хөгжим, видео ба бусад мултимедиа файлуудыг ) дамжуулахад зориулсан  дүрмүүдийн  бүрдэл юм. Веб хэрэглэгч нь Веб хөтчөө нээмэгц HTTP-г шууд бусаар хэрэглэж байгаа хэрэг юм. 

Бид өдөр бүр интернэт хэрэглэхдээ олж харах хамгийн энгийн жишээ нь **‘http’ (HTTP)** протокол бөгөөд үүнийг гипер бичвэр дамжуулах протокол (Hypertext Transfer Protocol) гэж нэрлэнэ. Энэ протокол нь вэб хуудсыг харахаар хөтөч програмыг ажиллуулж буй клиентүүд (үйлчлүүлэгч компьютерууд) болон вэб серверийн хоорондох харилцан ажиллагааг удирдана. Энэ протокол нь сервертэй тушаалын дагуу харьцах бөгөөд жишээ нь, хөтөч хэрэглэгч аль хуудсыг шаардаж байгааг серверт мэдүүлэх боломжийг хөтчид олгодог.
 
HTTP протокол нь интернет орчинд сүүлийн 11 жил  хамгийн их ашиглагдаж байгаа протокол юм. Яагаад гэж үү?  Яагаад гэвэл энгийн, ашиглахад хурдан тэгээд бас найдвартай бөгөөд хамгийн гол нь их уян хатан протокол юм. Түүний гол үүрэг нь вэб серверээс ирэх мэдээллийн хүсэлт, энэ нь веб сайтууд гэсэн үг. 

HTTP олон нийт болон үйлчлүүлэгч хоорондын харилцаа холбоог хангаж өгдөг, бас бүхэл бүтэн зэрэгцээ сүлжээний тохиргоог дэмждэг. Гол төлөв харилцаа холбоонд TCP/IP ашиглагддаг, гэхдээ энэ нь цорын ганц сонголт биш юм. Анхдагч байдлаар TCP/IP нь 80-р портыг ашигладаг боловч өөрийг ч бас ашиглах боломжтой. 
 

### HTTP нотолгоо: 
HTTP нь  үндсэн хандалтын баталгаа болгон нэвтрэлт танилт хэд хэдэн тогтолцоог хангаж, сорилт, хариу арга механизмыг ашиглан үйл ажиллагаа явуулж хандалтын танилт эзэмших үүгээр хүссэн агуулга үйлчлэх өмнө сервер тодорхойлж, бэрхшээл асуудлуудыг шийдвэрлэж байдаг. HTTP асуудал-хариу нэвтрэлт танилт схем нь өргөтгөх багц, үйлчлүүлэгч хүсэлт татгалзан гаргах тухай сервер ашиглаж болно дамжуулан нэвтрэлт танилтын мэдээллээр хангах нь үйлчлүүлэгч, хандалтын хяналт болон нэвтрэлт танилт нь ерөнхий хүрээг өгдөг.

### HTTP үйлчлүүлэгч-сервер: 
:*HTTP нь "үйлчлүүлэгч-сервер"* гэсэн гол зарчимаар үүсгэгддэг ба үйлчлүүлэгч (хөтөч) нь сервер (apache, nginx, ligthttp) рүү хүсэлт илгээдэг ба хэрвээ амжилттай холбогдож чадвал хүсэлтэнд  хариу болгон сервер үйлчлүүлэгч рүү мэдээлэл илгээнэ. Мэдээлэл гэдгийн дор бид бараг юуг ч ойлгож болно. Энэ нь дээр дурдсан "уян хатан" шинж чанартай холбоотой. Протокол урсгал аудио, видео дамжуулах чадвартай, эсвэл бусад протоколуудад зориулсан дамжуулагчийн үүргийг ч гүйцэтгэж болно. Тэгэхээр клиент сервер 2-ийн хооронд ямар харилцаа холбоо явагддаг талаар авч үзье.
Үйлчлүүлэгчээс илгээгдэх хүсэлт нь дараах 3 хэсгээс бүрддэг.
Үүнд: 
*1.	Эхлэлийн мөр – энд зурвасын төрөл заагдана. 
*2.	Гарчиг – зурвасын үндсэн хэсэг болон түүний параметрүүдийг дүрсэлнэ. 
*3.	Зурвасын үндсэн хэсэг – зурвас нь өөрөө бөгөөд хоосон мөрөөр тусгаарлагдсан байх естой.

Үүнд: хүсэлт ба хариу арга хэмжээ. Үйлчлүүлэгч  HTTP хүсэлт үүсгэдэг хариуд нь сервер хариу (зурвас) өгдөг. 
Зарим нэг шинэ зүйлүүдийг танилцуулсан одоогийн хувилбар нь HTTP нь 1.1 юм. Миний бодлоор, эдгээрээс хамгийн чухал нь: байнга нээлттэй холболт, шинэ өгөгдөл дамжуулах механизм chunked transfer encoding, түр тогтоогчид зориулсан шинэ толгойууд юм.  Эдгээрээс зарим нэгийг нь энэ нийтлэлийн хоёр дахь хэсэгт авч үзэх болно. 

### Арга замууд: 
Гипер холбоос (URL)-ийн тусламжтайгаар бид холбогдохыг хүсэж буй эзэмшигчийн нэрийг нарийн тодорхойлж болох боловч ингэхийн тулд ямар үйлдэл хийхийг HTTP –аргын тусламжтайгаар мэдээлж болно. Мэдээжийн хэрэг бид гүйцэтгэж чадах хэд хэдэн төрлийн үйлдлийг гүйцэтгэнэ. HTTP-д хамгийн их хэрэгтэй, ихэнх програмуудад тохиромжтойг нь хэрэгжүүлнэ.  
Одоо байгаа аргууд нь:
***GET** -  одоогийн нөөц рүү нэвтрэх эрх авах. Гипер холбоос (URL)-д сервер олж чадахуйц шаардлагатай бүх мэдээлэлийн жагсаалт байх ба хүссэн хариуг нь өгч чадахуйц байх ёстой. 
***POST** –Шинэ нөөцийг бий болгоход ашиглагддаг.  POST хүсэлт нь ихэнхдээ шинэ нөөцийн бий болгоход хэрэгцээтэй байгаа бүх мэдээлэлийг агуулсан байдаг.  
***PUT**- Одоогийн нөөцийг шинэчлэх. PUT хүсэлт нь шинэчлэгдсэн мэдээллийг агуулдаг. 
***DELETE** – тухайн нөөцийг устгахад ашиглагддаг. 
Эдгээр аргууд нь хамгийн өргөн хэрэлэгддэг, ихэнх тохиолдолд янз бүрийн арга хэрэгсэлээр тодорхой хүрээнд  ашиглагддаг. Зарим нэг тохиолдолд PUT и DELETE хүсэлтүүд нь үйлдэл нь заагдсан POST илгээлтээр дамжуулан хийгддэг тухайлбал үүснэх, шинэчлэх эсвэл устгах гэх мэт. 
Мөн түүнчлэн HTTP дэмжигдэр бусад аргууд:
***HEAD** - нь GET –тэй адилхан. тухайн төрлийн хүсэлтэнд зурвал дамжуулагдгүйгээрээ ялгаатай.  Сервер зөвхөн толгой хэсгийг л хүлээж авна. Зөвхөн нөөц өөрчлөгдсөн эсэхийг тодорхойлохын тулд ашиглагддаг. 
***TRACE** – Олон тооны оролтын цэгүүд ба серверийн төлөөлөлүүдээр хүсэлт дамжих үед тус бүрдээ өөрийн мэдээлэлүүдийг өөртөө агуулж байдаг  IP, DNS. Энэ аргаар бүх түр зуурын мэдээлэлүүдийг харж болно. 
***OPTIONS** – энэ нь серверийн боломж, түүний параметрүүд болон тухайн нөөцөд тохирсон тохиргоо зэргийг тодорхойлоход ашиглагдана
### Гипер холбоос (URL)-ын тухай товч:
Веб харилцааны үндсэн гол хэсэг нь гипер холбоосоор дамжин хүргэгддэг холбоос юм. URL хаяг гэж юу болох талаар та нар аль хэдийн ойлголттой босон байгаа гэдэгт би итгэлтэй байна гэсэн ч бүрэн зураглалын талаар товч ганц хоёр үг хэлмээр байна.  

Гипер холбоос(URL) нь их энгийн бүтэцтэй бөгөөд дараах хэсгүүдээс бүрэлдэнэ. 
 

Энгийн холболтонд зориулагдсан протокол http байдаг ба харин илүү аюулгүй хамгаалалт сайтай өгөгдөлүүдийг солилцоход https  нь ашиглагддаг. Анхдагч порт нь 80. Цаашлаад сервер дээрх нөөц рүү хүрэх зам нь гарах ба параметрүүдийн гинжин холбоо үүснэ 

### Гипер холбоос оруулах: 
HTML хэлэнд гипер холбоосыг  гэсэн битүү тааг ашиглаж оруулдаг. Гипер холбоосоор холбогдож буй веб хуудас нь нэг бол гипер холбоосыг оруулж буй веб хуудастай хамт нэг компьютер дээр байж болно.Эсвэл интенетэд тодорхой URL-хаягаар байрласан байж болно.

Жишээ нь:        Энд дар эсвэл:        Энд дар эсвэл:        Энд дар г.м. Энд буй href нь  таагийн атрибут бөгөөд гипер холбоосын хаягийгтодорхойлдог нь харагдаж байна.

### Мэдээлэл хүлээн авагч: 
Мэдээлэл хүлээн авагч нь дараах хэсгээс бүрдэнэ:
* хүсэлт шугам (жишээ нь, GET /images/logo.png HTTP / 1.1, серверээс /images/logo.png хэмээх нөөцийг хүсэлт).
* Авагч толгой талбарууд нь (жишээ нь, хүлээн авах, хэл: EN).
* Хоосон мөр байна.
* Нэмэлт зурвас байгууллага.
Мэдээлэл хүлээн авагч болон бусад толгойн орд байх ёстой эцсийн бүрийн   (энэ нь мөр дууссан тэмдэгт дараа нь тэрэг буцах тэмдэгт байна). хоосон мөр зөвхөн   бүрдэх ёстой бөгөөд өөр ямар ч хоосон зай. HTTP / 1.1 протоколд онд хост бусад бүх толгой талбарууд заавал байдаг.

Зөвхөн зам нэрийг агуулсан хүсэлт шугам RFC нь HTTP / 1.0 тодорхойлолтод өмнө HTTP үйлчлүүлэгч нь нийцтэй хадгалах сервер хүлээн зөвшөөрсөн байна. 

### Хариу мэдээлэл: 
Хариу мэдээлэл нь дараах хэсгээс бүрдэнэ:
* Байдлыг илэрхийлэгч шугам (харилцагчийн хүсэлтийг амжилттай гэдгийг харуулж байна жишээ нь HTTP / 1.1 200 OK) статус код болон шалтгаан нь зурвас орно.
* Хариу толгой талбарууд нь (жишээ нь, Content-Type: текст / HTML).
* Хоосон мөр байна.
* Нэмэлт зурвас байгууллага.
Байдлыг илэрхийлэгч шугам болон бусад толгой талбар байх ёстой бүхий л эцсийн  . хоосон мөр зөвхөн   болон өөр ямар ч зайгаар нь Энэ чанд шаардлага бүрдсэн байх ёстой.    зэрэг зарим мэдээ байгууллагуудын дотор бусад системийн шугам завсарлагааны тууштай ашиглах суларч байна 

### Серверийн хариу мэдээлэл: 
HTTP/1.1 200 OK

Date: Mon, 23 JAN 2016 22:38:34 GMT

Content-Type: text/html; charset=UTF-8

Content-Encoding: UTF+8

Content-Length: 138 Last-Modified: Wed, 28 Jan 2016 23:11:55 GMT

Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)

ETag: "3f80f-1b6-3e1cb03b"

Accept-Ranges: bytes

Connection: close

 Жишээ хуудас

  Сайн байна уу? Энэ бол энгийн загвар юм.

 

### Илүү дэлгэрэнгүй мэдээллийг: 
* Basic access authentication
* Constrained Application Protocol – A semantically similar protocol to HTTP but used UDP or UDP-like messages targeted for devices with limited processing capability. Re-uses HTTP and other internet concepts like Internet media type and web linking ()[32]
* Content negotiation холбоосоор хандан авч болно.

### Тэмдэглэл/note: 
  Tim Berners-Lee. "The Original HTTP as defined in 1991". World Wide Web Consortium. Retrieved 24 July 2010.

  Raggett, Dave. "HTTP WG Plans". World Wide Web Consortium. Retrieved 29 September 2010.

  Berners-Lee, Tim; Fielding, Roy T.; Nielsen, Henrik Frystyk. "Method Definitions". Hypertext Transfer Protocol -- HTTP/1.0. IETF. pp. 30-32. sec. 8. .

### Гадаад линкүүд: 
* A detailed technical history of HTTP.
* Design Issues by Berners-Lee when he was designing the protocol.
* list of other classic documents recounting the early protocol history

### Ном зүйн жагсаалт: 

Ангилал:Интернэт хэрэглээний протокол