Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
http_basics
Search
Yosuke Furukawa
PRO
February 21, 2017
Programming
1k
2
Share
http_basics
Node girls で話したhttp basics の話です
Yosuke Furukawa
PRO
February 21, 2017
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
220
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.1k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.7k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
340
Removing Corepack
yosuke_furukawa
PRO
9
1.9k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.1k
Strip Types と Storage
yosuke_furukawa
PRO
4
500
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
2.9k
Other Decks in Programming
See All in Programming
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
3
970
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
2
210
Back to the roots of date
jinroq
0
900
ReactとSvelteのその先、Ripple-TS / Beyond React and Svelte: Ripple-TS
ssssota
2
360
次世代リンターで探る、tsgo 時代における型認識カスタムルールの現実解
ytakahashii
1
350
KMP × Kotlin 2.3 - How Android Got Slower While iOS Builds Improved by 47%
rio432
0
230
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
170
20260514_its_the_context_window_stupid.pdf
heita
0
1.1k
AI時代になぜ書くのか
mutsumix
0
430
1人1案件のプロダクトエンジニア時代に、"プロセス監督"としてチャレンジしたこと
non0113
0
120
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
1
2.1k
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
3.2k
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
370
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The SEO Collaboration Effect
kristinabergwall1
1
450
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
520
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Building Applications with DynamoDB
mza
96
7k
Building Adaptive Systems
keathley
44
3k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
190
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
280
Transcript
HTTP Basics node_girls @ ੨ࢁ G’s Cafe
Twitter: @yosuke_furukawa ϦΫϧʔτςΫϊϩδʔζॴଐ γχΞιϑτΣΞΤϯδχΞ
HTTP Basics
લͷ NodeSchool ͰݴΘΕͨ ͜ͱ
͕͍͜͜͠Node.js /PEFKTͬͯॻ͍ͯΔͱOHJOYͷઃఆॻ͍ͯΔ Έ͍ͨͳؾʹͳΔΜͰ͢ΑͶʔ
yes !!! love http layer !!!! const http = require('http');
const server = http.createServer((req, res) => { res.writeHead(200); res.end('Hello World'); }); server.listen(3000, () => { console.log('listening'); });
ٯʹݴ͏ͱ /PEFKTͬͯॻ͍ͯΔͱOHJOYͷઃఆॻ͍ͯΔ Έ͍ͨͳؾʹͳΔΜͰ͢ΑͶʔ )551ͷϨΠϠΛֶͿνϟϯεʂʂʂʂ
Node HTTP Basics
ͦͦ HTTP ͱ?? GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 Host: www.example.com
Accept-Language: en, mi HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain Hello World! My payload includes a trailing CRLF. 3FRVFTU 3FTQPOTF
ͦͦ HTTP ͱ?? GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 Host: www.example.com
Accept-Language: en, mi HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain Hello World! My payload includes a trailing CRLF. 3FRVFTU 3FTQPOTF 3FRVFTU-JOF શͯͷݩɺϝιουɺύεɺϓϩτ ίϧόʔδϣϯͰهड़ 3FRVFTU)FBEFS ϦΫΤετʹର͢Δϝλใ
ͦͦ HTTP ͱ?? GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 Host: www.example.com
Accept-Language: en, mi HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain Hello World! My payload includes a trailing CRLF. 3FRVFTU 3FTQPOTF 3FTQPOTF-JOF ϓϩτίϧόʔδϣϯͱTUBUVTDPEF 3FTQPOTF)FBEFS ϨεϙϯεͷϝλใɺαΠζΒ ίϯςϯτλΠϓΒɻ 3FTQPOTF#PEZ Ϩεϙϯεͷຊମɺ͜͜ʹ)5.- +40/ͳͲ͕Δ
HTTP TCP ͷ্ʹ͋ΔΞϓϦ έʔγϣϯϨΠϠͷϓϩτίϧ http://www.linuxacademy.ne.jp/lablog/infrastructure/155/
͡Ό͋TCPͷϨΠϠͰHTTP ࡞ͬͯΈͨΒ͏গ͠ཧղ͕ ਂ·ΔͷͰʁ
TCPͷϞδϡʔϧnetΛ͏ const net = require('net'); const CRLF = '\r\n'; const
server = net.createServer((connection) => { console.log('connect!!'); connection.write('HTTP/1.1 200 OK' + CRLF); connection.write('Set-Cookie: test=123' + CRLF); connection.write(CRLF); connection.write('Hello world'); connection.end(); }); server.listen(3000, () => { console.log('listen on 3000'); });
ϒϥβͰݟͯΈΔ
Ͱ͖ͨ
Response header Λฦͯ͠ΈΔ const net = require('net'); const CRLF =
'\r\n'; const server = net.createServer((connection) => { console.log('connect!!'); connection.write('HTTP/1.1 200 OK' + CRLF); connection.write('Set-Cookie: test=123' + CRLF); connection.write(CRLF); connection.write('Hello world'); connection.end(); }); server.listen(3000, () => { console.log('listen on 3000'); });
ϒϥβͰݟͯΈΔ
Ͱ͖ͨ
TCPͷϞδϡʔϧnetΛ͏ const net = require('net'); const CRLF = '\r\n'; const
server = net.createServer((connection) => { console.log('connect!!'); connection.write('HTTP/1.1 200 OK' + CRLF); connection.write('Set-Cookie: test=123' + CRLF); connection.write(CRLF); connection.write('Hello world'); connection.end(); }); server.listen(3000, () => { console.log('listen on 3000'); }); 3FTQPOTF-JOF ϓϩτίϧόʔδϣϯͱTUBUVTDPEF 3FTQPOTF)FBEFS SFTQPOTFͷϝλใ 3FTQPOTF#PEZ SFTQPOTFͷ༰
ϚδϨε͢Δͱ
ͦΜͳ͜ͱ͠ͳ͍ Use express !!!! const app = express(); app.use('/static', express.static());
app.use('/foo', (req, res, next) => { res.send('foo'); }); app.use('/bar', (req, res, next) => { res.send('foo'); });
ͨͩHTTP͕Ͳ͏ͳͬͯΔ͔Λ ͓ͬͯ͘͜ͱॏཁ GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 Host: www.example.com Accept-Language:
en, mi HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain Hello World! My payload includes a trailing CRLF.
ΞϓϦέʔγϣϯϨΠϠͰࣄ ͍ͯ͠ΔͱΕ͕ͪ
தͰಈ͍ͯΔ͕Θ͔Δͱɺ ͜͏͍͏͜ͱ͕Ͱ͖Δ DEMO
HTTPϨΠϠͷಈ͖webͷ ಈ͖ͦͷͷɺڵຯΛ࣋ͱ͏ɺ ωοτϫʔΫϨΠϠʹɻ
Thank you.
ൃച