å 容
- ã¯ããã«
- å€ãã¿ã€ããããã³æŒç®å
- ããã°ã©ã æ§æ
- æ©èœ
- ããŒã¿æ§é ïŒãªããžã§ã¯ããšé å
- é«éé¢æ°
- ãªããžã§ã¯ãã®ç§å¯ã®ç掻
- ãããžã§ã¯ãïŒé»åç掻
- æ€çŽ¢ãšãšã©ãŒåŠç
- æ£èŠè¡šçŸ
- ã¢ãžã¥ãŒã«
- ãããžã§ã¯ãïŒããã°ã©ãã³ã°èšèª
- JavaScriptãšãã©ãŠã¶ãŒ
- ããã¥ã¡ã³ããªããžã§ã¯ãã¢ãã«
- ã€ãã³ãåŠç
- ãããžã§ã¯ãïŒãã©ãããã©ãŒã ã²ãŒã
- ãã£ã³ãã¹ã«æã
- HTTP
- ãã©ãŒã ãšãã©ãŒã ãã£ãŒã«ã
- ãããžã§ã¯ãïŒãã€ã³ã
- Node.js
- ãããžã§ã¯ãïŒçµéšå ±æãŠã§ããµã€ã
- ã³ãŒãã®ãµã³ãããã¯ã¹
ãããã¯ãŒã¯ãäœæããã倢ã¯ãç§ãã¡ãæ å ±ãå ±æããéä¿¡ããå ±éã®æ å ±ç©ºéã§ãã ãã®æ®éæ§ã¯äžå¯æ¬ ãªéšåã§ãããã€ããŒããã¹ããªã³ã¯ã¯ãå人æ å ±ãããŒã«ã«æ å ±ãã°ããŒãã«æ å ±ãäžæžããæ€èšŒæžã¿ããã¹ããªã©ãã©ãã«ã§ãå°ãããšãã§ããŸãã
Tim Bernes-LeeãWorld Wide WebïŒéåžžã«çãå人å²
ãããã³ã«
ãã©ãŠã¶ãŒã®ã¢ãã¬ã¹ããŒã«eloquentjavascript.net/17_http.htmlãšå ¥åãããšããã©ãŠã¶ãŒã¯æåã«eloquentjavascript.netãšããååã«é¢é£ä»ããããŠãããµãŒããŒã¢ãã¬ã¹ãèªèããHTTPã®ããã©ã«ãããŒãã§ããããŒã80ã§TCPæ¥ç¶ãéãããšããŸãã ãµãŒããŒãååšããæ¥ç¶ãåãå ¥ããå Žåããã©ãŠã¶ã¯æ¬¡ã®ãããªãã®ãéä¿¡ããŸãã
GET /17_http.html HTTP / 1.1
ãã¹ãïŒeloquentjavascript.net
ãŠãŒã¶ãŒãšãŒãžã§ã³ãïŒãã©ãŠã¶ãŒå
ãµãŒããŒã¯åãæ¥ç¶ãä»ããŠå¿çããŸãã
HTTP / 1.1 200 OK
ã³ã³ãã³ãã®é·ãïŒ65585
ã³ã³ãã³ãã¿ã€ãïŒããã¹ã/ html
æçµå€æŽæ¥ïŒ2014幎4æ9æ¥æ°Žææ¥10:48:09 GMT
<ïŒdoctype html>
...ããã¥ã¡ã³ãã®æ®ãã®éšå
ãã©ãŠã¶ã¯ã空ã®è¡ã®åŸã®åçã®åŸã«æ¥ãéšåãååŸããHTMLããã¥ã¡ã³ããšããŠè¡šç€ºããŸãã
ã¯ã©ã€ã¢ã³ãããéä¿¡ãããæ å ±ã¯ãªã¯ãšã¹ããšåŒã°ããŸãã 次ã®è¡ã§å§ãŸããŸãã
GET /17_http.html HTTP / 1.1
æåã®èšèã¯ãªã¯ãšã¹ãã¡ãœããã§ãã GETã¯ãç¹å®ã®ãªãœãŒã¹ãååŸããå¿ èŠãããããšãæå³ããŸãã ä»ã®äžè¬çãªæ¹æ³ã¯ãåé€ã®DELETEã眮æã®PUTãããã³æ å ±ã®éä¿¡ã®POSTã§ãã ãµãŒããŒã¯ãåä¿¡ããåèŠæ±ãå®è¡ããå¿ èŠããªãããšã«æ³šæããŠãã ããã ã©ã³ãã ãªãµã€ããéžæããã¡ã€ã³ããŒãžãåé€ããããã«æ瀺ãããšã圌ã¯ããããæåŠããŸãã
ã¡ãœããåã®åŸã®éšåã¯ããªã¯ãšã¹ããéä¿¡ããããªãœãŒã¹ãžã®ãã¹ã§ãã æãåçŽãªå ŽåããªãœãŒã¹ã¯ãµãŒããŒäžã®åãªããã¡ã€ã«ã§ããããããã³ã«ã¯ãã®æ©èœã«éå®ãããŸããã ãªãœãŒã¹ã¯ããã¡ã€ã«ãšããŠè»¢éã§ãããã®ã§ããã°äœã§ãããŸããŸããã å€ãã®ãµãŒããŒããã®å Žã§å¿çãäœæããŸãã ããšãã°ãtwitter.com / marijnjhãéããšããµãŒããŒã¯marijnjhãŠãŒã¶ãŒããŒã¿ããŒã¹ã調ã¹ãéãå Žåã¯ããã®ãŠãŒã¶ãŒã®ãããã¡ã€ã«ããŒãžãäœæããŸãã
ãªãœãŒã¹ãžã®ãã¹ã®åŸãã¯ãšãªã®æåã®è¡ã«ã¯HTTP / 1.1ãèšèŒãããŠããã䜿çšããHTTPãããã³ã«ã®ããŒãžã§ã³ãå ±åãããŸãã
ãµãŒããŒã®å¿çããããã³ã«ããŒãžã§ã³ã§å§ãŸããå¿çã¹ããŒã¿ã¹ãç¶ããŸã-æåã«3æ¡ã®ã³ãŒãã次ã«è¡ã
HTTP / 1.1 200 OK
2ã§å§ãŸãã¹ããŒã¿ã¹ã³ãŒãã¯ããªã¯ãšã¹ããæåããããšã瀺ããŸãã 4ã§å§ãŸãã³ãŒãã¯ãäœããããããããšãæå³ããŸãã 404ã¯æãæåãªHTTPã¹ããŒã¿ã¹ã§ãããèŠæ±ããããªãœãŒã¹ãèŠã€ãããªãã£ãããšã瀺ããŸãã 5ã§å§ãŸãã³ãŒãã¯ããµãŒããŒã§ãšã©ãŒãçºçããããšã瀺ããŠããŸããããªã¯ãšã¹ãã®é害ã«ãããã®ã§ã¯ãããŸããã
èŠæ±ãŸãã¯å¿çã®æåã®è¡ã®åŸã«ã¯ãä»»æã®æ°ã®ããããŒè¡ãç¶ããããšãã§ããŸãã ãããã¯ãèŠæ±ãŸãã¯å¿çã«é¢ããè¿œå æ å ±ã瀺ããååïŒå€ãã®åœ¢åŒã®æååã§ãã ãããã®ããããŒã¯äŸã«å«ãŸããŠããŸãã
ã³ã³ãã³ãã®é·ãïŒ65585
ã³ã³ãã³ãã¿ã€ãïŒããã¹ã/ html
æçµå€æŽæ¥ïŒ2014幎4æ9æ¥æ°Žææ¥10:48:09 GMT
ããã«ãããå¿çã§åä¿¡ããããã¥ã¡ã³ãã®ãµã€ãºãšã¿ã€ãã決ãŸããŸãã ãã®å Žåãããã¯ãµã€ãºã65,585ãã€ãã®HTMLããã¥ã¡ã³ãã§ãã ãŸããããã¥ã¡ã³ããæåŸã«å€æŽãããæ¥æã瀺ããŸãã
ã»ãšãã©ã®å ŽåãèŠæ±ãŸãã¯å¿çã«å«ããããããŒãã¯ã©ã€ã¢ã³ããŸãã¯ãµãŒããŒã決å®ããŸãããäžéšã®ããããŒã¯å¿ é ã§ãã ããšãã°ã1ã€ã®ãµãŒããŒãåãIPã¢ãã¬ã¹ã§å€ãã®ãã¹ãåãæäŸã§ããããããã¹ãåã瀺ããã¹ãããªã¯ãšã¹ãã«å«ããå¿ èŠããããŸãããã®ããããŒããªããšããµãŒããŒã¯ã¯ã©ã€ã¢ã³ããéä¿¡ããããšããŠãããã¹ããèªèããŸããã
ããããŒã®åŸã«ãèŠæ±ãšå¿çã®äž¡æ¹ã空ã®è¡ã瀺ãããã®åŸã«éä¿¡ããŒã¿ãå«ãæ¬æãç¶ãå ŽåããããŸãã GETããã³DELETEèŠæ±ã¯è¿œå ããŒã¿ã転éããŸããããPUTããã³POSTã¯éä¿¡ããŸãã ãšã©ãŒã¡ãã»ãŒãžãªã©ã®äžéšã®å¿çã«ã¯ãæ¬æã¯å¿ èŠãããŸããã
ãã©ãŠã¶ãŒãšHTTP
äŸã§èŠãããã«ãã¢ãã¬ã¹ããŒã«URLãå ¥åãããšããã©ãŠã¶ãŒã¯ãªã¯ãšã¹ããéä¿¡ããŸãã åä¿¡ããHTMLããã¥ã¡ã³ãã«ç»åãJavaScriptãã¡ã€ã«ãªã©ã®ä»ã®ãã¡ã€ã«ãžã®åç §ãå«ãŸããŠããå ŽåããããããµãŒããŒããèŠæ±ãããŸãã
å¹³åçãªæã®Webãµã€ãã«ã¯ã10ã200åã®ãªãœãŒã¹ãç°¡åã«å«ããããšãã§ããŸãã ããéããªã¯ãšã¹ãã§ããããã«ããããã«ããã©ãŠã¶ã¯åæã«è€æ°ã®ãªã¯ãšã¹ããè¡ãããªã¯ãšã¹ãã次ã ã«çµäºããã®ãåŸ ã¡ãŸããã ãã®ãããªããã¥ã¡ã³ãã¯ãåžžã«GETãªã¯ãšã¹ããéããŠãªã¯ãšã¹ããããŸãã
HTMLããŒãžã«ã¯ããŠãŒã¶ãŒãæ å ±ãå ¥åããŠãµãŒããŒã«éä¿¡ã§ãããã©ãŒã ããããŸãã ãã©ãŒã ã®äŸã次ã«ç€ºããŸãã
<form method="GET" action="example/message.html"> <p>: <input type="text" name="name"></p> <p>:<br><textarea name="message"></textarea></p> <p><button type="submit"> </button></p> </form>
ãã®ã³ãŒãã¯ã2ã€ã®ãã£ãŒã«ããæã€ãã©ãŒã ãèšè¿°ããŠããŸããå°ããªãã£ãŒã«ãã¯ååãèŠæ±ãã倧ããªãã£ãŒã«ãã¯ã¡ãã»ãŒãžãšããŠå ¥åããŸãã [éä¿¡]ãã¿ã³ãã¯ãªãã¯ãããšããããã®ãã£ãŒã«ãã®æ å ±ãã¯ãšãªæååã«ãšã³ã³ãŒããããŸãã èŠçŽ ã®ã¡ãœããå±æ§ãGETã®å ŽåããŸãã¯ãŸã£ããæå®ãããŠããªãå Žåãã¯ãšãªæååã¯ã¢ã¯ã·ã§ã³ãã£ãŒã«ãã®URLã«é 眮ããããã©ãŠã¶ãŒã¯ãã®URLã䜿çšããŠGETèŠæ±ãè¡ããŸãã
GET /example/message.html?name=Jean&message=Yes%3F HTTP / 1.1
ã¯ãšãªè¡ã®å é ã¯çå笊ã§ç€ºãããŸãã ãã®åŸããã©ãŒã ãã£ãŒã«ãã®ååå±æ§ãšãããã®ãã£ãŒã«ãã®å 容ã«å¯Ÿå¿ããååãšå€ã®ãã¢ããããŸãã ã¢ã³ããµã³ãïŒïŒïŒã䜿çšããŠããããåºåããŸãã
ãã®äŸã§éä¿¡ãããã¡ãã»ãŒãžã«ã¯ãæååãYesïŒããå«ãŸããŠããŸãããçå笊ã¯å¥åŠãªã³ãŒãã«çœ®ãæããããŠããŸãã ã¯ãšãªæååã®äžéšã®æåã¯ãšã¹ã±ãŒãããå¿ èŠããããŸãã çå笊ãå«ã¿ãcodeïŒ 3Fã§è¡šãããŸãã ãã¹ãŠã®åœ¢åŒã«ã¯æåããšã¹ã±ãŒãããæ¹æ³ãå¿ èŠã§ãããšãããæžãããŠããªãèŠåããããŸãã URLãšã³ã³ãŒããšåŒã°ãããã®ã«ãŒã«ã¯ãããŒã»ã³ãã®åŸã«ãæåã³ãŒããè¡šã2æ¡ã®16é²æ°ã䜿çšããŸãã 10é²æ³ã®3Fã¯63ã§ãããããã¯çå笊ã³ãŒãã§ãã JavaScriptã«ã¯ããšã³ã³ãŒãããã³ãã³ãŒãçšã®é¢æ°encodeURIComponentããã³decodeURIComponentããããŸãã
console.log(encodeURIComponent("Hello & goodbye")); // â Hello%20%26%20goodbye console.log(decodeURIComponent("Hello%20%26%20goodbye")); // â Hello & goodbye
åã®äŸã®ãã©ãŒã ã®methodå±æ§ãPOSTã«å€æŽãããšããã©ãŒã ãå«ãHTTPãªã¯ãšã¹ãã¯POSTã¡ãœããã䜿çšããŠéä¿¡ãããURLã«è¿œå ããã®ã§ã¯ãªãããªã¯ãšã¹ãæ¬æã§ãªã¯ãšã¹ãæååãéä¿¡ããŸãã
POST /example/message.html HTTP / 1.1
ã³ã³ãã³ãã®é·ãïŒ24
ã³ã³ãã³ãã¿ã€ãïŒã¢ããªã±ãŒã·ã§ã³/ x-www-form-urlencoded
åå=ãžã£ã³ïŒã¡ãã»ãŒãž=ã¯ãïŒ 3F
æ £äŸã«ãããGETã¡ãœããã¯ãæ€çŽ¢ãªã©ã®å¯äœçšã®ãªãã¯ãšãªã«äœ¿çšãããŸãã ãµãŒããŒäžã®äœããå€æŽãããªã¯ãšã¹ã-æ°ããã¢ã«ãŠã³ãã®äœæãŸãã¯ã¡ãã»ãŒãžã®æçš¿ã¯ãPOSTã¡ãœããã䜿çšããŠéä¿¡ããå¿ èŠããããŸãã ãã©ãŠã¶ãªã©ã®ã¯ã©ã€ã¢ã³ãããã°ã©ã ã¯ãPOSTãªã¯ãšã¹ããè¡ãå¿ èŠããªãããšãèªèããŠãããããšãã°ããŠãŒã¶ãŒãããã«å¿ èŠãšããã³ã³ãã³ããããŠã³ããŒããããªã©ããŠãŒã¶ãŒã«æ°ä»ãããã«GETãªã¯ãšã¹ããè¡ãããšããããŸãã
次ã®ç« ã§ã¯ããã©ãŒã ã«æ»ããJavaScriptã䜿çšããŠãã©ãŒã ãå®è¡ããæ¹æ³ã«ã€ããŠèª¬æããŸãã
XMLHttpRequest
ãã©ãŠã¶ã®JavaScriptãHTTPãªã¯ãšã¹ããäœæã§ããã€ã³ã¿ãŒãã§ã€ã¹ã¯ãXMLHttpRequestãšåŒã°ããŸãïŒæåã®ãµã€ãºãã©ã®ããã«ãžã£ã³ããããã«æ³šæããŠãã ããïŒã 1990幎代åŸåã«Microsoftã§Internet Explorerçšã«éçºãããŸããã åœæãXML圢åŒã¯ããžãã¹ãœãããŠã§ã¢ã®äžçã§éåžžã«äººæ°ããããŸããããã®äžçã§ã¯ãMicrosoftã¯åžžã«å®¶åºã«ãããšæããŠããŸããã éåžžã«äººæ°ããã£ããããXMLã®çç¥åœ¢ã¯HTTPãæäœããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã®ååã«åºå®ãããŠããŸããããåŸè ã¯XMLã«ãŸã£ããé¢é£ä»ããããŠããŸããã
ããã§ããååã¯å®å šã«ç¡æå³ã§ã¯ãããŸããã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšãåçãXMLããã¥ã¡ã³ãã®ããã«è§£æã§ããŸãã 2ã€ã®ç°ãªããã®ïŒèŠæ±ãšåçã®è§£æïŒã1ã€ã«æ··ããããšã¯ããã¡ãããå«ãªãã¶ã€ã³ã§ãããäœãã§ããã®ã§ãããã
XMLHttpRequestã€ã³ã¿ãŒãã§ã€ã¹ãInternet Explorerã«è¿œå ããããšãã以åã¯éåžžã«å°é£ã§ãã£ãããšãè¡ãããšãå¯èœã«ãªããŸããã ããšãã°ããŠãŒã¶ãŒãããã¹ãããã¯ã¹ã«äœããå ¥åããŠããéã«ããµã€ãã¯ããã³ããã®ãªã¹ãã衚瀺ãå§ããŸããã ã¹ã¯ãªããã¯ããŠãŒã¶ãŒãããã¹ããå ¥åãããšåæã«ãHTTPãä»ããŠãµãŒããŒã«ããã¹ããéä¿¡ããŸãã å¯èœãªå ¥åãªãã·ã§ã³çšã®ããŒã¿ããŒã¹ãåãããµãŒããŒã¯ããšã³ããªã®äžãããšã³ããªãæ¢ãã衚瀺ã®ããã«ããããè¿ããŸãã ãšãŠãã¯ãŒã«ã«èŠããŸããããµã€ããæäœãããã³ã«ããŒãžå šäœããªããŒããããã®ãåŸ ã€ããšã«æ £ããŠããŸããã
åœæã®ãã1ã€ã®éèŠãªãã©ãŠã¶ã§ããMozillaïŒåŸã®FirefoxïŒã¯é ããåããããããŸããã§ããã åæ§ã®ããšãã§ããããã«ããããã«ãMozillaã¯ã€ã³ã¿ãŒãã§ãŒã¹ãååãšãšãã«ã³ããŒããŸããã 次äžä»£ã®ãã©ãŠã¶ãŒãããã«ç¶ããä»æ¥ã§ã¯XMLHttpRequestãäºå®äžã®æšæºãšãªã£ãŠããŸãã
æåºäŸé Œ
åçŽãªãªã¯ãšã¹ããéä¿¡ããã«ã¯ãXMLHttpRequestã³ã³ã¹ãã©ã¯ã¿ãŒã§ãªã¯ãšã¹ããªããžã§ã¯ããäœæããopenã¡ãœãããšsendã¡ãœãããåŒã³åºããŸãã
var req = new XMLHttpRequest(); req.open("GET", "example/data.txt", false); req.send(null); console.log(req.responseText); // â This is the content of data.txt
openã¡ãœããã¯ãªã¯ãšã¹ããèšå®ããŸãã ãã®äŸã§ã¯ããµã³ãã«/ data.txtãã¡ã€ã«ã«å¯ŸããŠGETãªã¯ãšã¹ããè¡ãããšã«ããŸããã ãããã³ã«åã§å§ãŸããªãURLïŒããšãã°ãhttp :)ã¯çžå¯ŸãšåŒã°ããŸããã€ãŸããçŸåšã®ããã¥ã¡ã³ãã«å¯ŸããŠçžå¯Ÿçã«è§£éãããŸãã ã¹ã©ãã·ã¥ïŒ/ïŒã§å§ãŸãå ŽåãçŸåšã®ãã¹ïŒãµãŒããŒåã®åŸã®éšåïŒã眮ãæããŸãã ãã以å€ã®å ŽåãçŸåšã®ãã¹ã®æåŸã®ã¹ã©ãã·ã¥ãŸã§ã®éšåãçžå¯ŸURLã®åã«é 眮ãããŸãã
ãªã¯ãšã¹ããéããåŸãsendã¡ãœããã䜿çšããŠéä¿¡ã§ããŸãã åŒæ°ã¯ãªã¯ãšã¹ãã®æ¬æã§ãã GETãªã¯ãšã¹ãã®å Žåãnullã䜿çšãããŸãã openã®3çªç®ã®åŒæ°ãfalseã®å Žåãsendã¯ãªã¯ãšã¹ããžã®å¿çãåä¿¡ãããåŸã«ã®ã¿è¿ãããŸãã å¿çæ¬æãååŸããã«ã¯ãèŠæ±ãªããžã§ã¯ãã®responseTextããããã£ãèªã¿åããŸãã
å¿çãªããžã§ã¯ãããä»ã®æ å ±ãååŸã§ããŸãã ã¹ããŒã¿ã¹ã³ãŒãã¯statusããããã£ã§äœ¿çšã§ããã¹ããŒã¿ã¹ããã¹ãã¯statusTextã«ãããŸãã èŠåºãã¯getResponseHeaderããèªã¿åãããšãã§ããŸãã
var req = new XMLHttpRequest(); req.open("GET", "example/data.txt", false); req.send(null); console.log(req.status, req.statusText); // â 200 OK console.log(req.getResponseHeader("content-type")); // â text/plain
ããããŒåã¯å€§æåãšå°æåãåºå¥ãããŸããã éåžžããContent-Typeããªã©ãååèªã®å é ã«å€§æåã䜿çšãããŸããããcontent-typeããŸãã¯ãcOnTeNt-TyPeãã¯åãã¿ã€ãã«ãè¡šããŸãã
ãã©ãŠã¶èªäœã¯ãããã¹ãããªã©ã®ããããŒãè¿œå ããŸãããããã®ããããŒã¯ããµãŒããŒãããã£ãµã€ãºãèšç®ããããã«å¿ èŠã§ãã ãã ããsetRequestHeaderã¡ãœããã䜿çšããŠç¬èªã®ããããŒãè¿œå ã§ããŸãã ããã¯ç¹å¥ãªå Žåã«å¿ èŠã§ãããã¢ã¯ã»ã¹ããŠãããµãŒããŒã®æ¯æŽãå¿ èŠã§ã-åŠçã§ããªãããããŒã¯ç¡èŠããŠãæ§ããŸããã
éåæãªã¯ãšã¹ã
ãã®äŸã§ã¯ãèŠæ±ã¯éä¿¡åŒã³åºããçµäºãããšãã«å®äºããŸããã responseTextãªã©ã®ããããã£ãããã«äœ¿çšå¯èœã«ãªããããããã¯äŸ¿å©ã§ãã ããããããã¯ããã©ãŠã¶ãŒãšãµãŒããŒãäºãã«éä¿¡ããŠããéãããã°ã©ã ãåŸ æ©ããããšãæå³ããŸãã äžååãªéä¿¡ã匱ããµãŒããŒããŸãã¯å€§ããªãã¡ã€ã«ã®å Žåãããã«ã¯é·ãæéãããããŸãã ãŸããããã°ã©ã ãã¹ã¿ã³ãã€ã¢ãŒãã«ãªã£ãŠããéã¯ã€ãã³ããã³ãã©ãŒãæ©èœããªããããããã¯æªãããšã§ããããã¥ã¡ã³ãã¯ãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«å¿çããªããªããŸãã
openã®3çªç®ã®åŒæ°ãšããŠtrueãæž¡ããšããªã¯ãšã¹ãã¯éåæã«ãªããŸãã ã€ãŸããsendãåŒã³åºããšããªã¯ãšã¹ãã¯éä¿¡ã®ããã«ãã¥ãŒã«å ¥ããããŸãã ããã°ã©ã ã¯åŒãç¶ãåäœãããã©ãŠã¶ã¯ããã¯ã°ã©ãŠã³ãã§ããŒã¿ãéåä¿¡ããŸãã
ãã ãããªã¯ãšã¹ãã®åŠçäžã¯ãå¿çãåãåããŸããã ããŒã¿ãå°çããŠæºåãã§ããŠãããšããéç¥ã¡ã«ããºã ãå¿ èŠã§ãã ãããè¡ãã«ã¯ããloadãã€ãã³ãããªãã¹ã³ããå¿ èŠããããŸãã
var req = new XMLHttpRequest(); req.open("GET", "example/data.txt", true); req.addEventListener("load", function() { console.log("Done:", req.status); }); req.send(null);
第15ç« ã®requestAnimationFrameãåŒã³åºãããã«ããã®ã³ãŒãã¯éåæããã°ã©ãã³ã°ã¹ã¿ã€ã«ã䜿çšããããã«åŒ·å¶ãããªã¯ãšã¹ãåŸã«ã³ãŒããå®è¡ããããã«é¢æ°ãã©ããããé©åãªã¿ã€ãã³ã°ã§ãã®é¢æ°ã®åŒã³åºããé 眮ãââãŸãã ããã«ã€ããŠã¯åŸã§èª¬æããŸãã
XMLããŒã¿ã®ååŸ
XMLHttpRequestã«ãã£ãŠè¿ããããªãœãŒã¹ãXMLããã¥ã¡ã³ãã®å ŽåãresponseXMLããããã£ã«ã¯ããã¥ã¡ã³ãã®è§£æããããã¥ãŒãå«ãŸããŸãã ã¹ã¿ã€ã«ããããã£ã®ãããªåºæã®HTMLæ©èœããªãããšãé€ããŠãDOMãšåæ§ã®æ¹æ³ã§æ©èœããŸãã responseXMLã«å«ãŸãããªããžã§ã¯ãã¯ãããã¥ã¡ã³ããªããžã§ã¯ãã«å¯Ÿå¿ããŸãã ãã®documentElementããããã£ã¯ãå€éšXMLããã¥ã¡ã³ãã¿ã°ãåç §ããŸãã 次ã®ããã¥ã¡ã³ãïŒäŸ/ fruit.xmlïŒã§ã¯ããã®ã¿ã°ã¯æ¬¡ã®ããã«ãªããŸãã
<fruits> <fruit name="banana" color="yellow"/> <fruit name="lemon" color="yellow"/> <fruit name="cherry" color="red"/> </fruits>
次ã®ãããªãã¡ã€ã«ãååŸã§ããŸãã
var req = new XMLHttpRequest(); req.open("GET", "example/fruit.xml", false); req.send(null); console.log(req.responseXML.querySelectorAll("fruit").length); // â 3
XMLããã¥ã¡ã³ãã䜿çšããŠãæ§é åãããæ å ±ããµãŒããŒãšäº€æã§ããŸãã ãããã®åœ¢åŒ-ãã¹ããããã¿ã°-ã¯ãã»ãšãã©ã®ããŒã¿ãä¿åããã®ã«é©ããŠããŸããå°ãªããšãããã¹ããã¡ã€ã«ãããåªããŠããŸãã DOMã€ã³ã¿ãŒãã§ãŒã¹ã¯ãæ å ±ãæœåºãããšããç¹ã§ã¯äžæ Œå¥œã§ãããXMLææžã¯ããªãåé·ã§ãã éåžžã¯ãããã°ã©ã ãšäººã®äž¡æ¹ã®èªã¿åããšæžã蟌ã¿ãç°¡åãªJSON圢åŒã®ããŒã¿ã䜿çšããŠéä¿¡ããããšããå§ãããŸãã
var req = new XMLHttpRequest(); req.open("GET", "example/fruit.json", false); req.send(null); console.log(JSON.parse(req.responseText)); // â {banana: "yellow", lemon: "yellow", cherry: "red"}
HTTPã®ãµã³ãããã¯ã¹
WebããŒãžããã®HTTPèŠæ±ã¯ãã»ãã¥ãªãã£äžã®åé¡ãåŒãèµ·ãããŸãã ã¹ã¯ãªãããå¶åŸ¡ããŠãã人ã¯ãå®è¡äžã®ã³ã³ãã¥ãŒã¿ãŒãææããŠãããŠãŒã¶ãŒã®èå³ãšã¯ç°ãªãèå³ãæã€å ŽåããããŸãã å ·äœçã«ã¯ãthemafia.orgã«ã¢ã¯ã»ã¹ããå Žåããã©ãŠã¶ã®æ å ±ãèå¥åãšããŠäœ¿çšãããã¹ãŠã®ãéãããã£ã¢ã¢ã«ãŠã³ãã«éä¿¡ããã³ãã³ããäžããŠãã¹ã¯ãªãããmybank.comã«ãªã¯ãšã¹ãã§ããããã«ããããããŸããã
Webãµã€ãã¯ãã®ãããªæ»æãã身ãå®ãããšãã§ããŸãããããã«ã¯ããçšåºŠã®åªåãå¿ èŠã§ãããå€ãã®ãµã€ãã¯ããã«å¯ŸåŠããŠããŸããã ãã®ããããã©ãŠã¶ã¯ãã¹ã¯ãªãããä»ã®ãã¡ã€ã³ïŒthemafia.orgãmybank.comãªã©ã®ååïŒã«ãªã¯ãšã¹ããéä¿¡ããããšãé²ãããšã§ãããããä¿è·ããŸãã
ããã¯ãæ£åœãªçç±ã§ç°ãªããã¡ã€ã³ã«ã¢ã¯ã»ã¹ããå¿ èŠãããã·ã¹ãã ã®éçºã劚ããå¯èœæ§ããããŸãã 幞ããªããšã«ããµãŒããŒã¯å¿çã«æ¬¡ã®ããããŒãå«ããããšãã§ãããªã¯ãšã¹ããä»ã®ãã¡ã€ã³ããéä¿¡ãããå¯èœæ§ãããããšããã©ãŠã¶ãŒã«èª¬æããŸãã
Access-Control-Allow-OriginïŒ*
æœè±¡ãªã¯ãšã¹ã
第10ç« ã§ã¯ãAMDã¢ãžã¥ã©ãŒã·ã¹ãã ã®å®è£ ã§ãä»®æ³é¢æ°backgroundReadFileã䜿çšããŸããã 圌女ã¯ãã¡ã€ã«åãšé¢æ°ãåãå ¥ãããã¡ã€ã«ã®å 容ãèªã¿åã£ãåŸã«ãã®é¢æ°ãåŒã³åºããŸããã ãã®é¢æ°ã®ç°¡åãªå®è£ ã¯æ¬¡ã®ãšããã§ãã
function backgroundReadFile(url, callback) { var req = new XMLHttpRequest(); req.open("GET", url, true); req.addEventListener("load", function() { if (req.status < 400) callback(req.responseText); }); req.send(null); }
åçŽãªæœè±¡åã«ãããåçŽãªGETèŠæ±ã«å¯ŸããXMLHttpRequestã®äœ¿çšãç°¡çŽ åãããŸãã HTTPãªã¯ãšã¹ããè¡ãããã°ã©ã ãäœæããŠããå Žåããã«ããŒé¢æ°ã䜿çšãããšãniceãXMLHttpRequestãã³ãã¬ãŒããåžžã«ç¹°ãè¿ãå¿ èŠããªããªããŸãã
ã³ãŒã«ããã¯åŒæ°ã¯ããã®ãããªé¢æ°ã説æããããã«ãã䜿çšãããçšèªã§ãã åŸã§ã³ãŒã«ããã¯ã§ããããã«ãã³ãŒã«ããã¯é¢æ°ã¯å¥ã®ã³ãŒãã«æž¡ãããŸãã
ããã°ã©ã å°çšã«èª¿æŽãããè£å©HTTPé¢æ°ãç°¡åã«äœæã§ããŸãã åã®ãã®ã¯GETãªã¯ãšã¹ãã®ã¿ãè¡ãããªã¯ãšã¹ãã®ããããŒãŸãã¯æ¬æãå¶åŸ¡ããããšã¯ã§ããŸããã POSTãªã¯ãšã¹ãçšã«å¥ã®ãªãã·ã§ã³ããŸãã¯ç°ãªããªã¯ãšã¹ãããµããŒãããããäžè¬çãªãªãã·ã§ã³ãäœæã§ããŸãã å€ãã®JavaScriptã©ã€ãã©ãªã¯ãXMLHttpRequestã®ã©ãããŒãæäŸããŸãã
ãã®ã©ãããŒã®äž»ãªåé¡ã¯ãšã©ãŒåŠçã§ãã èŠæ±ããšã©ãŒã瀺ãã¹ããŒã¿ã¹ã³ãŒãïŒ400以äžïŒãè¿ãå ŽåãäœãããŸããã ããã¯æ£åžžãªå ŽåããããŸãããæ å ±ãåä¿¡ããŠââããããšã瀺ãããŠã³ããŒãã€ã³ãžã±ãŒã¿ãŒãããŒãžã«é 眮ãããšããŸãã ãµãŒããŒãã¯ã©ãã·ã¥ãããæ¥ç¶ãäžæãããããã«ãªã¯ãšã¹ãã倱æããå ŽåãããŒãžã¯äœãã§ããžãŒã§ããããã«èŠããŸãã ãŠãŒã¶ãŒã¯å°ãåŸ ã£ãŠããéå±ãããµã€ãããªãããã®æãã ãšå€æããŸãã
ã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ã倱æãããªã¯ãšã¹ãã«é¢ããèŠåãåãåããªãã·ã§ã³ãå¿ èŠã§ãã ããšãã°ãããŠã³ããŒãã¡ãã»ãŒãžãåé€ããŠããŠãŒã¶ãŒã«äœãåé¡ããã£ãããšãäŒããããšãã§ããŸãã
éåæã³ãŒãã®ãšã©ãŒåŠçã¯ãåæã³ãŒããããããã«è€éã§ãã å€ãã®å Žåãäœæ¥ã®äžéšãåé¢ããŠã³ãŒã«ããã¯é¢æ°ã«é 眮ããå¿ èŠããããããtryãããã¯ã®ã¹ã³ãŒãã¯ç¡æå³ã«ãªããŸãã 次ã®ã³ãŒãã§ã¯ãbackgroundReadFileã®åŒã³åºããããã«è¿ããããããäŸå€ã¯ãã£ãããããŸããã ãã®åŸãã³ã³ãããŒã«ã¯tryãããã¯ãé¢ããããããã®é¢æ°ã¯åŒã³åºãããŸããã
try { backgroundReadFile("example/data.txt", function(text) { if (text != "expected") throw new Error("That was unexpected"); }); } catch (e) { console.log("Hello from the catch block"); }
倱æãããªã¯ãšã¹ããåŠçããã«ã¯ãè¿œå ã®é¢æ°ãã©ãããŒã«æž¡ããåé¡ãçºçããå Žåã«ãããåŒã³åºãå¿ èŠããããŸãã å¥ã®ãªãã·ã§ã³ã¯ãèŠæ±ã倱æããå Žåãåé¡ã®èª¬æãå«ãè¿œå ã®åŒæ°ãã³ãŒã«ããã¯é¢æ°ã«æž¡ããããšããèŠåã䜿çšããããšã§ãã äŸïŒ
function getURL(url, callback) { var req = new XMLHttpRequest(); req.open("GET", url, true); req.addEventListener("load", function() { if (req.status < 400) callback(req.responseText); else callback(null, new Error("Request failed: " + req.statusText)); }); req.addEventListener("error", function() { callback(null, new Error("Network error")); }); req.send(null); }
åŒã³åºãã«åé¡ãããå Žåã«èµ·åãããšã©ãŒã€ãã³ããã³ãã©ãŒãè¿œå ããŸããã ãŸãããªã¯ãšã¹ãããšã©ãŒã瀺ãã¹ããŒã¿ã¹ã§å®äºãããšããšã©ãŒåŒæ°ã䜿çšããŠã³ãŒã«ããã¯é¢æ°ãåŒã³åºããŸãã
getURLã䜿çšããã³ãŒãã¯ããšã©ãŒãè¿ããããã©ããã確èªãããšã©ãŒãããå Žåã¯åŠçããå¿ èŠããããŸãã
getURL("data/nonsense.txt", function(content, error) { if (error != null) console.log("Failed to fetch nonsense.txt: " + error); else console.log("nonsense.txt: " + content); });
äŸå€ãé€ããããã¯åœ¹ã«ç«ã¡ãŸããã è€æ°ã®éåæã¢ã¯ã·ã§ã³ãé£ç¶ããŠå®è¡ãããšãïŒtry / catchãããã¯ã§åãã³ãã©ãŒãã©ããããŠããªãéãïŒãã§ãŒã³å ã®ä»»æã®æç¹ã§äŸå€ããããã¬ãã«ã§çºçãããã§ãŒã³å šäœã«å²ã蟌ã¿ãŸãã
çŽæ
åçŽãªã³ãŒã«ããã¯ã®åœ¢åŒã§è€éãªãããžã§ã¯ãã®éåæã³ãŒããèšè¿°ããããšã¯å°é£ã§ãã ãšã©ãŒãã§ãã¯ãå¿ããããäºæããªãäŸå€ãããã°ã©ã ãçªç¶äžæãããããããšã¯éåžžã«ç°¡åã§ãã ããã«ãæ£ãããšã©ãŒåŠçãæŽçããããã€ãã®é£ç¶ããã³ãŒã«ããã¯ãéããŠãšã©ãŒãæž¡ãããšã¯éåžžã«é¢åã§ãã
è¿œå ã®æœè±¡åã䜿çšããŠããã®åé¡ã解決ããããã«å€ãã®è©Šã¿ãè¡ãããŸããã æãæåããè©Šã¿ã®1ã€ã¯ãããã¹ãšåŒã°ããŸãã Promiseã¯ãæž¡ãããšãã§ãããªããžã§ã¯ãã§éåæã¢ã¯ã·ã§ã³ãã©ããããã¢ã¯ã·ã§ã³ãå®äºãŸãã¯å€±æãããšãã«ç¹å®ã®ããšãè¡ãå¿ èŠããããŸãã ãã®ãããªã€ã³ã¿ãŒãã§ãŒã¹ã¯ãã§ã«JavaScriptã®çŸåšã®ããŒãžã§ã³ã®äžéšã«ãªã£ãŠãããå€ãããŒãžã§ã³ã§ã¯ã©ã€ãã©ãªãšããŠäœ¿çšã§ããŸãã
promiseã€ã³ã¿ãŒãã§ãŒã¹ã¯ç¹ã«çŽæçã§ã¯ãããŸãããã匷åã§ãã ãã®ç« ã§ã¯ãéšåçã«ã®ã¿èª¬æããŸãã 詳现ã«ã€ããŠã¯ã www.promisejs.orgãã芧ãã ããã
promisesãªããžã§ã¯ããäœæããã«ã¯ãPromiseã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããŠãéåæã¢ã¯ã·ã§ã³ãåæåããæ©èœãäžããŸãã ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãã®é¢æ°ãåŒã³åºãã2ã€ã®åŒæ°ãæž¡ããŸãããããã®åŒæ°èªäœãé¢æ°ã§ãã æåã¯æåããå Žåã«åŒã³åºãããããäžæ¹ã¯å€±æããå Žåã«åŒã³åºãããŸãã
ãŸããGETãªã¯ãšã¹ãã®ã©ãããŒããããŸãããä»åã¯ãããçŽæãè¿ããŸãã ä»ã§ã¯getãšåŒã¶ã ãã§ãã
function get(url) { return new Promise(function(succeed, fail) { var req = new XMLHttpRequest(); req.open("GET", url, true); req.addEventListener("load", function() { if (req.status < 400) succeed(req.responseText); else fail(new Error("Request failed: " + req.statusText)); }); req.addEventListener("error", function() { fail(new Error("Network error")); }); req.send(null); }); }
é¢æ°èªäœãžã®ã€ã³ã¿ãŒãã§ãŒã¹ãç°¡çŽ åãããŠããããšã«æ³šæããŠãã ããã 圌女ã«URLãæž¡ããšã圌女ã¯çŽæãè¿ããŸãã èŠæ±ã®åºåã®ãã³ãã©ãŒãšããŠæ©èœããŸãã thenã¡ãœãããããã2ã€ã®é¢æ°ã§åŒã³åºãããŸãã1ã€ã¯åŠçã®æåããã1ã€ã¯å€±æã§ãã
get("example/data.txt").then(function(text) { console.log("data.txt: " + text); }, function(error) { console.log("Failed to fetch data.txt: " + error); });
ãããŸã§ã®ãšãããããã¯ãŸã ç§ãã¡ããã§ã«ãã£ãããšãè¡šçŸãã1ã€ã®æ¹æ³ã§ãã äžé£ã®ã€ãã³ããããå Žåã«ã®ã¿ãé¡èãªéããèŠããããã«ãªããŸãã
åŒã³åºãã¯æ°ãããããã¹ãçæãããã®çµæïŒæåãã³ãã©ãŒã«æž¡ãããå€ïŒã¯ã次ã«æž¡ããæåã®é¢æ°ã«ãã£ãŠè¿ãããå€ã«äŸåããŸãã ãã®é¢æ°ã¯ãè¿œå ã®éåæäœæ¥ãè¡ãããŠããããšã瀺ãå¥ã®ãããã¹ãè¿ãããšãã§ããŸãã ãã®å Žåããã®ãšãã«è¿ãããpromiseã¯ããã³ãã©ãŒé¢æ°ã«ãã£ãŠè¿ãããpromiseãåŸ æ©ããåãå€ã§æåãŸãã¯å€±æãçºçããŸãã ãã³ãã©ãŒé¢æ°ããããã¹ã§ã¯ãªãå€ãè¿ããšãthenãè¿ããããã¹ã¯æåãããã®å€ãçµæãšããŠäœ¿çšããŸãã
ãã®ãããpromiseã®çµæãå€æŽããããã«äœ¿çšã§ããŸãã ããšãã°ã次ã®é¢æ°ã¯ãçµæãJSONãšããŠè§£æãããç¹å®ã®URLã®ã³ã³ãã³ãã§ãããããã¹ãè¿ããŸãã
function getJSON(url) { return get(url).then(JSON.parse); }
thenãžã®æåŸã®åŒã³åºãã¯ã倱æãã³ãã©ãŒã瀺ããŠããŸããã§ããã ããã¯èš±å®¹ãããŸãã ãšã©ãŒã¯ãããŸã§ã«è¿ããããããã¹ã«è»¢éããããããå¿ èŠã«ãªããŸããgetJSONã¯äœããããŸããããªãã£ããšãã«äœããã¹ãããç¥ããŸãããããããåŒã³åºãã³ãŒãã¯ãããç¥ã£ãŠããããšãæãŸããŸãã
promiseã®äœ¿çšã瀺ãäŸãšããŠããµãŒããŒããJSONãã¡ã€ã«ã®æ°ãåãåãããªã¯ãšã¹ãã®å®è¡äžã«ãããŠã³ããŒãããšããåèªã衚瀺ããããã°ã©ã ãäœæããŸãã ãã¡ã€ã«ã«ã¯ã人ã«é¢ããæ å ±ãšãç¶èŠªãæ¯èŠªãé å¶è ãªã©ã®ä»ã®äººã«é¢ããæ å ±ãå«ãä»ã®ãã¡ã€ã«ãžã®ãªã³ã¯ãå«ãŸããŠããŸãã
example / bert.jsonããé å¶è ã®æ¯èŠªã®ååãååŸããå¿ èŠããããŸãã åé¡ãçºçããå Žåã¯ããããŠã³ããŒãããšããããã¹ããåé€ããŠãšã©ãŒã¡ãã»ãŒãžã衚瀺ããå¿ èŠããããŸãã çŽæã§ãããè¡ãæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
<script> function showMessage(msg) { var elt = document.createElement("div"); elt.textContent = msg; return document.body.appendChild(elt); } var loading = showMessage("..."); getJSON("example/bert.json").then(function(bert) { return getJSON(bert.spouse); }).then(function(spouse) { return getJSON(spouse.mother); }).then(function(mother) { showMessage(" - " + mother.name); }).catch(function(error) { showMessage(String(error)); }).then(function() { document.body.removeChild(loading); }); </script>
çµæã®ããã°ã©ã ã¯æ¯èŒçã³ã³ãã¯ãã§èªã¿ãããã§ãã catchã¡ãœããã¯thenã«äŒŒãŠããŸããã倱æããçµæã®ãã³ãã©ãŒã®ã¿ãæ³å®ããæåããå Žåã¯å€æŽãããŠããªãçµæãããã«æž¡ããŸãã ããã°ã©ã ã®å®è¡ã¯ãäŸå€ããã£ããããåŸãéåžžã®æ¹æ³ã§ç¶è¡ãããŸã-try / catchã®å Žåãšåãã§ãã ãããã£ãŠãããŒãã¡ãã»ãŒãžãåé€ããæåŸã®åŠçã¯ãé害ãçºçããå Žåã§ãå®è¡ãããŸãã
promiseã€ã³ã¿ãŒãã§ãŒã¹ã¯ãããã°ã©ã ã®å®è¡ãéåæã«åŠçããããã®å¥åã®èšèªã§ãããšæ³åã§ããŸãã æäœã«å¿ èŠãªã¡ãœãããšé¢æ°ãžã®è¿œå ã®åŒã³åºãã¯ãã³ãŒãã«å€å°å¥åŠãªå€èŠ³ãäžããŸããããã¹ãŠã®ãšã©ãŒãæåã§åŠçããã»ã©äžäŸ¿ã§ã¯ãããŸããã
HTTPãè©äŸ¡ãã
ãã©ãŠã¶ïŒã¯ã©ã€ã¢ã³ãïŒã®JavaScriptããã°ã©ã ããµãŒããŒããã°ã©ã ãšéä¿¡ããã·ã¹ãã ãäœæããå Žåããã®ãããªéä¿¡ã®ããã€ãã®ã¢ããªã³ã°ãªãã·ã§ã³ã䜿çšã§ããŸãã
äžè¬çãªæ¹æ³ã¯ããªã¢ãŒãããã·ãŒãžã£ã³ãŒã«ã§ãã ãã®ã¢ãã«ã§ã¯ãéä¿¡ã¯éåžžã®é¢æ°åŒã³åºãã®ãã¿ãŒã³ã«åŸã£ãŠé²è¡ãããããã®é¢æ°ã®ã¿ãå¥ã®ã³ã³ãã¥ãŒã¿ãŒã§å®è¡ãããŸããåŒã³åºãã¯ãé¢æ°åãšåŒæ°ãå«ããµãŒããŒãžã®èŠæ±ãäœæããããšã§ããèŠæ±ãžã®å¿çã«ã¯æ»ãå€ãå«ãŸããŸãã
ãªã¢ãŒãããã·ãŒãžã£ã³ãŒã«ã䜿çšããå ŽåãHTTPã¯éä¿¡ã®æ段ãšããŠã®ã¿æ©èœããã»ãšãã©ã®å Žåãå®å šã«é衚瀺ã«ããæœè±¡åã¬ã€ã€ãŒãèšè¿°ããŸãã
å¥ã®ã¢ãããŒãã¯ãHTTPãªãœãŒã¹ãšã¡ãœããã®æŠå¿µã«åºã¥ããŠéä¿¡ã·ã¹ãã ãæ§ç¯ããããšã§ãã addUserãšãããªã¢ãŒãããã·ãŒãžã£ãåŒã³åºã代ããã«ã/ users / larryã«å¯ŸããŠPUTèŠæ±ãè¡ããŸããé¢æ°ã®åŒæ°ã§ãŠãŒã¶ãŒããããã£ããšã³ã³ãŒããã代ããã«ãããã¥ã¡ã³ã圢åŒãå®çŸ©ãããããŠãŒã¶ãŒãè¡šãæ¢åã®åœ¢åŒã䜿çšããŸããæ°ãããªãœãŒã¹ãäœæããPUTèŠæ±ã®æ¬æã¯ãåã«ãã®åœ¢åŒã®ããã¥ã¡ã³ãã«ãªããŸãããªãœãŒã¹ã¯ãURLïŒ/ user / larryïŒãžã®GETãªã¯ãšã¹ããéããŠååŸããããã®ãªãœãŒã¹ãè¡šãããã¥ã¡ã³ããè¿ãããŸãã
2çªç®ã®ã¢ãããŒãã¯ããªãœãŒã¹ãã£ãã·ã³ã°ã®ãµããŒããªã©ãããã€ãã®HTTPæ©èœã®äœ¿çšãç°¡çŽ åããŸãïŒãªãœãŒã¹ã®ã³ããŒã¯ã¯ã©ã€ã¢ã³ãåŽã«ä¿åãããŸãïŒããŸãããªãœãŒã¹ã®èŠ³ç¹ããèããããšã¯ãæ©èœã®èŠ³ç¹ããèãããããç°¡åãªã®ã§ãäžè²«æ§ã®ããã€ã³ã¿ãŒãã§ãŒã¹ãäœæããã®ã«ã圹ç«ã¡ãŸãã
ã»ãã¥ãªãã£ãšHTTPS
ããŒã¿ã¯ãé·ãå±éºãªçµè·¯ã«æ²¿ã£ãŠã€ã³ã¿ãŒãããã移åããŸããç®çå°ã«çãã«ã¯ãã³ãŒããŒã·ã§ããã®Wi-Fiãããã¯ãŒã¯ããããŸããŸãªçµç¹ãå·ã管çãããããã¯ãŒã¯ã«è³ããŸã§ãããããå Žæããžã£ã³ãããå¿ èŠããããŸããéäžã®ã©ã®æç¹ã§ããããããèªã¿åã£ãããå€æŽããããšããã§ããŸãã
ã¡ãŒã«ãã¹ã¯ãŒããªã©ã®ç§å¯ãä¿æããå¿ èŠãããå ŽåããŸãã¯ééå ã®éè¡å£åº§çªå·ãªã©ãç®çå°ã«å€æŽããå¿ èŠããªãå ŽåãåçŽãªHTTPã§ã¯äžååã§ãã
URLãhttpsïŒ//ã§å§ãŸãã»ãã¥ã¢HTTPãããã³ã«ã¯ãHTTPãã©ãã£ãã¯ãã©ãããããããèªã¿åããå€æŽãå°é£ã«ãªããŸããæåã«ãã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒã䞻匵ãããšããã§ããããšã確èªãããã©ãŠã¶ãŒãèªèããæš©éã®ããåœäºè ãçºè¡ããæå·èšŒææžãæ瀺ããããšããµãŒããŒã«èŠæ±ããŸãã次ã«ãæ¥ç¶ãééãããã¹ãŠã®ããŒã¿ãæå·åãããçèŽãæ¹ãããé²æ¢ãããŸãã
ãããã£ãŠããã¹ãŠãæ£åžžã«æ©èœããå ŽåãHTTPSã¯ã誰ããéä¿¡ããŠããå¥ã®Webãµã€ãã®ãµããããå Žåãšãéä¿¡ã®ååã®å Žåã®äž¡æ¹ãé²ããŸããããã¯å®å šã§ã¯ãªããåœã®èšŒææžãçãŸãã蚌ææžããŸãã¯å£ããããã°ã©ã ãåå ã§HTTPSãäœæ¥ã«å¯Ÿå¿ã§ããªãã£ãã±ãŒã¹ããã§ã«ãããŸããããã§ããHTTPã䜿çšãããšãäœãæªãããšãéåžžã«ç°¡åã«è¡ãããŸãããŸããHTTPSããããã³ã°ããã«ã¯ãæ¿åºæ©é¢ãŸãã¯éåžžã«æ·±å»ãªç¯çœªçµç¹ã®ã¿ãé©çšã§ããåªåãå¿ èŠã§ãïŒãããã®çµç¹ã«ãŸã£ããéãããªãå ŽåããããŸãïŒã
ãŸãšã
ãã®ç« ã§ã¯ãHTTPãã€ã³ã¿ãŒãããäžã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã®ãããã³ã«ã§ããããšã確èªããŸãããã¯ã©ã€ã¢ã³ãã¯ãã¡ãœããïŒéåžžã¯GETïŒãšãªãœãŒã¹ãå®çŸ©ãããã¹ãå«ãèŠæ±ãéä¿¡ããŸãããµãŒããŒã¯èŠæ±ã®åŠçæ¹æ³ã決å®ããã¹ããŒã¿ã¹ã³ãŒããšå¿çæ¬æã§å¿çããŸããèŠæ±ãšå¿çã«ã¯ãè¿œå æ å ±ãäŒããããããŒãå«ãŸããå ŽåããããŸãã
ãã©ãŠã¶ã¯ãããŒãžãã¬ã³ããªã³ã°ããããã«å¿ èŠãªãªãœãŒã¹ãååŸããããã«GETèŠæ±ãè¡ããŸãããã®ããŒãžã«ã¯ããŠãŒã¶ãŒãå ¥åããæ å ±ãããã©ãŒã ã®éä¿¡åŸã«äœæããããªã¯ãšã¹ãã§éä¿¡ã§ãããã©ãŒã ãå«ãŸããŠããå ŽåããããŸããããã«ã€ããŠã¯ã次ã®ç« ã§è©³ãã説æããŸãã
JavaScriptããã©ãŠã¶ããHTTPèŠæ±ãäœæããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãXMLHttpRequestãšåŒã°ããŸããXMLãã¬ãã£ãã¯ã¹ã¯ç¡èŠã§ããŸãïŒãã ãããããèšè¿°ããå¿ èŠããããŸãïŒãããã¯ãèŠæ±ãå®äºãããŸã§ãã¹ãŠã®äœæ¥ããããã¯ããåæãšãèŠæ±ã®çµäºãç£èŠããã€ãã³ããã³ãã©ãŒã®ã€ã³ã¹ããŒã«ãå¿ èŠãšããéåæã®2ã€ã®æ¹æ³ã§äœ¿çšã§ããŸããã»ãšãã©ãã¹ãŠã®å Žåãéåææ¹åŒãåªå ãããŸããã¯ãšãªã®äœæã¯æ¬¡ã®ããã«ãªããŸãã
var req = new XMLHttpRequest(); req.open("GET", "example/data.txt", true); req.addEventListener("load", function() { console.log(req.statusCode); }); req.send(null);
éåæããã°ã©ãã³ã°ã¯ç°¡åãªããšã§ã¯ãããŸãããPromisesã¯ããšã©ãŒã¡ãã»ãŒãžãšäŸå€ãé©åãªãã³ãã©ãŒã«ã«ãŒãã£ã³ã°ããéè€ãããšã©ãŒãèµ·ãããããèŠçŽ ãæœè±¡åããã®ãæ¯æŽãããããã·ã³ãã«ãªã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
æŒç¿
ã³ã³ãã³ã亀æž
HTTPã§ã§ããããšã®1ã€ã§ããããŸã 説æããŠããŸããããã³ã³ãã³ãããŽã·ãšãŒã·ã§ã³ã§ããèŠæ±ã®AcceptããããŒã䜿çšããŠãã¯ã©ã€ã¢ã³ããåä¿¡ãããããã¥ã¡ã³ãã®çš®é¡ããµãŒããŒã«äŒããããšãã§ããŸããå€ãã®ãµãŒããŒã¯ãããç¡èŠããŸããããµãŒããŒããªãœãŒã¹ããšã³ã³ãŒãããããŸããŸãªæ¹æ³ãç¥ã£ãŠãããšãããµãŒããŒã¯ããããŒãèŠãŠãã¯ã©ã€ã¢ã³ãã奜ãããããŒãéä¿¡ã§ããŸãã
eloquentjavascript.net/author URLã¯ãã¯ã©ã€ã¢ã³ãã®èŠæ±ã«å¿ããŠããã¬ãŒã³ããã¹ããšHTMLãŸãã¯JSONã§å¿çããããã«æ§æãããŸãããããã®åœ¢åŒã¯ãæšæºåãããã³ã³ãã³ãã¿ã€ãtext / plainãtext / htmlãããã³application / jsonã«ãã£ãŠå®çŸ©ãããŸãã
ãã®ãªãœãŒã¹ã®3ã€ã®åœ¢åŒãã¹ãŠãåä¿¡ããèŠæ±ãéä¿¡ããŸããXMLHttpRequestãªããžã§ã¯ãã®setRequestHeaderã¡ãœããã䜿çšããŠãAcceptããããŒãç®çã®ã³ã³ãã³ãã¿ã€ãã®ããããã«èšå®ããŸããéããåŸãéä¿¡ããåã«ããããŒãèšå®ããŠãã ããã
æåŸã«ãã¢ããªã±ãŒã·ã§ã³/è¹+ãŠãã³ãŒã³ãªã©ã®ã³ã³ãã³ããèŠæ±ããŠãäœãèµ·ãããã確èªããŠãã ããã
ããã€ãã®çŽæãåŸ ã£ãŠããŸã
Promiseã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¯allã¡ãœããããããpromiseã®é åãåãåããšãé åã«æå®ããããã¹ãŠã®promiseã®å®äºãåŸ ã€promiseãè¿ããŸãã次ã«ãæåããçµæãè¿ããçµæãå«ãé åãè¿ããŸããé åå ã®ãããã¹ã®ããããã倱æããå Žåãäžè¬çãªãããã¹ã倱æãè¿ããŸãïŒå€±æãããããã¹ã®å€ãé åããè¿ãããŸãïŒã
allé¢æ°ãèšè¿°ããŠããã®ãããªããšãè©ŠããŠãã ããã
Promiseãå®äºããåŸïŒæ£åžžã«å®äºããå ŽåãŸãã¯ãšã©ãŒãçºçããå ŽåïŒããšã©ãŒãŸãã¯æåãåã³è¿ãããšã¯ã§ããããã以éã®é¢æ°åŒã³åºãã¯ç¡èŠãããŸããããã«ãããçŽæã®ãšã©ãŒåŠçãç°¡çŽ åã§ããŸãã
function all(promises) { return new Promise(function(success, fail) { // . }); } // . all([]).then(function(array) { console.log(" []:", array); }); function soon(val) { return new Promise(function(success) { setTimeout(function() { success(val); }, Math.random() * 500); }); } all([soon(1), soon(2), soon(3)]).then(function(array) { console.log(" [1, 2, 3]:", array); }); function fail() { return new Promise(function(success, fail) { fail(new Error("")); }); } all([soon(1), fail(), soon(3)]).then(function(array) { console.log(" "); }, function(error) { if (error.message != "") console.log(" :", error); });