Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Desconstruindo a web
Willian Molinari (a.k.a PotHix)
Aviso
Willian Molinari
a.k.a PotHix
Plaev
.github.io
Porque dessa talk?
https://www.youtube.com/watch?v=nG1oGfrDiUc
https://www.youtube.com/watch?v=nG1oGfrDiUc
Essa talk se baseia em
Internet
Internet
The dawn of the net
Internet
http://pothix.com
http://pothix.com
http://pothix.com
http://pothix.com
http://pothix.com
É uma URL?
http://pothix.com
“O que significa PotHix”
“O que significa PotHix”
http://pothix.com
É uma URL!
http://pothix.com
http://pothix.com
http://pothix.com
Tem HSTS?
Strict-Transport-Security
http://pothix.com
Tem cache?
Expires Cache-Control
http://pothix.com
Protocolo: http://
Domínio: pothix.com
Path: /
Tem cache de
DNS?
Chrome
Faz cache de DNS
http://aosabook.org/en/posa/high-performance-networking-in-chrome.html
getaddrinfo()
sistema
operacional
glibc
I’m watching you!
n
u
glibc -> /etc/hosts
nss/nss_files/files-hosts.c
glibc -> getaddrinfo()
sysdeps/posix/getaddrinfo.c
2321 getaddrinfo (const char *name, const char *service,
2322 const str...
getaddrinfo()
Tem nscd para
cache de DNS?
Internet
- glibc
POSIX
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace
Físico
Modelo
OSI
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace
Físico
Modelo
OSI
S
R
L
Y
?
Aplicação
Transporte
Rede
Enlace
Físico
Sessão
Apresentação
Aplicação
Transporte
Rede
Enlace
Físico
Aplicação
Transporte
Rede
Enlace
Físico
SO
user
TCP / UDP
DNSAplicação
Transporte
Rede
Enlace
Físico
IP
Ethernet / Wi-Fi
010101001011
DNS
TCP / UDP
Aplicação
Transporte
Rede
Enlace
Físico
IP
Ethernet / Wi-Fi
010101001011
código disponível em: chromium/src/net/dns
getaddrinfo()
__socket() & __connect()
sysdeps/posix/getaddrinfo.c
2515 fd = __socket (af, SOCK_DGRAM, IPPROTO_IP);
[...]
...
terminal
$ sudo strace -f -e bind,socket,fork,connect -p $(ps aux | grep chromium | grep
-v nacl | awk '{ print $2}' | xar...
terminal
$ sudo strace -f -e bind,socket,fork,connect -p $(ps aux | grep chromium | grep
-v nacl | awk '{ print $2}' | xar...
Happy eyebals (rfc6555): https://www.ietf.org/mail-
archive/web/v6ops/current/msg22455.html
AAAA
A
Browser
sitev6
sitev4
de acordo com a rfc6555
AAAA
A
Browser
sitev6
sitev4
de acordo com a rfc6555
AAAA
A
Browser
sitev6
sitev4RST
de acordo com a rfc6555
DNSAplicação
Transporte
Rede
Enlace
Físico
TCP / UDP
IP
Ethernet / Wi-Fi
010101001011
UDP/IP
linux/blob/master/net/ipv4/udp.c
UDP
Conteúdo
Endereço (IP)
?
DNSAplicação
Transporte
Rede
Enlace
Físico
TCP / UDP
IP
Ethernet / Wi-Fi
010101001011
DNSAplicação
Transporte
Rede
Enlace
Físico
TCP / UDP
IP
Mágica, bro!
A visual explanation of how dns lookups work
Via dnstracer: `dnstracer -s . -4 -o pothix.com`
A.ROOT-SERVERS.NET [.] (198.41.0.4)
a.gtld-servers.net [com] (192.5.6.30)...
Internet
glibc
DNS
TCP/IP
UDP/IP
POSIX
Internet
glibc
DNS
TCP/IP
UDP/IP
POSIX
HTTP
HTTP/HTTPS
TCP / UDP
IP
Ethernet / Wi-Fi
010101001011
Aplicação
Transporte
Rede
Enlace
Físico
HTTP/HTTPS
TCP / UDP
IP
Ethernet / Wi-Fi
010101001011
Aplicação
Transporte
Rede
Enlace
Físico
TCP
linux/blob/master/net/ipv4/tcp.c
https://en.wikipedia.org/wiki/Transmission_Control_Protocol
ACK
SYN + ACK
ACK
Three way handshake
LISTENINGSYN
LISTENSYNSENT
SYN+ACK
LISTEN
SYN
RECEIVED
SYNSENT
SYN
RECEIVED
SYNSENTESTABLISHED
ACK
ESTABLISHEDSYNSENTESTABLISHED
É NÓIS! É NÓIS!
HTTP/HTTPS
TCP / UDP
IP
Ethernet / Wi-Fi
010101001011
Aplicação
Transporte
Rede
Enlace
Físico
HTTPS
TLS = fork(SSLv3)
SSLv3 is no longer supported in chrome
HTTP/HTTPS
TCP / UDP
IP
Ethernet / Wi-Fi
010101001011
Aplicação
Transporte
Rede
Enlace
Físico
TLS
TLS
conexão estabelecida
client hello
(CIPHERS, URL)
Os primeiros milisegundos de uma conexão HTTPS
https://cc.dcsec.uni-hannover.de/
conexão estabelecida
Server hello
(certificado, CIPHER)
TLS_RSA_WITH_RC4_128_MD5
public
key
crypt hash
conexão estabelecida
Data válida?
CA confiável?
Assinatura válida?
URL esperada?
conexão estabelecida
conexão estabelecida
Gerei uma parada aqui
(pre_master secret)
!^*@#$&!@(#$&!@#)$^$^
TLS_RSA_WITH_RC4_128_MD5
conexão estabelecida
!!@U#$N!Y*@#$*
master secret
TLS_RSA_WITH_RC4_128_MD5
conexão estabelecida
É NÓIS!
TLS_RSA_WITH_RC4_128_MD5
criptografia
dos dados
verificação contra
conteúdo “batizado”
É NÓIS!
TLSHTTP HTTP
Internet
headers
url
cookies
headers
url
cookies
HTTP/HTTP2
chromium - net/http & net/spdy
Rafael Rinaldi
Dissecando o protocolo HTTP/2
HTTP 1x via telnet
$ telnet pothix.com 80
Trying 192.30.252.153...
Connected to pothix.com.
Escape character is '^]'.
GET ...
HTTP/HTTPS
TCP / UDP
IP
Ethernet / Wi-Fi
010101001011
Aplicação
Transporte
Rede
Enlace
Físico
Aplicação
Transporte
Rede
Enlace
Físico
HTTP/HTTPS
TCP / UDP
IP
Ethernet / Wi-Fi
010101001011
Aplicação
Transporte
Rede
Enlace
Físico
papers/Vipin_Analysis_of_open_source_WLAN_driver_paper.pdf
➔ net/ipv4/tcp.c
➔ include/net/cfg80211.h
➔ net/wireless/nl8021...
Internetglibc
DNS
TCP/IP
UDP/IP
HTTP
POSIX
a/b/g/n/ac
a/b/g/n/ac
Carrier
Sense
Multiple
Access
Collision
Avoidance
G
GB
G
glibc
DNS
TCP/IP
UDP/IP
HTTP
POSIX
Internet
# traceroute -T pothix.com
traceroute to pothix.com (192.30.252.153), 30 hops max, 60 byte packets
1 palantir (192.168.1.1...
Internet
Nginx conf file
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tm...
Internet
assets
TCP
http://12factor.net/port-binding
HTTP parsing
ragel vindo lá do velho mongrel*
*de acordo com o documento de design do unicorn
Internet
assets
TCP
Webserver -> Framework
baseado no PEP3333
Internet
assets
TCP
lib/rails/application.rb
Rack -> Rails
mais informações no post do timaro no omniref
É um Rack application
...
# Implements call according to the Rack API. It simply
# dispatches the request to the underlyin...
mais informações no post do timaro no omniref
Informações do Rack
{"GATEWAY_INTERFACE"=>"CGI/1.1",
"PATH_INFO"=>"/favicon....
Rails::Engine
Todas as apps são Engines
mais informações no post do timaro no omniref
mais informações no post do timaro no omniref
Rack middlewares
[
Rack::Sendfile,
ActionDispatch::Static, Rack::Lock,
#<Act...
ActionDispatch
::Journey::Router
a primeira parte do seu código a ser tocada
mais informações no post do timaro no omniref...
ActionDispatch::Routing
::RouteSet::Dispatcher
achando o controller via rotas
mais informações no post do timaro no omnire...
ActionController::Metal
prepara o request e manda processar
mais informações no post do timaro no omniref
def dispatch(nam...
AbstractController::Base
encaminha para o seu controller
mais informações no post do timaro no omniref
def process(action,...
Internet
assets
TCP
MV
VM
C
Internet
assets
TCP
MV
VM
C
Internet
assets
TCP
MV
VM
C
pega aí Rack -> [status, header, body]
mais informações no post do timaro no omniref
ActionDispatch
::Journey::Router
Internet
assets
TCP
MV
VM
C
Internet
assets
TCP
MV
VM
C
Internet
assets
TCP
MV
VM
C
Internet
assets
TCP
MV
VM
C
glibc
DNS
TCP/IP
UDP/IP
HTTP
POSIX
Internet
glibc
DNS
TCP/IP
UDP/IP
HTTP
POSIX
Internet
glibc
DNS
TCP/IP
UDP/IP
HTTP
POSIX
Internet
glibc
DNS
TCP/IP
UDP/IP
HTTP
POSIX
Internet
glibc
DNS
TCP/IP
UDP/IP
HTTP
POSIX
Internet
c-c-c-combo breaker
HTML
exemplos retirados do post “How browsers work”
algoritmo de parsing
implementado no webkit do chrome
HEAD
exemplos retirados do post “How browsers work”
algoritmo de parsing
implementado no webkit do chrome
HTML syntax error
<img src=”http://pothix.com/avatar.gif”> thread
<img src=”http://pothix.com/esperanto.png”> thread
<img src=”http://pothix...
<img src=”http://pothix.com/avatar.gif”> thread
<img src=”http://pothix.com/esperanto.png”> thread
<img src=”http://pothix...
exemplos retirados do post “How browsers work”
exemplos retirados do post “How browsers work”
Diego Eis: DOM, CSSOM e RenderThree - Introdução ao Browser Render Path
Resumindo
essa bagaça
glibc
MV
VM
C
Internet
Internet
Não acredite em mágica
entenda como funciona de verdade
ceeeeerto.
Seja curioso
conhecimento nunca é demais
Perguntas?
Willian Molinari
@PotHix
pothix@pothix.com
Slides: https://goo.gl/cC36RM
S
R
L
Y
?
The browser
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Desconstruindo a web
Upcoming SlideShare
Loading in …5
×

Desconstruindo a web

1,751 views

Published on

Palestra sobre tudo que quem trabalha com web deve saber sobre uma requisição web.

Published in: Technology
  • Be the first to comment

Desconstruindo a web

  1. 1. Desconstruindo a web Willian Molinari (a.k.a PotHix)
  2. 2. Aviso
  3. 3. Willian Molinari a.k.a PotHix
  4. 4. Plaev .github.io
  5. 5. Porque dessa talk?
  6. 6. https://www.youtube.com/watch?v=nG1oGfrDiUc
  7. 7. https://www.youtube.com/watch?v=nG1oGfrDiUc
  8. 8. Essa talk se baseia em
  9. 9. Internet
  10. 10. Internet
  11. 11. The dawn of the net
  12. 12. Internet
  13. 13. http://pothix.com http://pothix.com
  14. 14. http://pothix.com http://pothix.com
  15. 15. http://pothix.com É uma URL? http://pothix.com
  16. 16. “O que significa PotHix” “O que significa PotHix”
  17. 17. http://pothix.com É uma URL! http://pothix.com
  18. 18. http://pothix.com http://pothix.com Tem HSTS? Strict-Transport-Security
  19. 19. http://pothix.com Tem cache? Expires Cache-Control http://pothix.com
  20. 20. Protocolo: http:// Domínio: pothix.com Path: / Tem cache de DNS?
  21. 21. Chrome Faz cache de DNS
  22. 22. http://aosabook.org/en/posa/high-performance-networking-in-chrome.html
  23. 23. getaddrinfo()
  24. 24. sistema operacional
  25. 25. glibc I’m watching you! n u
  26. 26. glibc -> /etc/hosts nss/nss_files/files-hosts.c
  27. 27. glibc -> getaddrinfo() sysdeps/posix/getaddrinfo.c 2321 getaddrinfo (const char *name, const char *service, 2322 const struct addrinfo *hints, struct addrinfo **pai) 2323 {
  28. 28. getaddrinfo() Tem nscd para cache de DNS?
  29. 29. Internet - glibc POSIX
  30. 30. Aplicação Apresentação Sessão Transporte Rede Enlace Físico Modelo OSI
  31. 31. Aplicação Apresentação Sessão Transporte Rede Enlace Físico Modelo OSI
  32. 32. S R L Y ?
  33. 33. Aplicação Transporte Rede Enlace Físico Sessão Apresentação
  34. 34. Aplicação Transporte Rede Enlace Físico
  35. 35. Aplicação Transporte Rede Enlace Físico SO user
  36. 36. TCP / UDP DNSAplicação Transporte Rede Enlace Físico IP Ethernet / Wi-Fi 010101001011
  37. 37. DNS TCP / UDP Aplicação Transporte Rede Enlace Físico IP Ethernet / Wi-Fi 010101001011
  38. 38. código disponível em: chromium/src/net/dns
  39. 39. getaddrinfo() __socket() & __connect() sysdeps/posix/getaddrinfo.c 2515 fd = __socket (af, SOCK_DGRAM, IPPROTO_IP); [...] 2526 [...] && __connect (fd, q->ai_addr, q->ai_addrlen) == 0
  40. 40. terminal $ sudo strace -f -e bind,socket,fork,connect -p $(ps aux | grep chromium | grep -v nacl | awk '{ print $2}' | xargs echo | sed 's/ /,/g') [...] [pid 8739] socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 134 [pid 8739] connect(134, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton (AF_INET6, "2001:4860:4860::8888", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable) [pid 9010] socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 134 [pid 9010] connect(134, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("192.30.252.154")}, 16) = 0 [pid 8739] socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 134 [pid 8739] connect(134, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("192.30.252.154")}, 16) = -1 EINPROGRESS (Operation now in progress) [...] Syscalls in action! (*stripped)
  41. 41. terminal $ sudo strace -f -e bind,socket,fork,connect -p $(ps aux | grep chromium | grep -v nacl | awk '{ print $2}' | xargs echo | sed 's/ /,/g') [...] [pid 8739] socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 134 [pid 8739] connect(134, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton (AF_INET6, "2001:4860:4860::8888", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable) [pid 9010] socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 134 [pid 9010] connect(134, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("192.30.252.154")}, 16) = 0 [pid 8739] socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 134 [pid 8739] connect(134, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("192.30.252.154")}, 16) = -1 EINPROGRESS (Operation now in progress) [...] Syscalls in action! (*stripped) UDP para ipv6 nope :( UDP ipv4 request
  42. 42. Happy eyebals (rfc6555): https://www.ietf.org/mail- archive/web/v6ops/current/msg22455.html
  43. 43. AAAA A Browser sitev6 sitev4 de acordo com a rfc6555
  44. 44. AAAA A Browser sitev6 sitev4 de acordo com a rfc6555
  45. 45. AAAA A Browser sitev6 sitev4RST de acordo com a rfc6555
  46. 46. DNSAplicação Transporte Rede Enlace Físico TCP / UDP IP Ethernet / Wi-Fi 010101001011
  47. 47. UDP/IP linux/blob/master/net/ipv4/udp.c
  48. 48. UDP
  49. 49. Conteúdo
  50. 50. Endereço (IP)
  51. 51. ?
  52. 52. DNSAplicação Transporte Rede Enlace Físico TCP / UDP IP Ethernet / Wi-Fi 010101001011
  53. 53. DNSAplicação Transporte Rede Enlace Físico TCP / UDP IP Mágica, bro!
  54. 54. A visual explanation of how dns lookups work
  55. 55. Via dnstracer: `dnstracer -s . -4 -o pothix.com` A.ROOT-SERVERS.NET [.] (198.41.0.4) a.gtld-servers.net [com] (192.5.6.30) ns1.dreamhost.com [pothix.com] (66.33.206.206) Got authoritative answer ns1.dreamhost.com (66.33.206.206) pothix.com -> 192.30.252.153 ns1.dreamhost.com (66.33.206.206) pothix.com -> 192.30.252.154
  56. 56. Internet glibc DNS TCP/IP UDP/IP POSIX
  57. 57. Internet glibc DNS TCP/IP UDP/IP POSIX HTTP
  58. 58. HTTP/HTTPS TCP / UDP IP Ethernet / Wi-Fi 010101001011 Aplicação Transporte Rede Enlace Físico
  59. 59. HTTP/HTTPS TCP / UDP IP Ethernet / Wi-Fi 010101001011 Aplicação Transporte Rede Enlace Físico
  60. 60. TCP linux/blob/master/net/ipv4/tcp.c
  61. 61. https://en.wikipedia.org/wiki/Transmission_Control_Protocol
  62. 62. ACK SYN + ACK ACK Three way handshake
  63. 63. LISTENINGSYN LISTENSYNSENT
  64. 64. SYN+ACK LISTEN SYN RECEIVED SYNSENT
  65. 65. SYN RECEIVED SYNSENTESTABLISHED ACK
  66. 66. ESTABLISHEDSYNSENTESTABLISHED É NÓIS! É NÓIS!
  67. 67. HTTP/HTTPS TCP / UDP IP Ethernet / Wi-Fi 010101001011 Aplicação Transporte Rede Enlace Físico
  68. 68. HTTPS
  69. 69. TLS = fork(SSLv3) SSLv3 is no longer supported in chrome
  70. 70. HTTP/HTTPS TCP / UDP IP Ethernet / Wi-Fi 010101001011 Aplicação Transporte Rede Enlace Físico TLS
  71. 71. TLS
  72. 72. conexão estabelecida client hello (CIPHERS, URL) Os primeiros milisegundos de uma conexão HTTPS
  73. 73. https://cc.dcsec.uni-hannover.de/
  74. 74. conexão estabelecida Server hello (certificado, CIPHER) TLS_RSA_WITH_RC4_128_MD5 public key crypt hash
  75. 75. conexão estabelecida Data válida? CA confiável? Assinatura válida? URL esperada?
  76. 76. conexão estabelecida
  77. 77. conexão estabelecida Gerei uma parada aqui (pre_master secret) !^*@#$&!@(#$&!@#)$^$^ TLS_RSA_WITH_RC4_128_MD5
  78. 78. conexão estabelecida !!@U#$N!Y*@#$* master secret TLS_RSA_WITH_RC4_128_MD5
  79. 79. conexão estabelecida É NÓIS! TLS_RSA_WITH_RC4_128_MD5 criptografia dos dados verificação contra conteúdo “batizado” É NÓIS!
  80. 80. TLSHTTP HTTP Internet headers url cookies headers url cookies
  81. 81. HTTP/HTTP2 chromium - net/http & net/spdy
  82. 82. Rafael Rinaldi Dissecando o protocolo HTTP/2
  83. 83. HTTP 1x via telnet $ telnet pothix.com 80 Trying 192.30.252.153... Connected to pothix.com. Escape character is '^]'. GET /index.html HTTP/1.1 Host: pothix.com HTTP/1.1 200 OK Server: GitHub.com ... terminal
  84. 84. HTTP/HTTPS TCP / UDP IP Ethernet / Wi-Fi 010101001011 Aplicação Transporte Rede Enlace Físico
  85. 85. Aplicação Transporte Rede Enlace Físico
  86. 86. HTTP/HTTPS TCP / UDP IP Ethernet / Wi-Fi 010101001011 Aplicação Transporte Rede Enlace Físico
  87. 87. papers/Vipin_Analysis_of_open_source_WLAN_driver_paper.pdf ➔ net/ipv4/tcp.c ➔ include/net/cfg80211.h ➔ net/wireless/nl80211.c ➔ include/net/mac80211.h ➔ drivers/net/wireless/iwlwifi/
  88. 88. Internetglibc DNS TCP/IP UDP/IP HTTP POSIX
  89. 89. a/b/g/n/ac
  90. 90. a/b/g/n/ac
  91. 91. Carrier Sense Multiple Access Collision Avoidance
  92. 92. G
  93. 93. GB G
  94. 94. glibc DNS TCP/IP UDP/IP HTTP POSIX Internet
  95. 95. # traceroute -T pothix.com traceroute to pothix.com (192.30.252.153), 30 hops max, 60 byte packets 1 palantir (192.168.1.1) 8.718 ms 8.769 ms 8.868 ms 2 10.18.128.1 (10.18.128.1) 25.058 ms 25.673 ms 27.189 ms 3 c8bd5001.virtua.com.br (200.189.80.1) 29.071 ms 29.073 ms 29.068 ms 4 embratel-T0-7-2-0-tacc01.spoph.embratel.net.br (200.178.127.57) 32.917 ms embratel-T0-4-1-0-uacc03.spomb.embratel.net.br (189.42.182.37) 31.734 ms embratel-T0-1-0-2-uacc04.spoph.embratel.net.br (201.56.189.9) 36.481 ms 5 ebt-H0-1-0-0-tcore01.spolp.embratel.net.br (200.230.1.242) 37.800 ms 200.244.212.73 (200.244.212.73) 37.803 ms 200.244.212.81 (200.244.212.81) 41.446 ms 6 ebt-BP1082-intl02.nyk.embratel.net.br (200.230.220.30) 204.822 ms ebt-B11121-intl02.nyk.embratel.net.br (200.230.251.254) 192.381 ms ebt-BP11521-intl02.nyk.embratel.net.br (200.230.220.174) 189.936 ms 7 fa-0-0-0.r23.nycmny01.us.bb.gin.ntt.net (129.250.202.185) 192.297 ms 172.074 ms 172.013 ms 8 ae-9.r22.asbnva02.us.bb.gin.ntt.net (129.250.2.149) 171.973 ms 167.012 ms 166.951 ms 9 ae-44.r06.asbnva02.us.bb.gin.ntt.net (129.250.6.113) 166.888 ms 166.873 ms ae-45.r05.asbnva02.us.bb.gin.ntt.net (129.250.5.137) 212.669 ms 10 xe-0-3-0-18.r05.asbnva02.us.ce.gin.ntt.net (129.250.197.70) 202.448 ms xe-0-9-0-16.r06.asbnva02.us.ce.gin.ntt.net (129.250.197.74) 201.593 ms 202.489 ms 11 pages.github.com (192.30.252.153) 171.337 ms * * TCP meu router github pages USA backbone backbone embratel NET
  96. 96. Internet
  97. 97. Nginx conf file upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } ... http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server TCP Unix Socket
  98. 98. Internet assets TCP http://12factor.net/port-binding
  99. 99. HTTP parsing ragel vindo lá do velho mongrel* *de acordo com o documento de design do unicorn
  100. 100. Internet assets TCP
  101. 101. Webserver -> Framework baseado no PEP3333
  102. 102. Internet assets TCP
  103. 103. lib/rails/application.rb Rack -> Rails mais informações no post do timaro no omniref
  104. 104. É um Rack application ... # Implements call according to the Rack API. It simply # dispatches the request to the underlying middleware stack. def call(env) env["ORIGINAL_FULLPATH"] = build_original_fullpath(env) env["ORIGINAL_SCRIPT_NAME"] = env["SCRIPT_NAME"] super(env) end ...
  105. 105. mais informações no post do timaro no omniref Informações do Rack {"GATEWAY_INTERFACE"=>"CGI/1.1", "PATH_INFO"=>"/favicon.ico", "QUERY_STRING"=>"", "REMOTE_ADDR"=>"127.0.0.1", "REMOTE_HOST"=>"localhost.localdomain", "REQUEST_METHOD"=>"GET", "REQUEST_URI"=>"http://localhost:9292/favicon. ico", "SCRIPT_NAME"=>"", "SERVER_NAME"=>"localhost", "SERVER_PORT"=>"9292", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/2.2.3 /2015-08-18)", "HTTP_HOST"=>"localhost:9292", "HTTP_CONNECTION"=>"keep-alive", "HTTP_USER_AGENT"=>"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36", "HTTP_ACCEPT"=>"*/*", "HTTP_REFERER"=>"http://localhost:9292/", "HTTP_ACCEPT_ENCODING"=>"gzip, deflate, sdch", "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8,pt-BR;q=0. 6,pt;q=0.4,es;q=0.2,eo;q=0.2", "rack.version"=>[1, 2], "rack.multithread"=>true, "rack.multiprocess" =>false, "rack.run_once"=>false, "rack.url_scheme" =>"http", "HTTP_VERSION"=>"HTTP/1.1", "REQUEST_PATH"=>"/favicon.ico"}
  106. 106. Rails::Engine Todas as apps são Engines mais informações no post do timaro no omniref
  107. 107. mais informações no post do timaro no omniref Rack middlewares [ Rack::Sendfile, ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache:: Middleware:0x000000028fa168>, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, WebConsole::Middleware, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActiveRecord::ConnectionAdapters:: ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, Rack::Head, Rack::ConditionalGet, Rack::ETag ]
  108. 108. ActionDispatch ::Journey::Router a primeira parte do seu código a ser tocada mais informações no post do timaro no omniref req.path_parameters => {:controller=>"pages", :action=>"home"}
  109. 109. ActionDispatch::Routing ::RouteSet::Dispatcher achando o controller via rotas mais informações no post do timaro no omniref ActiveSupport::Dependencies.constantize("#{params[:controller].camelize}Controller") => PagesController
  110. 110. ActionController::Metal prepara o request e manda processar mais informações no post do timaro no omniref def dispatch(name, request) #:nodoc: [...] process(name)
  111. 111. AbstractController::Base encaminha para o seu controller mais informações no post do timaro no omniref def process(action, *args) [...] process_action(action_name, *args) # que no fim é só um `send`
  112. 112. Internet assets TCP MV VM C
  113. 113. Internet assets TCP MV VM C
  114. 114. Internet assets TCP MV VM C
  115. 115. pega aí Rack -> [status, header, body] mais informações no post do timaro no omniref ActionDispatch ::Journey::Router
  116. 116. Internet assets TCP MV VM C
  117. 117. Internet assets TCP MV VM C
  118. 118. Internet assets TCP MV VM C
  119. 119. Internet assets TCP MV VM C
  120. 120. glibc DNS TCP/IP UDP/IP HTTP POSIX Internet
  121. 121. glibc DNS TCP/IP UDP/IP HTTP POSIX Internet
  122. 122. glibc DNS TCP/IP UDP/IP HTTP POSIX Internet
  123. 123. glibc DNS TCP/IP UDP/IP HTTP POSIX Internet
  124. 124. glibc DNS TCP/IP UDP/IP HTTP POSIX Internet c-c-c-combo breaker
  125. 125. HTML
  126. 126. exemplos retirados do post “How browsers work” algoritmo de parsing implementado no webkit do chrome HEAD
  127. 127. exemplos retirados do post “How browsers work” algoritmo de parsing implementado no webkit do chrome
  128. 128. HTML syntax error
  129. 129. <img src=”http://pothix.com/avatar.gif”> thread <img src=”http://pothix.com/esperanto.png”> thread <img src=”http://pothix.com/fotodasferias.scr”> thread <script src=”http://pothix.com/marotagem.js”> sincrono <script src=”http://pothix.com/estiloso.css”> thread <script src=”http://pothix.com/javaescrito.js”> sincrono <img src=”http://pothix.com/fotodasferias.jpg”>
  130. 130. <img src=”http://pothix.com/avatar.gif”> thread <img src=”http://pothix.com/esperanto.png”> thread <img src=”http://pothix.com/fotodasferias.scr”> thread <script src=”http://pothix.com/marotagem.js”> sincrono <script src=”http://pothix.com/estiloso.css”> thread <script src=”http://pothix.com/javaescrito.js”> sincrono <img src=”http://pothix.com/fotodasferias.jpg”>
  131. 131. exemplos retirados do post “How browsers work”
  132. 132. exemplos retirados do post “How browsers work”
  133. 133. Diego Eis: DOM, CSSOM e RenderThree - Introdução ao Browser Render Path
  134. 134. Resumindo essa bagaça
  135. 135. glibc MV VM C Internet Internet
  136. 136. Não acredite em mágica entenda como funciona de verdade ceeeeerto.
  137. 137. Seja curioso conhecimento nunca é demais
  138. 138. Perguntas? Willian Molinari @PotHix pothix@pothix.com Slides: https://goo.gl/cC36RM
  139. 139. S R L Y ?
  140. 140. The browser

×