HTTPã¯ããã€ããŒããã¹ãããã¥ã¡ã³ãïŒã€ãŸããä»ã®ããã¥ã¡ã³ããžã®ç§»è¡ãæŽçã§ãããªã³ã¯ãå«ãŸããŠããå¯èœæ§ã®ããããã¥ã¡ã³ãïŒã®è»¢éãç®çãšããåºç¯ãªããŒã¿è»¢éãããã³ã«ã§ãã
HTTPã®é åèªã¯ã HyperText Transfer Protocol ããHypertext Transfer Protocol ãã®ç¥ã§ãã OSIä»æ§ã«ãããšãHTTPã¯ã¢ããªã±ãŒã·ã§ã³ïŒäžäœã7çªç®ïŒå±€ãããã³ã«ã§ãã ãããã³ã«ã®çŸåšã®ããŒãžã§ã³ã§ããHTTP 1.1ã¯ã RFC 2616ä»æ§ã«èšèŒãããŠããŸã ã
HTTPãããã³ã«ã«ã¯ãã¯ã©ã€ã¢ã³ããµãŒããŒããŒã¿è»¢éæ§é ã®äœ¿çšãå«ãŸããŸãã ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯èŠæ±ãçæãããµãŒããŒã«éä¿¡ããŸãããã®åŸããµãŒããŒãœãããŠã§ã¢ã¯ãã®èŠæ±ãåŠçããå¿çãçæããŠã¯ã©ã€ã¢ã³ãã«è¿ããŸãã ãã®åŸãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯ãåæ§ã®æ¹æ³ã§åŠçãããä»ã®ãªã¯ãšã¹ããéä¿¡ãç¶ããããšãã§ããŸãã
HTTPãããã³ã«ã䜿çšããŠåŸæ¥è§£æ±ºãããŠããã¿ã¹ã¯ã¯ãWebãªãœãŒã¹ïŒéåžžã¯Webãã©ãŠã¶ãŒïŒã«ã¢ã¯ã»ã¹ãããŠãŒã¶ãŒã¢ããªã±ãŒã·ã§ã³ãšWebãµãŒããŒéã®ããŒã¿äº€æã§ãã çŸåšãWorld Wide WebããµããŒããããŠããã®ã¯HTTPãããã³ã«ã®ãããã§ãã
ãŸããHTTPã¯ãSOAPãXML-RPCãWebDAVãªã©ã®ä»ã®ã¢ããªã±ãŒã·ã§ã³å±€ãããã³ã«ã®æ å ±è»¢éãããã³ã«ãšããŠãã䜿çšãããŸãã ãã®å Žåã圌ãã¯HTTPãããã³ã«ãããã©ã³ã¹ããŒãããšããŠäœ¿çšããããšèšããŸãã
å€ãã®ãœãããŠã§ã¢è£œåã®APIã¯ãããŒã¿è»¢éã«HTTPã䜿çšããããšãæå³ããŸããããŒã¿èªäœã¯ãXMLãJSONãªã©ã®ä»»æã®åœ¢åŒã«ããããšãã§ããŸãã
éåžžãHTTPãä»ããããŒã¿è»¢éã¯TCP / IPæ¥ç¶ãä»ããŠè¡ãããŸãã ãµãŒããŒãœãããŠã§ã¢ã¯éåžžãTCPããŒã80ã䜿çšããŸãïŒããŒããæ瀺çã«æå®ãããŠããªãå Žåãã¯ã©ã€ã¢ã³ããœãããŠã§ã¢ã¯éåžžãéããŠããHTTPæ¥ç¶ã«ããã©ã«ãã§80çªç®ã®ããŒãã䜿çšããŸãïŒã
HTTPãªã¯ãšã¹ããéä¿¡ããæ¹æ³ã¯ïŒ
HTTPãããã³ã«ã«å¯ŸåŠããæãç°¡åãªæ¹æ³ã¯ãWebãªãœãŒã¹ã«æåã§ã¢ã¯ã»ã¹ããŠã¿ãããšã§ãã ããªãããã©ãŠã¶ã§ãããã¢ãããªãŒã¢ãªã¶ãŒã®èšäºãæ¬åœã«èªã¿ãããŠãŒã¶ãŒããããšæ³åããŠãã ããã
圌ãã¢ãã¬ã¹ããŒã«æ¬¡ã®ããã«å ¥åãããšããŸãã
http://alizar.habrahabr.ru/
ãããã£ãŠãWebãã©ãŠã¶ãŒãšããŠãalizar.habrahabr.ruã®WebãµãŒããŒã«æ¥ç¶ããå¿ èŠããããŸãã
ããã«ã¯ãä»»æã®é©åãªã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã䜿çšã§ããŸãã ããšãã°ãtelnetïŒ
telnet alizar.habrahabr.ru 80
æ¥ã«æ°ãå€ãã£ãããCtrl +â]âãæŒããŠããå ¥åããŠãã ãããããã«ãããHTTPæ¥ç¶ãéããããšãã§ããŸãã telnetã«å ããŠãncïŒãŸãã¯ncatïŒãè©ŠããŠã¿ãããšãã§ããŸãã
ãµãŒããŒã«æ¥ç¶ããããHTTPãªã¯ãšã¹ããéä¿¡ããå¿ èŠããããŸãã ã¡ãªã¿ã«ãããã¯éåžžã«ç°¡åã§ã-HTTPãªã¯ãšã¹ãã¯2è¡ã®ã¿ã§æ§æã§ããŸãã
HTTPèŠæ±ãçæããã«ã¯ãéå§è¡ãäœæãããšãšãã«ãå°ãªããšã1ã€ã®ããããŒãæå®ããå¿ èŠããããŸã-ããã¯HostããããŒã§ãããåèŠæ±ã«ååšããå¿ èŠããããŸãã å®éã«ã¯ããã¡ã€ã³åã¯ã¯ã©ã€ã¢ã³ãåŽã§IPã¢ãã¬ã¹ã«å€æããããããTCPæ¥ç¶ãéããšããªã¢ãŒããµãŒããŒã«ã¯æ¥ç¶ã«äœ¿çšãããã¢ãã¬ã¹ã«é¢ããæ å ±ããããŸãããããšãã°ã ãã¢ãã¬ã¹ã¯alizar.habrahabr.ruãhabrahabr.ruãŸãã¯m.habrahabr.ruã§ããããããã¹ãŠã®å Žåãçãã¯ç°ãªãå ŽåããããŸãã ãã ããå®éã«ã¯ããã¹ãŠã®å Žåã§ãããã¯ãŒã¯æ¥ç¶ã¯ãã¹ã212.24.43.44ã§éãããæ¥ç¶ã®éå§æã«ããã®IPã¢ãã¬ã¹ã§ã¯ãªãããã¡ã€ã³åãæå®ãããŠããŠãããµãŒããŒã«ã¯ããã«ã€ããŠéç¥ãããŸãã-ãã®ããããã®ã¢ãã¬ã¹ãå¿ èŠã§ããã¹ãããããŒãæž¡ããŸãã
HTTP 1.1ã®éå§ïŒåæïŒèŠæ±è¡ã¯ã次ã®ããã«æ§æãããŠããŸãã
HTTP URI ã¡ãœãã / ããŒãžã§ã³
äŸïŒãã®ãããªéå§è¡ã¯ããµã€ãã®ã¡ã€ã³ããŒãžããªã¯ãšã¹ããããŠããããšã瀺ãå ŽåããããŸãïŒïŒ
GET / HTTP/1.1
ã¡ãœãã ïŒè±èªã®äž»é¡æç®ã§ã¯methodãšããåèªã䜿çšãã åè© -"verb"ãšããåèªã䜿çšãããŸãïŒã¯ãã³ã³ãããŒã«ãšã»ãã¬ãŒã¿ãé€ãä»»æã®æåã®ã·ãŒã±ã³ã¹ã§ãããæå®ããããªãœãŒã¹ã§å®è¡ããå¿ èŠãããæäœã決å®ããŸãã HTTP 1.1ä»æ§ã¯ã䜿çšã§ããããŸããŸãªã¡ãœããã®æ°ãå¶éããŸããããäžè¬çãªæšæºã«æºæ ããå¯èœãªéãå¹ åºããœãããŠã§ã¢ãšã®äºææ§ãç¶æããããã«ãååãšããŠãæãæšæºçãªã¡ãœããã®äžéšã®ã¿ã䜿çšãããŸãããã®æå³ã¯ãããã³ã«ä»æ§ã§æ確ã«é瀺ãããŠããŸãã
URI ïŒ Uniform Resource Identifier ïŒ-æäœãå®è¡ããå¿ èŠã®ããç¹å®ã®ãªãœãŒã¹ïŒããã¥ã¡ã³ããªã©ïŒãžã®ãã¹ïŒããšãã°ãGETã¡ãœããã䜿çšããå ŽåããªãœãŒã¹ã®åä¿¡ãæå³ããŸãïŒã äžéšã®ãªã¯ãšã¹ãã¯ã©ã®ãªãœãŒã¹ã«ãé©çšãããªãå ŽåããããŸãããã®å ŽåãURIã®ä»£ããã«ã¢ã¹ã¿ãªã¹ã¯ïŒã¢ã¹ã¿ãªã¹ã¯ãã*ãæåïŒãéå§è¡ã«è¿œå ã§ããŸãã ããšãã°ãç¹å®ã®ãªãœãŒã¹ã§ã¯ãªããWebãµãŒããŒèªäœã«é¢é£ãããªã¯ãšã¹ãã®å ŽåããããŸãã ãã®å Žåãéå§è¡ã¯æ¬¡ã®ããã«ãªããŸãã
OPTIONS * HTTP/1.1
ããŒãžã§ã³ã¯ãèŠæ±ãæ§æãããHTTPæšæºã®ããŒãžã§ã³ã«åŸã£ãŠæ±ºå®ããŸãã ããã¯ããããã§åºåããã2ã€ã®æ°å€ïŒããšãã°1.1 ïŒãšããŠç€ºãããŸãã
ç¹å®ã®ã¢ãã¬ã¹ã®WebããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ïŒãã®å ŽåããªãœãŒã¹ãžã®ãã¹ã¯ã/ãã§ãïŒã次ã®ãªã¯ãšã¹ããéä¿¡ããå¿ èŠããããŸãã
GET / HTTP/1.1
Host: alizar.habrahabr.ru
è¡ãæãè¿ãã«ã¯åŸ©åž°æ¹è¡æåã䜿çšãããã®åŸã«æ¹è¡æåã䜿çšããå¿ èŠãããããšã«æ³šæããŠãã ããã æåŸã®ããããŒã宣èšãããåŸãæ¹è¡ã®æåã·ãŒã±ã³ã¹ã2åè¿œå ãããŸãã
ãã ããHTTPä»æ§ã§ã¯ãèŠæ±ãåŠçãããšãã«LFæåãè¡åºåãæåãšããŠäœ¿çšãããåã®CRæåïŒååšããå ŽåïŒãç¡èŠãããããã«HTTPãµãŒããŒãããã°ã©ã ããããšããå§ãããŸãã ãããã£ãŠãå®éã«ã¯ãã»ãšãã©ã®ãµãŒããŒã¯ãã®ãããªèŠæ±ãæ£ããåŠçããŸããããããŒã¯LFã·ã³ãã«ã§åºåãããæåŸã®ããããŒã宣èšãããåŸã«2åè¿œå ãããŸãã
ä»æ§ã«å³å¯ã«åŸã£ãŠãªã¯ãšã¹ããéä¿¡ããå Žåã¯ããšã¹ã±ãŒãã·ãŒã±ã³ã¹\ rããã³\ nã䜿çšã§ããŸãã
echo -en "GET / HTTP/1.1\r\nHost: alizar.habrahabr.ru\r\n\r\n" | ncat alizar.habrahabr.ru 80
çããèªãã«ã¯ïŒ
å¿çã®éå§è¡ã®æ§é ã¯æ¬¡ã®ãšããã§ãã
HTTP / ããŒãžã§ã³ ã¹ããŒã¿ã¹ã³ãŒã 説æ
ãããã³ã«ããŒãžã§ã³ã¯ããªã¯ãšã¹ããšåæ§ã«ããã§æå®ãããŸãã
ã¹ããŒã¿ã¹ã³ãŒã -ãªã¯ãšã¹ãã®çµæã決å®ãã3æ¡ã®æ°åïŒæåã®æ°åã¯ã¹ããŒã¿ã¹ã¯ã©ã¹ã瀺ããŸãïŒã ããšãã°ãGETã¡ãœããã䜿çšããããµãŒããŒãæå®ãããèå¥åãæã€ãªãœãŒã¹ãæäŸããå Žåããã®ç¶æ ã¯ã³ãŒã200ã䜿çšããŠèšå®ãããŸãããµãŒããŒããã®ãããªãªãœãŒã¹ãååšããªãããšãå ±åããå Žå-404ã HTTP 1.1ä»æ§ã§ã¯40çš®é¡ã®HTTPã³ãŒããå®çŸ©ãããŠããããããã³ã«ãæ¡åŒµããŠè¿œå ã®ã¹ããŒã¿ã¹ã³ãŒãã䜿çšããããšãã§ããŸãã
ã¹ããŒã¿ã¹ã³ãŒãã®èª¬æ ïŒ Reason Phrase ïŒ-å¿çã³ãŒãã®ããã¹ãïŒ CRããã³LFæåãé€ãïŒã®èª¬æã¯ãåçãèªã¿ãããããããã®ãã®ã§ãã 説æã¯ã¯ã©ã€ã¢ã³ããœãããŠã§ã¢ã«ãã£ãŠèæ ®ãããªãå Žåããããäžéšã®ãµãŒããŒãœãããŠã§ã¢å®è£ ã®æšæºãšãç°ãªãå ŽåããããŸãã
éå§è¡ã®åŸã«ããããŒãç¶ããå¿çã®æ¬æãç¶ããŸãã äŸïŒ
HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Sat, 08 Mar 2014 22:53:46 GMT Content-Type: application/octet-stream Content-Length: 7 Last-Modified: Sat, 08 Mar 2014 22:53:30 GMT Connection: keep-alive Accept-Ranges: bytes Wisdom
å¿çæ¬æã¯ãæåŸã®ããããŒã®åŸã®2ã€ã®æ¹è¡ã«ç¶ããŸãã å¿çæ¬æã®çµããã決å®ããããã«ã Content-LengthããããŒã®å€ã䜿çšãããŸãïŒãã®å Žåãå¿çã«ã¯7æ¡ã®8ãã€ããå«ãŸããŸãïŒåèªãWisdomããšæ¹è¡æåïŒã
ãããã以åã«è¡ã£ãèŠæ±ã«ãããšãWebãµãŒããŒã¯ã³ãŒã200ã§ã¯ãªãã³ãŒã302ã§åçãè¿ããŸãããããã£ãŠãçŸæç¹ã§ã¯å¥ã®ã¢ãã¬ã¹ã§ãã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããå¿ èŠãããããšãã¯ã©ã€ã¢ã³ãã«éç¥ããŸãã
èªåã§èŠãŠãã ããïŒ
HTTP/1.1 302 Moved Temporarily Server: nginx Date: Sat, 08 Mar 2014 22:29:53 GMT Content-Type: text/html Content-Length: 154 Connection: keep-alive Keep-Alive: timeout=25 Location: http://habrahabr.ru/users/alizar/ <html> <head><title>302 Found</title></head> <body bgcolor="white"> <center><h1>302 Found</h1></center> <hr><center>nginx</center> </body> </html>
LocationããããŒã¯æ°ããäœæã§ãã ããã§ãURIïŒãªãœãŒã¹èå¥åïŒã/ users / alizar /ã«å€æŽãããä»åã¯habrahabr.ruã®ãµãŒããŒïŒãã ãããã®å Žåã¯åããµãŒããŒïŒã«ã¢ã¯ã»ã¹ããHostããããŒã§æå®ããå¿ èŠããããŸãã
ããã¯ïŒ
GET /users/alizar/ HTTP/1.1
Host: habrahabr.ru
ãã®ãªã¯ãšã¹ããžã®å¿çãšããŠãHabrahabr WebãµãŒããŒã¯æ¢ã«ã³ãŒã200ãšããªã倧ããªHTMLããã¥ã¡ã³ãã§å¿çãçºè¡ããŸãã
ãã§ã«ããŒã«ã«æ £ããŠããå Žåã¯ããµãŒããŒããåãåã£ãHTMLã³ãŒããèªã¿åããéçãšããŒããåããAlizarã®ãããã¡ã€ã«ãæç»ã§ããŸã-ååãšããŠãããã¯ãã©ãŠã¶ãè¡ãå Žæã§ãã
ã»ãã¥ãªãã£ã¯ã©ãã§ããïŒ
HTTPãããã³ã«èªäœã¯ãæå·åã䜿çšããŠæ å ±ãéä¿¡ããããšãæå³ãããã®ã§ã¯ãããŸããã ããã§ããHTTPã«ã¯ãæå·åãããã³ã«SSLãŸãã¯TLSã§éä¿¡ããŒã¿ã®ããã±ãŒãžåãå®è£ ããåºç¯ãªæ¡åŒµæ©èœããããŸã ã
ãã®æ¡åŒµæ©èœã®ååã¯HTTPS ïŒ HyperText Transfer Protocol Secure ïŒã§ãã HTTPSæ¥ç¶ã§ã¯ãéåžžTCPããŒã443ã䜿çšãããŸããHTTPSã¯ãæ å ±ãååããä¿è·ããããã«åºã䜿çšãããŠããããŸããååãšããŠãã¯ã©ã€ã¢ã³ãã§èšŒææžãæ€èšŒãããå Žåã«äžéè æ»æããä¿è·ããŸãããã ãã蚌ææžã®ç§å¯ããŒã¯äŸµå®³ãããããŠãŒã¶ãŒã¯çœ²åã®ãªã蚌ææžã®äœ¿çšã確èªãããæ»æè ã®èªèšŒå±ã®èšŒææžã¯ãŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã«å®è£ ãããŸããã§ããã
HTTPSã¯çŸåšããã¹ãŠã®äžè¬çãªWebãã©ãŠã¶ãŒã§ãµããŒããããŠããŸãã
è¿œå æ©èœã¯ãããŸããïŒ
HTTPãããã³ã«ã¯ãããªãå€æ°ã®æ¡åŒµãªãã·ã§ã³ãæäŸããŸãã ç¹ã«ãHTTP 1.1ä»æ§ã§ã¯ãUpgradeããããŒã䜿çšããŠå¥ã®ãããã³ã«ã䜿çšããããŒã¿äº€æã«åãæ¿ããå¯èœæ§ãææ¡ãããŠããŸãã ãã®ããããŒãæã€èŠæ±ã¯ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠéä¿¡ãããŸãã ãµãŒããŒãå¥ã®ãããã³ã«ã䜿çšããŠããŒã¿äº€æã«åãæ¿ããå¿ èŠãããå ŽåããµãŒããŒã¯ã¹ããŒã¿ã¹ã426 Upgrade Requiredãã®å¿çãã¯ã©ã€ã¢ã³ãã«è¿ãããšãã§ããŸãããã®å Žåãã¯ã©ã€ã¢ã³ãã¯ãã§ã«UpgradeããããŒãæã€æ°ããèŠæ±ãéä¿¡ã§ããŸãã
ãã®æ©èœã¯ãç¹ã«WebSocketãããã³ã«ïŒ RFC 6455ä»æ§ã§èª¬æãããŠãããããã³ã«ã§ãè¿œå ã®HTTPèŠæ±ãéä¿¡ããã«é©åãªã¿ã€ãã³ã°ã§ããŒã¿ã転éã§ãããããã³ã«ïŒã䜿çšããŠããŒã¿äº€æãæŽçããããã«äœ¿çšãããŸããå€ããwebsocketãã®UpgradeããããŒãæã€HTTPãªã¯ãšã¹ãããµãŒããŒã¯ã¹ããŒã¿ã¹ã101 Switching Protocolsãã§å¿çãè¿ããã©ã¡ãã®åŽãWebSocketãããã³ã«ã䜿çšããŠããŒã¿ã®éä¿¡ãéå§ã§ããŸãã
ãšããã§ãäœãä»ã®ãã®ã䜿çšããŠããŸããïŒ
çŸæç¹ã§ã¯ãWebã³ã³ãã³ããéä¿¡ããããã«èšèšãããä»ã®ãããã³ã«ããããŸãã ç¹ã«ã SPDYãããã³ã« ïŒè±èªã®åèªspeedyãšçºé³ãããŸã ïŒã¯HTTPãããã³ã«ã®å€æŽã§ããããã®ç®çã¯WebããŒãžã®èªã¿èŸŒã¿ã®é 延ãæžãããè¿œå ã®ã»ãã¥ãªãã£ãæäŸããããšã§ãã
ãã¹ãŠã®ããŒã¿ãåäžã®æ¥ç¶å ã§è»¢éã§ããããã«ãWebããŒãžã«å¿ èŠãªè¿œå ãªãœãŒã¹ãå§çž®ãåªå é äœä»ããããã³å€éåããããšã«ãããé床ãåäžããŸãã
2012幎11æã«å ¬éãããHTTP 2.0ãããã³ã«ã®ãã©ããä»æ§ïŒ1999幎ã«å ¬éãããæçµä»æ§ã§ããããŒãžã§ã³1.1以éã®HTTPãããã³ã«ã®æ¬¡ã®ããŒãžã§ã³ïŒã¯ãSPDYãããã³ã«ä»æ§ã«åºã¥ããŠããŸãã
HTTP 2.0ä»æ§ã®ãã©ããã®æºåäžã«httpbisã¯ãŒãã³ã°ã°ã«ãŒããæ€èšããä»ã®ææ¡ãããå®è£ ãšåæ§ã«ãSPDYãããã³ã«ã§äœ¿çšãããã¢ãŒããã¯ãã£ãœãªã¥ãŒã·ã§ã³ã®å€ãã¯ã以åã¯HTTP-NGãããã³ã«ã®éçºäžã«ååŸãããŸããããHTTP-NGãããã³ã«ã®äœæ¥ã¯äžæ¢ãããŸãã1998幎ã
çŸæç¹ã§ã¯ãSPDYãããã³ã«ã®ãµããŒãã¯ãFirefoxãChromium / ChromeãOperaãInternet Exporerãããã³Amazon Silkã®ãã©ãŠã¶ãŒã§ãµããŒããããŠããŸãã
ããã§äœïŒ
äžè¬ã«ãã¯ãã ç¹å®ã®ã¡ãœãããšããããŒãèšè¿°ããããšã¯å¯èœã§ãããå®éã«ã¯ãç¹å®ã®äœãïŒããšãã°ãHTTPãä»ããŠãµãŒããŒãšéä¿¡ããWebãµãŒããŒãŸãã¯ã¯ã©ã€ã¢ã³ããœãããŠã§ã¢ïŒãäœæããå Žåã¯ããã®ç¥èãå¿ èŠã§ãããããã³ã«ã®ä»çµã¿ã«é¢ããåºæ¬çãªç解ã¯å¿ èŠãããŸããã ããã«ããããã¯ãã¹ãŠGoogleãä»ããŠéåžžã«ç°¡åã«èŠã€ããããšãã§ããŸãããã®æ å ±ã¯ä»æ§æžããŠã£ãããã£ã¢ãªã©ã«ãããŸãã
ãã ããè±èªãç¥ã£ãŠããŠãHTTPã ãã§ãªããéä¿¡ã«äœ¿çšãããTCP / IPãã±ããã«ã€ããŠã調æ»ãããå Žåã¯ã ãã®èšäºãèªãããšããå§ãããŸãã
ãã¡ãããå®éã«äœ¿çšãéå§ãããšãã©ã®ãã¯ãããžãŒãã¯ããã«ã·ã³ãã«ã§ç解ãããããªãããšãå¿ããªãã§ãã ããã
幞éãšå®ãããåŠç¿ïŒ