¸üÐÂʱ¼ä:2021Äê12ÔÂ02ÈÕ10ʱ26·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

HTTP·þÎñÆ÷±¾ÖÊÉÏÒ²ÊÇÒ»¸öSocket·þÎñÆ÷£¬¿ÉÒÔÀí½âΪÔÚSocket·þÎñÆ÷µÄ»ù´¡ÉϽøÐÐÁËһЩ·â×°£¬¼ò»¯ÁËһЩ²Ù×÷¡£±¾½Ú½«¶ÔHTTPÄ£¿éÌṩµÄAPI½øÐÐÏêϸ½éÉÜ¡£
1. http.Server
ÔÚNode.jsÖУ¬HTTP·þÎñÆ÷ÊÇÖ¸http.Server¶ÔÏó£¬ÓÃNode.js×öµÄËùÓлùÓÚHTTPÐÒéµÄϵͳ£¬ÈçÍøÕ¾¡¢Éç½»Ó¦ÓÃÉõÖÁ´úÀí·þÎñÆ÷£¬¶¼ÊÇ»ùÓÚhttp.ServerʵÏֵġ£ËüÌṩÁËÒ»Ì×·â×°¼¶±ðºÜµÍµÄAPI£¬½ö½öÊÇÁ÷¿ØÖƺͼòµ¥µÄÏûÏ¢½âÎö£¬ËùÓеĸ߲㹦Äܶ¼ÒªÍ¨¹ýËüµÄ½Ó¿ÚÀ´ÊµÏÖ¡£´´½¨http.Server¶ÔÏóµÄÓï·¨ÈçÏ£º
Var server = http.createServer();
ÔÚÉÏÊö´úÂëÖУ¬Ê¹ÓÃcreatServer()º¯Êý´´½¨µÄserver¶ÔÏó¾ÍÊÇÒ»¸öhttp.Server¶ÔÏó¡£
http.ServerÊÇÒ»¸ö»ùÓÚʼþµÄHTTP·þÎñÆ÷£¬¼Ì³Ð×ÔEventEmitter,ËùÓеÄÇëÇó¶¼±»·âװΪ¶ÀÁ¢µÄʼþ£¬¿ª·¢ÕßÖ»ÐèÒª¶ÔËüµÄʼþ±àдÏàÓ¦º¯Êý¼´¿ÉʵÏÖHTTP·þÎñÆ÷µÄËùÓй¦ÄÜ¡£http.ServerÌṩÁËһЩº¯Êý£¬¾ßÌåÈçÏ£º
(1)server.close([callback])£º·þÎñÆ÷Í£Ö¹ÒѾ¿ªÊ¼µÄ¼àÌý¡£
(2) server.listen(port[, hostname][, backlog][, callback])¡£
server.listen²ÎÊý˵Ã÷ÈçÏ£º
¡ñport£ºÖ¸¶¨¼àÌýµÄ¶Ë¿Ú¡£
¡ñ hostname£ºÖ¸¶¨Ö÷»úÃû¡£
¡ñbacklog£ºÖ¸¶¨±»ÔÊÐí½øÐÐÅŶӵÄ×î´ó´ý´¦ÀíÁ¬½ÓÊý£¬Ä¬ÈÏÊÇ511¡£
¡ñcallback£ºÖ¸¶¨¸Ã·þÎñÆ÷ÒѾ¿ªÊ¼ÔÚÖ¸¶¨µÄ¶Ë¿ÚÉϼàÌýʱ£¬ÒªÖ´ÐеĻص÷´¦Àíº¯Êý¡£
£¨3£©)server listen(handle[,callback])ºÍserver.listen(path[,callback])£º¼àÌýÎļþϵͳµÄÁ¬½Ó¡£µÚÒ»¸öÊǼàÌýÒÑ´ò¿ªÎļþÃèÊö¾ä±ú£¬µÚ¶þ¸öÊÇÒª¼àÌýÒ»¸öÎļþµÄ·¾¶¡£³ý´ËÖ®Í⣬http.Server »¹ÌṩÁË3¸öʼþ£¬¾ßÌåÈçÏ£º
£¨1£©request£ºµ±¿Í»§¶ËÇëÇóµ½À´Ê±£¬¸Ãʼþ±»´¥·¢£¬ÌṩÁ½¸ö²ÎÊýreqºÍres£¬·Ö±ðΪhttp.ServerRequestºÍhttp.ServerResponseµÄʵÀý£¬±íʾÇëÇóºÍÏìÓ¦ÐÅÏ¢¡£
£¨2£©connection£ºµ±TCPÁ¬½Ó½¨Á¢Ê±£¬¸Ãʼþ±»´¥·¢£¬Ìṩһ¸ö²ÎÊýsocket,Ϊnet.Socket µÄʵÀý¡£connectionʼþµÄÁ£¶ÈÒª´óÓÚrequest,ÒòΪ¿Í»§¶ËÔÚKeep-AliveģʽÏ¿ÉÄÜ»áÔÚͬһ¸öÁ¬½ÓÄÚ·¢ËͶà´ÎÇëÇó¡£
£¨3£©close£ºµ±·þÎñÆ÷¹Ø±Õʱ£¬¸Ãʼþ±»´¥·¢¡£×¢Òâ²»ÊÇÔÚÓû§Á¬½Ó¶Ï¿ªÊ±¡£³ý´ËÖ®Íâ,»¹ÓÐcheckContinue¡¢upgrade¡¢clientErrorʼþ,ͨ³£²»ÐèÒª¹ØÐÄ,Ö»ÓÐÔÚʵÏÖ¸´ÔÓµÄHTTP·þÎñÆ÷ʱ²Å»áÓõ½¡£
2. http.IncomingMessage ¶ÔÏó
ÔÚHTTP ·þÎñÆ÷ºÍ¿Í»§¶Ë¶¼»á´´½¨http.IncomingMessage¶ÔÏó£¬ËüÒ»°ãÓÉhttp.ServerµÄrequestʼþ·¢ËÍ£¬×÷ΪµÚÒ»¸ö²ÎÊý´«µÝ£¬Í¨³£¼ò³ÆÎªrequest»òreq¡£ÔÚ·¢ËÍHTTP ÇëÇóʱ,»á·¢ËÍÇëÇó±¨ÎÄ£¬http.IncomingMessage¶ÔÏóʵÏÖÁËÒ»¸ö¿É¶ÁÁ÷£¬ÔÚ·þÎñÆ÷¶Ë£¬http.IncomingMessage ÌṩÁËÒ»¸öclose ʼþ£¬Óû§µ±Ç°ÇëÇó½áÊøÊ±£¬Ò²¾ÍÊǵײãµÄÌ×½Ó×Ö±»¹Ø±Õʱ¸Ãʼþ±»´¥·¢¡£ÁíÍ⣬http.IncomingMessage¶ÔÏóÖл¹ÌṩÁËһЩº¯ÊýºÍÊôÐÔ£¬ÓÃÀ´»ñÈ¡¿Í»§¶ËÇëÇóºÍ·þÎñÆ÷¶ËÏìÓ¦µÄһЩÐÅÏ¢£¬ÈçϱíËùʾ¡£
±í7-2 http.IncomingMessage ¶ÔÏóµÄ³£Óú¯ÊýºÍÊôÐÔ
|
º¯Êý&ÊôÐÔ |
˵Ã÷ |
|
message.headers |
°üº¬ÁËËæÇëÇó/»ØÓ¦·¢Ë͵ıêÍ·µÄÒ»¸ö¶ÔÏó |
|
message.httpVersion |
Ö¸¶¨ÓÃÓÚ¹¹½¨¿Í»§¶ËÇëÇó/ÏìÓ¦µÄHTTP°æ±¾ |
|
message.setTimeout(msccs, callback) |
ÉèÖÃÁ¬½ÓµÄÒÔºÁÃëΪµ¥Î»µÄÌ×½Ó×Ö³¬Ê±Ê±¼ä£¬Á¬Í¬Ò»¸öÈç¹û·¢Éú³¬Ê±Ê±±»Ö´ÐеĻص÷º¯Êý |
|
message.method |
Ö¸¶¨ÓÃÓÚÇëÇó/ÏìÓ¦µÄ·½·¨ |
|
message. statusCode |
Ö¸¶¨À´×Ô·þÎñÆ÷µÄ3λÊý״̬Âë¡£´ËÊôÐÔÖ»ÔÚ´¦Àí·þÎñÆ÷ÏìÓ¦µÄHTTP¿Í»§¶ËÉÏÓÐЧ |
|
message.socket |
ÕâÊÇÒ»¸öÖ¸Ïònet.Socket¶ÔÏóµÄ¾ä±ú£¬ÓÃÀ´Óë¿Í»§¶Ë/·þÎñÆ÷ͨÐÅ |
|
message.url |
·¢Ë͵½·þÎñÆ÷µÄURL×Ö·û´®£¬Ö»ÔÚ´¦Àí·þÎñÆ÷ÖÐÓÐЧ |
3. http.ServerResponse
htp.ServerResponseÊÇ·µ»Ø¸ø¿Í»§¶ËµÄÐÅÏ¢£¬¾ö¶¨ÁËÓû§×îÖÕÄÜ¿´µ½µÄ½á¹û¡£ËüÒ²ÊÇÓÉhttp.ServerµÄrequestʼþ·¢Ë͵ģ¬×÷ΪµÚ¶þ¸ö²ÎÊý´«µÝ£¬Ò»°ã¼ò³ÆÎªresponse»òres¡£
http.ServerResponseÊÇÒ»¸ö¿ÉдÁ÷£¬ÓÃÀ´¸ø¿Í»§¶ËµÄSocket·¢ËÍÏìÓ¦±¨ÎÄ£¬ÔÚ·þÎñÆ÷×ö³öÏìӦ֮ǰ»á·¢ËÍÏìÓ¦±¨ÎÄ,http.ServerResponseÖÐÓÐ3¸öÖØÒªµÄ³ÉÔ±º¯Êý£¬Ç°Á½¸öÓÃÓÚ·µ»Ø¶ÔÓ¦ÏìÓ¦±¨ÎĵÄÏìӦͷºÍÏìÓ¦ÄÚÈÝ£¬×îºóÒ»¸öÓÃÓÚ½áÊøÇëÇ󣬾ßÌåÈçÏ£º
(1)response.writeHead(statusCode,[headers])£ºÏòÇëÇóµÄ¿Í»§¶Ë·¢ËÍÏìӦͷ¡£status-CodeÊÇHTTP״̬Â룬Èç200(ÇëÇó³É¹¦)¡¢404(δÕÒµ½)µÈ¡£headersÊÇÒ»¸öÀàËÆ¹ØÁªÊý×éµÄ¶ÔÏ󣬱íʾÏìӦͷµÄÿ¸öÊôÐÔ¡£¸Ãº¯ÊýÔÚÒ»¸öÇëÇóÄÚ×î¶àÖ»Äܵ÷ÓÃÒ»´Î£¬Èç¹û²»µ÷Óã¬Ôò»á×Ô¶¯Éú³ÉÒ»¸öÏìӦͷ¡£
(2)response.write(data,[encoding])£ºÏòÇëÇóµÄ¿Í»§¶Ë·¢ËÍÏìÓ¦ÄÚÈÝ¡£dataÊÇÒ»¸öBuffer»ò×Ö·û´®£¬±íʾҪ·¢Ë͵ÄÄÚÈÝ¡£Èç¹ûdataÊÇ×Ö·û´®£¬ÄÇôÐèÒªÖ¸¶¨encodingÀ´ËµÃ÷ËüµÄ±àÂ뷽ʽ£¬Ä¬ÈÏÊÇutf-8¡£ÔÚresponse.end µ÷ÓÃ֮ǰ£¬response.write¿ÉÒÔ±»¶à´Îµ÷Óá£
(3)response.end([data],[encoding])£º½áÊøÏìÓ¦£¬¸æÖª¿Í»§¶ËËùÓз¢ËÍÒѾÍê³É¡£µ±ËùÓзµ»ØµÄÄÚÈÝ·¢ËÍÍê±Ïʱ£¬¸Ãº¯Êý±ØÐë±»µ÷ÓÃÒ»´Î¡£Ëü½ÓÊÕÁ½¸ö¿ÉÑ¡²ÎÊý£¬ÒâÒåºÍresponse.writeÏàͬ¡£Èç¹û²»µ÷Óøú¯Êý£¬¿Í»§¶Ë½«ÓÀÔ¶´¦Óڵȴý״̬¡£³ýÉÏÊö³ÉÔ±º¯ÊýÍ⣬»¹ÓÐһЩº¯ÊýºÍÊôÐԿɹ©¿ª·¢ÕßʹÓã¬Èç±í7-3Ëùʾ¡£
±í7-3 http.ServerResponseÆäËûº¯ÊýºÍÊôÐÔ
|
º¯Êý&ÊôÐÔ |
˵Ã÷ |
|
response.add Trailers(headers) |
½«HTTPÎ²Ëæ±êͷдÈËÏìÓ¦µÄ½áÊø´¦ |
|
response.finished |
ĬÈÏΪfalse,µ÷ÓÃend)µÄÊý·½·¨ºó½á¹ûΪ true |
|
response.getHeader(name) |
»ñÈ¡ÒÑÔÚÏìÓ¦ÖÐÉèÖõÄHTTP±êÍ·µÄÖµ |
|
response.headersSent |
Èç¹û±êÍ·Òѱ»·¢ËÍ£¬Îªtrue£»·ñÔòΪfalse |
|
response.removeHeader(name) |
ÒÆ³ýÒÑÔÚÏìÓ¦ÖÐÉèÖõÄÒ»¸öHTTP±êÍ· |
|
response.sendDate |
Èç¹ûÉèÖÃΪtrue£¬ÔòData±êÍ·µÄÊÇ×Ô¶¯Éú³ÉµÄ£¬²¢×÷ΪÏìÓ¦µÄÒ»²¿·Ö·¢ËÍ |
|
response.setHeader(name, value) |
ÉèÖÃÒ»¸öÌØ¶¨µÄ±êÍ·Öµ |
|
response.setTimeout(msecs, callback) |
ÉèÖÿͻ§¶ËÁ¬½ÓµÄÌ×½Ó×Ö³¬Ê±Ê±¼ä£¬ÒÔºÁÃë¼Æ£¬´øÓÐÒ»¸öÈç¹û·¢Éú³¬Ê±½«±»Ö´ÐеĻص÷º¯Êý |
|
response.statusCode |
ÎÞÐëÏÔʽµØÐ´Èë±êÍ·À´Ö¸¶¨ÏìӦ״̬Âë |
|
response.statusMessage |
µ±Ê¹ÓÃÒþʽÏûϢͷ²¢ÇÒÓÎϢͷ±»Ë¢ÐÂʱ£¬Õâ¸öÊôÐÔ¿ØÖƵÄÏûϢ״̬½«±»·¢Ë͵½¿Í»§¶Ë |
|
response.writeContinueO |
·¢ËÍÒ»¸öHTTP/1.1100¼ÌÐøÏûÏ¢¸ø¿Í»§¶Ë£¬±íʾÇëÇóÖ÷ÌåÓ¦¸Ã·¢ËÍ |
HTTPͨÐÅ»úÖÆÖеÄÒ»´ÎÍêÕûͨÐŹý³ÌµÄ7¸ö²½Öè
HTTPSʹÓÃʲô¼ÓÃÜ·½Ê½£¿¶Ô³Æ¼ÓÃÜ»¹ÊǷǶԳƼÓÃÜ?
HTTPµÄ¹¤×÷ÔÀí£º¹¤×÷¹ý³Ì¿ÉÒÔ·ÖΪÄ½£¿
ʲôÊÇHTTPÐÒ飿ÈçºÎ²é¿´HTTPÏûÏ¢£¿
ÀÖÓãµç¾ºHTML+ǰ¶Ë¿ª·¢Åàѵ
±±¾©Ð£Çø