Node.js рдПрдХ рд╕рд░реНрд╡рд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИред рд╕рд░реНрд╡рд░ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рд╕реЗ, рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдФрд░ рдХреБрд╢рд▓рддрд╛ рд╕реЗред Node.js рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЖрдард╡рд╛рдВ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛ рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ HTTP рдФрд░ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

[рд╣рдо рдЖрдкрдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ] рдЪрдХреНрд░ рдХреЗ рдЕрдиреНрдп рднрд╛рдЧрднрд╛рдЧ 1:
рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЖрд░рдВрдн рдХрд░рдирд╛рднрд╛рдЧ 2:
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, V8, рдХреБрдЫ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЧреБрд░рднрд╛рдЧ 3:
рд╣реЛрд╕реНрдЯрд┐рдВрдЧ, рдЖрд░рдИрдкреАрдПрд▓, рдХрдВрд╕реЛрд▓, рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВрднрд╛рдЧ 4:
npm, package.json рдФрд░ package-lock.json рдлрд╛рдЗрд▓реЗрдВрднрд╛рдЧ 5:
npm рдФрд░ npxрднрд╛рдЧ 6:
рдИрд╡реЗрдВрдЯ рд▓реВрдк, рдХреЙрд▓ рд╕реНрдЯреИрдХ, рдЯрд╛рдЗрдорд░рднрд╛рдЧ 7:
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрднрд╛рдЧ 8:
Node.js рдЧрд╛рдЗрдб, рднрд╛рдЧ 8: HTTP рдФрд░ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓рднрд╛рдЧ 9:
Node.js рдЧрд╛рдЗрдб, рднрд╛рдЧ 9: рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛рднрд╛рдЧ 10:
Node.js рдЧрд╛рдЗрдб, рднрд╛рдЧ 10: рдорд╛рдирдХ рдореЙрдбреНрдпреВрд▓, рд╕реНрдЯреНрд░реАрдо, рдбреЗрдЯрд╛рдмреЗрд╕, NODE_ENVNode.js рдЧрд╛рдЗрдб рдХреА рдкреВрд░реНрдг рдкреАрдбреАрдПрдл HTTP рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ HTTP / 1.1 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХрд╛ рдХрднреА рднреА рдЖрдИрдЯреА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╣реБрдЖ рд╣реИ, рддреЛ рдЖрдкрд╕реЗ рдкреВрдЫрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдХреБрдЫ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдВрдЯрд░ рджрдмрд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЬреЛ рдХреЛрдИ рднреА рдРрд╕реЗ рдкреНрд░рд╢реНрди рдкреВрдЫрддрд╛ рд╣реИ, рд╡рд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд╕рд░рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред
рдпрд╣ рдкреНрд░рд╢реНрди рдХрдИ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдкрд░ рдЫреВрддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдорд╛рдирд╡ рдЬрд╛рддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдкреВрд░реА рджреБрдирд┐рдпрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред
тЦН рдПрдЪрдЯреАрдЯреАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓
рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рд╕реЗ рдЕрдкрдиреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рджрд░реНрдЬ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЦреЛрдЬ рдЗрдВрдЬрди рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдпреВрдЖрд░рдПрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдПрдХ рд╕рд╛рдЗрдЯ рдкрддрд╛ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐
flaviocopes.com
, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрд╛рд░ рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕ рдкрддреЗ рдХреЛ
http://flaviocopes.com
рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рд╣рдо рдпрд╣рд╛рдВ рдЬрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдореИрдХрдУрдПрд╕ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред
Phase DNS рд▓реБрдХрдЕрдк рдЪрд░рдг
рдЗрд╕рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рдкрддреЗ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП DNS рд▓реБрдХрдЕрдк рдСрдкрд░реЗрд╢рди (DNS рд▓реБрдХрдЕрдк) рдХрд░рддрд╛ рд╣реИред рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рджрд░реНрдЬ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдирд╛рдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдиреЗрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЬреЛ 222.324.3.1 (рдЖрдИрдкреАрд╡реА 4 рдХреЗ рд▓рд┐рдП) рдЬреИрд╕реЗ рдирдВрдмрд░реЛрдВ рдХреЗ рд╕реЗрдЯ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реБрдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрдерд╛рдиреАрдп DNS рдХреИрд╢ рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЧрдИ рд╣реИред Chrome рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрддреЗ рдХреЛ рджрд░реНрдЬ рдХрд░рдХреЗ DNS рдХреИрд╢ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ:
chrome://net-internals/#dns
ред
рдпрджрд┐ рдХреИрд╢ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП POSIX
gethostbyname
рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
тЦН gethostbyname рдлрд╝рдВрдХреНрд╢рди
gethostbyname
рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ
hosts
рдЬрд╛рдВрдЪ
hosts
, рдЬреЛ рдХрд┐ macOS рдпрд╛ рд▓рд┐рдирдХреНрд╕ рдкрд░, рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд░реНрд╡рд░ рдкрддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
/etc/hosts
рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рд╕реНрдерд╛рдиреАрдп рд╕рд╛рдзрди рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо DNS рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдРрд╕реЗ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдкрддреЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред
рдпрд╣рд╛рдБ рд▓реЛрдХрдкреНрд░рд┐рдп DNS рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╣реИрдВ:
- 8.8.8.8: Google DNS рд╕рд░реНрд╡рд░ред
- 1.1.1.1: CloudFlare DNS рд╕рд░реНрд╡рд░ред
рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдЕрдкрдиреЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП DNS рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдмреНрд░рд╛рдЙрдЬрд╝рд░ UDP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ DNS рдХреНрд╡реЗрд░реА рдХрд░рддрд╛ рд╣реИред
рдЯреАрд╕реАрдкреА рдФрд░ рдпреВрдбреАрдкреА рдХрдВрдкреНрдпреВрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВред рд╡реЗ рд╕рдорд╛рди рд╡реИрдЪрд╛рд░рд┐рдХ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯреАрд╕реАрдкреА рдПрдХ рдХрдиреЗрдХреНрд╢рди-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рдФрд░ рдпреВрдбреАрдкреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИ, рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпреВрдбреАрдкреА рдкрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреЗ рдбреЛрдореЗрди рдирд╛рдо рдХреЗ рдЕрдиреБрд░реВрдк рдЖрдИрдкреА рдкрддрд╛ рдбреАрдПрдирдПрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рдХреИрд╢ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╣ рд░реВрдЯ DNS рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдЧрд╛ред рд░реВрдЯ DNS рд╕рд░реНрд╡рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ 13 рд╕рд░реНрд╡рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдкреВрд░реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд░реВрдЯ DNS рд╕рд░реНрд╡рд░ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рднреА рдореМрдЬреВрджрд╛ рдбреЛрдореЗрди рдирд╛рдореЛрдВ рдФрд░ рдЖрдИрдкреА рдкрддреЛрдВ рдХреЗ рдмреАрдЪ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдорд╛рди рд╕рд░реНрд╡рд░ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп DNS рд╕рд░реНрд╡рд░ рдЬреИрд╕реЗ .com, .it, .pizza, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкрддреЗ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд░реВрдЯ DNS рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдбреЛрдореЗрди рдХреЗ DNS рд╕рд░реНрд╡рд░ рдХреЛ рддрдерд╛рдХрдерд┐рдд TLD рд╕рд░реНрд╡рд░ (рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдбреЛрдореЗрди рд╕реЗ) рддрдХ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░
flaviocopes.com
рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА рдкрддреЗ рдХреА
flaviocopes.com
рд╣реИред рд░реВрдЯ DNS рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реА, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ .com рдЬрд╝реЛрди рдХреЗ рд▓рд┐рдП TLD рд╕рд░реНрд╡рд░ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЕрдм рдпрд╣ рдкрддрд╛ рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдЖрдкрдХреЛ .com рдЬрд╝реЛрди рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп URL рдХрд╛ IP рдкрддрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд░реВрдЯ DNS рд╕рд░реНрд╡рд░ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред
TLD рд╕рд░реНрд╡рд░ рдореЗрдВ рдирд╛рдо рд╕рд░реНрд╡рд░ (рдирд╛рдо рд╕рд░реНрд╡рд░, NS) рдХреЗ рдЖрдИрдкреА рдкрддреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреА рдорджрдж рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдпреВрдЖрд░рдПрд▓ рдкрддреЗ рд╕реЗ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдирдПрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд╛рдВ рд╕реЗ рдорд┐рд▓рддреА рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдбреЛрдореЗрди рдЦрд░реАрджрддреЗ рд╣реИрдВ, рддреЛ рдбреЛрдореЗрди рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╛рдо рд╕рд░реНрд╡рд░ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдПрдХ рд╕рдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдмрджрд▓рддреЗ рд╣реИрдВред
рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╕рд░реНрд╡рд░ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рдлрд▓рддрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдХрдИ рд╕рд░реНрд╡рд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдкрд╛рд╕ рдпреЗ рдкрддреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
- ns1.dreamhost.com
- ns2.dreamhost.com
- ns3.dreamhost.com
URL рджреНрд╡рд╛рд░рд╛ IP рдкрддрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдВрдд рдореЗрдВ, рд╡реЗ рдРрд╕реЗ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рдУрд░ рд░реБрдЦ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ IP рдкрддреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм, рдЬрдм рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП URL рдХреЗ рдкреАрдЫреЗ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд╣реЛ рдЧрдП, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
TCP рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рд╕рд░реНрд╡рд░ рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рдЧреНрд░рд╛рд╣рдХ рдЗрд╕реЗ рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдХреБрдЫ рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡реЗ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛
рдПрдХ рдЕрдиреБрд░реЛрдз рдПрдХ рдкрд╛рда рдЦрдВрдб рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рддреАрди рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:
- рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ
- рд╣реЗрдбрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред
- рд╢рд░реАрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред
рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ
рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рдПрдХрд▓ рдкрд╛рда рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ:
- HTTP рд╡рд┐рдзрд┐ред
- рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдкрддрд╛
- рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрд╕реНрдХрд░рдгред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
GET / HTTP/1.1
рд╣реЗрдбрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
рдЕрдиреБрд░реЛрдз рд╢реАрд░реНрд╖рд▓реЗрдЦ
:
рдПрдХ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
:
ред 2 рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдб рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ
Host
рдФрд░ рджреВрд╕рд░рд╛
Connection
ред рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред
рд╢реАрд░реНрд╖рдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
Host: flaviocopes.com Connection: close
Host
рдлрд╝реАрд▓реНрдб рдЙрд╕ рдбреЛрдореЗрди рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред
close
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ
Connection
рдлрд╝реАрд▓реНрдб рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЕрдиреНрдп рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
Origin
Accept
Accept-Encoding
Cookie
Cache-Control
Dnt
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдИ рдФрд░ рднреА рд╣реИрдВред
рдЕрдиреБрд░реЛрдз рд╢реАрд░реНрд╖рд▓реЗрдЦ рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рд╢рд░реАрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХрд╛ рдЙрдкрдпреЛрдЧ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдо рдПрдХ GET рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
тЦН рдЙрддреНрддрд░
рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╣ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдФрд░ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧреА:
200 OK
рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ, рддреЛ рдЕрдиреНрдп рдХреЛрдб рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:
404 Not Found
403 Forbidden
301 Moved Permanently
500 Internal Server Error
304 Not Modified
401 Unauthorized
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ HTTP рд╣реЗрдбрд░ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд┐рдХрд╛рдп рд╢рд╛рдорд┐рд▓ рд╣реИ (рдЬреЛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, HTML рдХреЛрдб рд╣реЛрдЧрд╛)ред
HTML рдкрд╛рд░реНрд╕рд┐рдВрдЧ
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд┐рд╕рдХреЗ рд╢рд░реАрд░ рдореЗрдВ HTML рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣ рдкреГрд╖реНрда рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП, рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдРрд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:
- CSS рдлрд╛рдЗрд▓реЗрдВред
- рдЫрд╡рд┐ред
- рд╡реЗрдмрдкреЗрдЬ рдЖрдЗрдХрди (рдлрд╝реЗрд╡рд┐рдХреЙрди)ред
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдкреГрд╖реНрда рд╣рдорд╛рд░реА рдмрд╛рддрдЪреАрдд рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ HTML рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдЕрдм, рдЬрдм рд╣рдордиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ, рддреЛ рдЖрдк рд╕рд╛рдордЧреНрд░реА
рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ
рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ First Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдкрд░ рдПрдХ рдирдпрд╛ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред
Node.js рдХреЗ рд╕рд╛рде HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛
Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреБрдХреНрдд
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг
https рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ, HTTPS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
ред рдЬреАрдИрдЯреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛
рдпрд╣рд╛рдВ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GET рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
const https = require('https') const options = { hostname: 'flaviocopes.com', port: 443, path: '/todos', method: 'GET' } const req = https.request(options, (res) => { console.log(`statusCode: ${res.statusCode}`) res.on('data', (d) => { process.stdout.write(d) }) }) req.on('error', (error) => { console.error(error) }) req.end()
тЦНPOST рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрди
рдпрд╣рд╛рдБ Node.js рд╕реЗ POST рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
const https = require('https') const data = JSON.stringify({ todo: 'Buy the milk' }) const options = { hostname: 'flaviocopes.com', port: 443, path: '/todos', method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': data.length } } const req = https.request(options, (res) => { console.log(`statusCode: ${res.statusCode}`) res.on('data', (d) => { process.stdout.write(d) }) }) req.on('error', (error) => { console.error(error) }) req.write(data) req.end()
тЦНPUT рдФрд░ DELETE рдХреНрд╡реЗрд░реАрдЬрд╝
рдРрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдорд╛рди рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╢рдмреНрджрд╛рд░реНрде рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЦреНрдп рдЕрдВрддрд░,
options
рд╡рд╕реНрддреБ рдХреА
method
рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд╣реИред
ред рдПрдХреНрд╕рд┐рдпреЛрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Node.js рдореЗрдВ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди
Axios рдПрдХ рдмрд╣реБрдд рд╣реА рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдореЗрдВ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ IE рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, IE8 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ), рдФрд░ Node.js рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд╛рджреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рдореЗрдВ рдорд╛рдирдХ рддрдВрддреНрд░ рдкрд░ рдХреБрдЫ рд▓рд╛рдн рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдкреАрдЖрдИ Fetch рдкрд░ред рдЗрд╕рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:
- рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди (рдЖрдкрдХреЛ Fetch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
- рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
- рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
- рд╕реАрдПрд╕рдЖрд░рдПрдл рд╣рдорд▓реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реБрд░рдХреНрд╖рд╛ред
- рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рдЧрддрд┐ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдкреНрд░рд╛рд╡рдзрд╛рди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
- JSON рдбреЗрдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
- Node.js рдореЗрдВ рдиреМрдХрд░рд┐рдпрд╛рдВ
рд╕реНрдерд╛рдкрдирд╛
Axios рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
npm install axios
рдпрд╛рд░реНрди рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
yarn add axios
рдЖрдк
unpkg.com
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреЗрдЬ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
рдПрдХреНрд╕рд┐рд╕ рдПрдкреАрдЖрдИ
рдЖрдк
axios
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTTP рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
axios({ url: 'https://dog.ceo/api/breeds/list/all', method: 'get', data: { foo: 'bar' } })
рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ:
рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╣реИ рдЬреИрд╕реЗ jQuery
$.post()
рдмрдЬрд╛рдп
$.get()
рдФрд░
$.post()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Axios рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ GET рдФрд░ POST рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
axios.delete()
axios.put()
axios.patch()
axios.options()
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкрд╛рд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмреЙрдбреА рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ HTTP рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ:
рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдЖрдзреБрдирд┐рдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ / рд╡реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕рд┐рдпреЛрд╕ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдг, Node.js рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ
рдбреЙрдЧ API рд╕реЗ рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓реЛрдВ рдХреА рд╕реВрдЪреА рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛
рд╣реИ ред рдпрд╣рд╛рдБ
axios.get()
рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреЛ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:
const axios = require('axios') const getBreeds = async () => { try { return await axios.get('https://dog.ceo/api/breeds/list/all') } catch (error) { console.error(error) } } const countBreeds = async () => { const breeds = await getBreeds() if (breeds.data.message) { console.log(`Got ${Object.entries(breeds.data.message).length} breeds`) } } countBreeds()
рд╡рд╛рджреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╣реА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
const axios = require('axios') const getBreeds = () => { try { return axios.get('https://dog.ceo/api/breeds/list/all') } catch (error) { console.error(error) } } const countBreeds = async () => { const breeds = getBreeds() .then(response => { if (response.data.message) { console.log( `Got ${Object.entries(response.data.message).length} breeds` ) } }) .catch(error => { console.log(error) }) } countBreeds()
рдЬреАрдИрдЯреА рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
GET рдЕрдиреБрд░реЛрдз рдореЗрдВ рдРрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ URL рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
https:
Axios рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдХреНрд╡реЗрд░реА рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
axios.get('https:
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреБрдг рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
axios.get('https://site.com/', { params: { foo: 'bar' } })
рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз
POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ
axios.get()
рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдп,
axios.post()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
axios.post('https:
рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ,
post
рд╡рд┐рдзрд┐ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ:
axios.post('https://site.com/', { foo: 'bar' })
Node.js рдореЗрдВ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
WebSocket HTTP рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рджреНрд╡рд┐-рджрд┐рд╢рд╛рддреНрдордХ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдЦреБрд▓рд╛ рд░рд╣рддрд╛ рд╣реИ, рдЬреЛ рдХрдо рд╡рд┐рд▓рдВрдмрддрд╛ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЛрдб рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрд╣реБрдд рддреЗрдЬ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИред
WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред
Ences HTTP рдЕрдВрддрд░
HTTP рдФрд░ WebSocket рдмрд╣реБрдд рдЕрд▓рдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред HTTP "рдЕрдиреБрд░реЛрдз-рдкреНрд░рддрд┐рд╕рд╛рдж" рдореЙрдбрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреБрдЫ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред WebSocket рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН:
- рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рд╕рд░реНрд╡рд░ рдЕрдкрдиреА рдкрд╣рд▓ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред
- рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╕рдВрджреЗрд╢ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдореЗрдВ рдХрдо рд╡рд┐рд▓рдВрдмрддрд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред
WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрди рдЪреИрдирд▓реЛрдВ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИ рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЦреБрд▓реЗ рд░рд╣рддреЗ рд╣реИрдВред рдмрджрд▓реЗ рдореЗрдВ, HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рд╕рд╛рдордпрд┐рдХ рд╕рдВрдЪрд╛рд░ рд╕рддреНрд░реЛрдВ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИред рдЙрд╕реА рд╕рдордп, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╡реЗрдмрд╕рдХреЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
Ocket WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг
WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (
ws://
URI рд╕реНрдХреАрдо) рдХрд╛ рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ рд╕реБрд░рдХреНрд╖рд╛,
http://
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
ws://
рдХрд╛ рдЙрдкрдпреЛрдЧ
ws://
рд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реБрдП -
wss://
ред
рдПрдХ WebSocket рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдирд╛
WebSocket рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
const url = 'wss://myserver.com/something' const connection = new WebSocket(url)
рдПрдХ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж,
open
рдШрдЯрдирд╛ рдХреЛ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк
connection
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА
onopen
рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
connection.onopen = () => {
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП,
onerror
рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
connection.onerror = error => { console.log(`WebSocket error: ${error}`) }
рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛
рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ WebSocket рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрдиреЛрдкреЗрди
onopen
рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
connection.onopen = () => { connection.send('hey') }
тЦН рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛
рд╕рд░реНрд╡рд░ рд╕реЗ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдУрдирдореЗрдЬрд╝реЗрдЬ
onmessage
рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ
message
рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
connection.onmessage = e => { console.log(e.data) }
J Node.js рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ WebSocket рд╕рд░реНрд╡рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
Node.js рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ WebSocket рд╕рд░реНрд╡рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓реЛрдХрдкреНрд░рд┐рдп
ws рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд╕рд╛рде рд╣реА рджреЛ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рднреАред
рдкрд╣рд▓реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд░рдВрдн рдХрд░рдХреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
yarn init yarn add ws
WebSocket рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдмрд╣реБрдд рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ:
constWebSocket = require('ws') const wss = newWebSocket.Server({ port: 8080 }) wss.on('connection', ws => { ws.on('message', message => { console.log(`Received message => ${message}`) }) ws.send('ho!') })
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдирдпрд╛ рд╕рд░реНрд╡рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗрдмрд╕реЙрдлреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреЛрд░реНрдЯ 8080 рдкрд░ рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреЙрд▓рдмреИрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ
ho!
рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ WebSocket рд╕рд░реНрд╡рд░
рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░
рдпрд╣рд╛рдБ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдЖрдЬ рд╣рдордиреЗ Node.js рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рддрдВрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдорд╛рди рддрдВрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛рдПрдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдЕрдЧрд▓рд╛ рд╡рд┐рд╖рдп рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛?