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.

URL to HTML

559 views

Published on

What happens in between the time you type a URL in your browser and the time you see the fully rendered page.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

URL to HTML

  1. 1. URL to HTML a minute in the life of a webpage François Marier @fmarier mozilla
  2. 2. mozilla newmarket
  3. 3. 8 engineers
  4. 4. 8 engineers 1 designer
  5. 5. 8 engineers 1 designer 1 manager
  6. 6. video & media marketplace cloud services crash investigation
  7. 7. video & media firefox ux cloud services crash investigation
  8. 8. video & media firefox ux security & privacy crash investigation
  9. 9. video & media firefox ux security & privacy layout
  10. 10. > 1,000 employees world-wide
  11. 11. </ >
  12. 12. 1. Learn HTML 2. ? 3. Profit !
  13. 13. abstractions
  14. 14. asbtraction construct used to understand a complicated topic at a high level
  15. 15. asbtraction extra layer added to avoid writing the same code over and over
  16. 16. drawSquare()
  17. 17. drawLine()
  18. 18. drawLine()
  19. 19. drawLine()
  20. 20. drawLine()
  21. 21. drawSquare()
  22. 22. if you don't understand the layers below, you won't know what to do when the abstraction breaks
  23. 23. mastery requires a high-level understanding of the rest of the stack
  24. 24. web performance
  25. 25. web performance how bytes make it to the user
  26. 26. web performance how bytes make it to the user how the browser renders the page
  27. 27. URL DNS IP TCP HTTP / TLS HTML
  28. 28. URL DNS IP TCP HTTP / TLS HTML
  29. 29. URL uniform ressource locator
  30. 30. http://www.example.com
  31. 31. http://www.example.com
  32. 32. http://www.example.com /articles/
  33. 33. http://www.example.com /articles/tutorial.cgi
  34. 34. http://www.example.com /articles/tutorial.cgi ?showsolutions=0&topic=web
  35. 35. http://www.example.com /articles/tutorial.cgi ?showsolutions=0&topic=web #part5
  36. 36. http://www.example.com:80 /articles/tutorial.cgi ?showsolutions=0&topic=web #part5
  37. 37. http://username:password@ www.example.com:80 /articles/tutorial.cgi ?showsolutions=0&topic=web #part5
  38. 38. DNS domain name system
  39. 39. $ cat /etc/resolv.conf nameserver 208.67.222.222 nameserver 208.67.220.220
  40. 40. www.cs.auckland.ac.nz
  41. 41. www.cs.auckland.ac.nz 130.216.158.22
  42. 42. $ dig nz NS @199.7.83.42
  43. 43. $ dig nz NS @199.7.83.42 ; <<>> DiG 9.8.1-P1 <<>> nz NS @199.7.83.42 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 412 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADD ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;nz. IN NS ;; AUTHORITY SECTION: nz. 172800 IN NS ns1.dns.net.nz. nz. 172800 IN NS ns2.dns.net.nz. nz. 172800 IN NS ns3.dns.net.nz. nz. 172800 IN NS ns4.dns.net.nz. nz. 172800 IN NS ns5.dns.net.nz. nz. 172800 IN NS ns6.dns.net.nz. nz. 172800 IN NS ns7.dns.net.nz.
  44. 44. $ dig ac.nz NS @ns1.dns.net.nz
  45. 45. $ dig ac.nz NS @ns1.dns.net.nz ; <<>> DiG 9.8.1-P1 <<>> ac.nz NS @ns1.dns.net.nz ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 391 ;; flags: qr aa rd; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;ac.nz. IN NS ;; ANSWER SECTION: ac.nz. 86400IN NS ns7.dns.net.nz. ac.nz. 86400IN NS ns4.dns.net.nz. ac.nz. 86400IN NS ns2.dns.net.nz. ac.nz. 86400IN NS ns1.dns.net.nz. ac.nz. 86400IN NS ns6.dns.net.nz. ac.nz. 86400IN NS ns3.dns.net.nz. ac.nz. 86400IN NS ns5.dns.net.nz.
  46. 46. $ dig auckland.ac.nz NS @ns1.dns.net.nz
  47. 47. $ dig auckland.ac.nz NS @ns1.dns.net.nz ; <<>> DiG 9.8.1-P1 <<>> auckland.ac.nz NS @ns1.dns.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 598 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADD ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;auckland.ac.nz. IN NS ;; AUTHORITY SECTION: auckland.ac.nz. 86400IN NS pubsec.domainz.net.nz. auckland.ac.nz. 86400IN NS dns1.auckland.ac.nz. auckland.ac.nz. 86400IN NS dns2.auckland.ac.nz. ;; ADDITIONAL SECTION: dns1.auckland.ac.nz.86400IN A 130.216.1.2 dns2.auckland.ac.nz.86400IN A 130.216.1.1
  48. 48. $ dig cs.auckland.ac.nz NS @dns1.auckland.ac.nz
  49. 49. $ dig cs.auckland.ac.nz NS @dns1.auckland.ac.nz ; <<>> DiG 9.8.1-P1 <<>> cs.auckland.ac.nz NS @dns1.auc ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 485 ;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;cs.auckland.ac.nz. IN NS ;; ANSWER SECTION: cs.auckland.ac.nz. 10800 IN NS dns2.auckland.ac.nz. cs.auckland.ac.nz. 10800 IN NS kronos2.cs.auckland.ac.n cs.auckland.ac.nz. 10800 IN NS dns1.auckland.ac.nz. cs.auckland.ac.nz. 10800 IN NS kronos1.cs.auckland.ac.n ;; ADDITIONAL SECTION: dns1.auckland.ac.nz.1800 IN A 130.216.1.2
  50. 50. $ dig www.cs.auckland.ac.nz @kronos1.cs.auckland.ac.nz
  51. 51. $ dig www.cs.auckland.ac.nz @kronos1.cs.auckland.ac.nz ; <<>> DiG 9.8.1-P1 <<>> www.cs.auckland.ac.nz A @krono ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 175 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;www.cs.auckland.ac.nz. IN A ;; ANSWER SECTION: www.cs.auckland.ac.nz. 10800 IN A 130.216.158.22 ;; AUTHORITY SECTION: cs.auckland.ac.nz. 10800IN NS kronos2.cs.auckland.ac.nz cs.auckland.ac.nz. 10800IN NS dns2.auckland.ac.nz. cs.auckland.ac.nz. 10800IN NS dns1.auckland.ac.nz. cs.auckland.ac.nz. 10800IN NS kronos1.cs.auckland.ac.nz
  52. 52. l.root-servers.net ns1.dns.net.nz ns1.dns.net.nz dns1.auckland.ac.nz kronos1.cs.auckland.ac.nz
  53. 53. l.root-servers.net ns1.dns.net.nz ns1.dns.net.nz dns1.auckland.ac.nz kronos1.cs.auckland.ac.nz
  54. 54. l.root-servers.net ns1.dns.net.nz ns1.dns.net.nz dns1.auckland.ac.nz kronos1.cs.auckland.ac.nz
  55. 55. l.root-servers.net ns1.dns.net.nz ns1.dns.net.nz dns1.auckland.ac.nz kronos1.cs.auckland.ac.nz
  56. 56. l.root-servers.net ns1.dns.net.nz ns1.dns.net.nz dns1.auckland.ac.nz kronos1.cs.auckland.ac.nz
  57. 57. IP internet protocol
  58. 58. www.bbc.co.uk 212.58.246.94
  59. 59. $ mtr 212.58.246.94 1. 192.168.1.1 2. llu.bng1.tvc.orcon.net.nz 3. xe-3-3-0.cre1.sky.orcon.net.nz 4. 121.98.9.137 5. ae1-0.cre2.nct.odyssey.net.nz 6. ORCON-INTER.bar1.SanFrancisco1.Level3.net 7. xe-5-0-0.bar1.SanFrancisco1.Level3.net 8. ae-0-11.bar2.SanFrancisco1.Level3.net 9. ae-6-6.ebr2.SanJose1.Level3.net 10. ae-62-62.csw1.SanJose1.Level3.net 11. ae-61-61.ebr1.SanJose1.Level3.net 12. ae-2-2.ebr2.NewYork1.Level3.net 13. ae-62-62.csw1.NewYork1.Level3.net 14. ae-61-61.ebr1.NewYork1.Level3.net 15. ae-43-43.ebr2.London1.Level3.net 16. ae-57-222.csw2.London1.Level3.net 17. ae-229-3605.edge4.London1.Level3.net 18. BBC-TECHNOL.edge4.London1.Level3.net 19. ??? 20. ??? 21. ae0.er01.cwwtf.bbc.co.uk 22. 132.185.255.165 23. bbc-vip015.cwwtf.bbc.co.uk
  60. 60. $ mtr 212.58.246.94 1. 192.168.1.1 2. llu.bng1.tvc.orcon.net.nz 3. xe-3-3-0.cre1.sky.orcon.net.nz 4. 121.98.9.137 5. ae1-0.cre2.nct.odyssey.net.nz 6. ORCON-INTER.bar1.SanFrancisco1.Level3.net 7. xe-5-0-0.bar1.SanFrancisco1.Level3.net 8. ae-0-11.bar2.SanFrancisco1.Level3.net 9. ae-6-6.ebr2.SanJose1.Level3.net 10. ae-62-62.csw1.SanJose1.Level3.net 11. ae-61-61.ebr1.SanJose1.Level3.net 12. ae-2-2.ebr2.NewYork1.Level3.net 13. ae-62-62.csw1.NewYork1.Level3.net 14. ae-61-61.ebr1.NewYork1.Level3.net 15. ae-43-43.ebr2.London1.Level3.net 16. ae-57-222.csw2.London1.Level3.net 17. ae-229-3605.edge4.London1.Level3.net 18. BBC-TECHNOL.edge4.London1.Level3.net 19. ??? 20. ??? 21. ae0.er01.cwwtf.bbc.co.uk 22. 132.185.255.165 23. bbc-vip015.cwwtf.bbc.co.uk
  61. 61. $ mtr 212.58.246.94 1. 192.168.1.1 2. llu.bng1.tvc.orcon.net.nz 3. xe-3-3-0.cre1.sky.orcon.net.nz 4. 121.98.9.137 5. ae1-0.cre2.nct.odyssey.net.nz 6. ORCON-INTER.bar1.SanFrancisco1.Level3.net 7. xe-5-0-0.bar1.SanFrancisco1.Level3.net 8. ae-0-11.bar2.SanFrancisco1.Level3.net 9. ae-6-6.ebr2.SanJose1.Level3.net 10. ae-62-62.csw1.SanJose1.Level3.net 11. ae-61-61.ebr1.SanJose1.Level3.net 12. ae-2-2.ebr2.NewYork1.Level3.net 13. ae-62-62.csw1.NewYork1.Level3.net 14. ae-61-61.ebr1.NewYork1.Level3.net 15. ae-43-43.ebr2.London1.Level3.net 16. ae-57-222.csw2.London1.Level3.net 17. ae-229-3605.edge4.London1.Level3.net 18. BBC-TECHNOL.edge4.London1.Level3.net 19. ??? 20. ??? 21. ae0.er01.cwwtf.bbc.co.uk 22. 132.185.255.165 23. bbc-vip015.cwwtf.bbc.co.uk
  62. 62. $ mtr 212.58.246.94 1. 192.168.1.1 2. llu.bng1.tvc.orcon.net.nz 3. xe-3-3-0.cre1.sky.orcon.net.nz 4. 121.98.9.137 5. ae1-0.cre2.nct.odyssey.net.nz 6. ORCON-INTER.bar1.SanFrancisco1.Level3.net 7. xe-5-0-0.bar1.SanFrancisco1.Level3.net 8. ae-0-11.bar2.SanFrancisco1.Level3.net 9. ae-6-6.ebr2.SanJose1.Level3.net 10. ae-62-62.csw1.SanJose1.Level3.net 11. ae-61-61.ebr1.SanJose1.Level3.net 12. ae-2-2.ebr2.NewYork1.Level3.net 13. ae-62-62.csw1.NewYork1.Level3.net 14. ae-61-61.ebr1.NewYork1.Level3.net 15. ae-43-43.ebr2.London1.Level3.net 16. ae-57-222.csw2.London1.Level3.net 17. ae-229-3605.edge4.London1.Level3.net 18. BBC-TECHNOL.edge4.London1.Level3.net 19. ??? 20. ??? 21. ae0.er01.cwwtf.bbc.co.uk 22. 132.185.255.165 23. bbc-vip015.cwwtf.bbc.co.uk
  63. 63. $ mtr 212.58.246.94 1. 192.168.1.1 2. llu.bng1.tvc.orcon.net.nz 3. xe-3-3-0.cre1.sky.orcon.net.nz 4. 121.98.9.137 5. ae1-0.cre2.nct.odyssey.net.nz 6. ORCON-INTER.bar1.SanFrancisco1.Level3.net 7. xe-5-0-0.bar1.SanFrancisco1.Level3.net 8. ae-0-11.bar2.SanFrancisco1.Level3.net 9. ae-6-6.ebr2.SanJose1.Level3.net 10. ae-62-62.csw1.SanJose1.Level3.net 11. ae-61-61.ebr1.SanJose1.Level3.net 12. ae-2-2.ebr2.NewYork1.Level3.net 13. ae-62-62.csw1.NewYork1.Level3.net 14. ae-61-61.ebr1.NewYork1.Level3.net 15. ae-43-43.ebr2.London1.Level3.net 16. ae-57-222.csw2.London1.Level3.net 17. ae-229-3605.edge4.London1.Level3.net 18. BBC-TECHNOL.edge4.London1.Level3.net 19. ??? 20. ??? 21. ae0.er01.cwwtf.bbc.co.uk 22. 132.185.255.165 23. bbc-vip015.cwwtf.bbc.co.uk
  64. 64. $ mtr 212.58.246.94 1. 192.168.1.1 2. llu.bng1.tvc.orcon.net.nz 3. xe-3-3-0.cre1.sky.orcon.net.nz 4. 121.98.9.137 5. ae1-0.cre2.nct.odyssey.net.nz 6. ORCON-INTER.bar1.SanFrancisco1.Level3.net 7. xe-5-0-0.bar1.SanFrancisco1.Level3.net 8. ae-0-11.bar2.SanFrancisco1.Level3.net 9. ae-6-6.ebr2.SanJose1.Level3.net 10. ae-62-62.csw1.SanJose1.Level3.net 11. ae-61-61.ebr1.SanJose1.Level3.net 12. ae-2-2.ebr2.NewYork1.Level3.net 13. ae-62-62.csw1.NewYork1.Level3.net 14. ae-61-61.ebr1.NewYork1.Level3.net 15. ae-43-43.ebr2.London1.Level3.net 16. ae-57-222.csw2.London1.Level3.net 17. ae-229-3605.edge4.London1.Level3.net 18. BBC-TECHNOL.edge4.London1.Level3.net 19. ??? 20. ??? 21. ae0.er01.cwwtf.bbc.co.uk 22. 132.185.255.165 23. bbc-vip015.cwwtf.bbc.co.uk
  65. 65. $ mtr 212.58.246.94 1. 192.168.1.1 2. llu.bng1.tvc.orcon.net.nz 3. xe-3-3-0.cre1.sky.orcon.net.nz 4. 121.98.9.137 5. ae1-0.cre2.nct.odyssey.net.nz 6. ORCON-INTER.bar1.SanFrancisco1.Level3.net 7. xe-5-0-0.bar1.SanFrancisco1.Level3.net 8. ae-0-11.bar2.SanFrancisco1.Level3.net 9. ae-6-6.ebr2.SanJose1.Level3.net 10. ae-62-62.csw1.SanJose1.Level3.net 11. ae-61-61.ebr1.SanJose1.Level3.net 12. ae-2-2.ebr2.NewYork1.Level3.net 13. ae-62-62.csw1.NewYork1.Level3.net 14. ae-61-61.ebr1.NewYork1.Level3.net 15. ae-43-43.ebr2.London1.Level3.net 16. ae-57-222.csw2.London1.Level3.net 17. ae-229-3605.edge4.London1.Level3.net 18. BBC-TECHNOL.edge4.London1.Level3.net 19. ??? 20. ??? 21. ae0.er01.cwwtf.bbc.co.uk 22. 132.185.255.165 23. bbc-vip015.cwwtf.bbc.co.uk
  66. 66. 130.216.158.22 212.58.246.94
  67. 67. 130.216.158.22 212.58.246.94 router drops packets packets arrive in wrong order
  68. 68. 130.216.158.22 212.58.246.94 router drops packets cable is cut packets arrive in wrong order
  69. 69. 130.216.158.22 212.58.246.94 router drops packets cable is cut packets arrive in wrong order
  70. 70. ideal network actual network
  71. 71. TCP transmission control protocol
  72. 72. guarantees in-order delivery of packets
  73. 73. abstraction of a reliable point-to-point connection with built-in re-try logic
  74. 74. applications have a lot less errors to deal with
  75. 75. UDP user datagram protocol
  76. 76. TCP UDP
  77. 77. reminder: abstractions are leaky
  78. 78. 3-way handshake establishing a new connection
  79. 79. client server
  80. 80. client SYN x=42 server
  81. 81. client SYN x=42 SYN+ACK y=10,x=43 server
  82. 82. client SYN x=42 SYN+ACK y=10,x=43 ACK y=11 server
  83. 83. HTTP hypertext transfer protocol
  84. 84. http://www.example.com
  85. 85. http://www.example.com
  86. 86. clear text protocol
  87. 87. client request server
  88. 88. client request response server
  89. 89. Host: www.example.com User-Agent: Mozilla/5.0 (rv:29.0) Firefox/29.0 DNT: 1
  90. 90. Host: www.example.com User-Agent: Mozilla/5.0 (rv:29.0) Firefox/29.0 DNT: 1 <request body goes in here>
  91. 91. Content-Type: text/html Date: Thu, 22 May 2014 05:34:47 GMT Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT Content-Length: 1270 <!doctype html> <html> <head> <title>Example Domain</title> </head> <body> <div> <h1>Example Domain</h1> <p>This domain is established to be used for domain in examples without prior coordination </div> </body> </html>
  92. 92. 200 OK
  93. 93. 404 Not Found
  94. 94. $ curl http://www.example.com <!doctype html> <html> <head> <title>Example Domain</title> </head> <body> <div> <h1>Example Domain</h1> <p>This domain is established to be used for domain in examples without prior coordinatio </div> </body> </html>
  95. 95. $ curl --head http://www.example.com HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: max-age=604800 Content-Type: text/html Date: Thu, 22 May 2014 05:42:26 GMT Etag: "359670651" Expires: Thu, 29 May 2014 05:42:26 GMT Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT Server: ECS (cpm/F858) X-Cache: HIT x-ec-custom-error: 1 Content-Length: 1270
  96. 96. verbs (fancy word for commands)
  97. 97. GET
  98. 98. POST
  99. 99. GET /article/43228
  100. 100. GET /article/43228 GET /article/43228
  101. 101. GET /article/43228 POST /article/delete/last
  102. 102. GET /article/43228 POST /article/delete/last POST /article/delete/last
  103. 103. GET /article/43228 POST /item/20/buy POST /item/20/buy $$$ $$$
  104. 104. TLS transport layer security
  105. 105. SSL secure sockets layer
  106. 106. HTTPS hypertext transfer protocol secure
  107. 107. secure (sometimes)
  108. 108. client server (pk, sk)
  109. 109. client hello! server (pk, sk)
  110. 110. client hello! hello! pubkey server (pk, sk)
  111. 111. client hello! hello! pubkey server (pk, sk) session key
  112. 112. client hello! hello! pubkey i'm done!encryptpk (session key) server (pk, sk) session key
  113. 113. client hello! hello! pubkey i'm done!encryptpk (session key) server (pk, sk) session key session key
  114. 114. man-in-the-middle
  115. 115. client server (pk, sk)
  116. 116. client server (pk, sk) NSA (pk, sk)
  117. 117. client hello! server (pk, sk) NSA (pk, sk)
  118. 118. client hello! server (pk, sk) NSA (pk, sk) hello!
  119. 119. client hello! hello! pubkey server (pk, sk) NSA (pk, sk) hello!
  120. 120. client hello! hello! pubkey server (pk, sk) NSA (pk, sk) hello! hello! pubkey
  121. 121. client hello! hello! pubkey server (pk, sk) key NSA (pk, sk) hello! hello! pubkey
  122. 122. client hello! hello! pubkey i'm done!encrypt(key) server (pk, sk) key NSA (pk, sk) hello! hello! pubkey
  123. 123. client hello! hello! pubkey i'm done!encrypt(key) server (pk, sk) key NSA (pk, sk) hello! hello! pubkey key
  124. 124. client hello! hello! pubkey i'm done!encrypt(key) server (pk, sk) key NSA (pk, sk) hello! hello! pubkey i'm done!encrypt(key)key
  125. 125. client hello! hello! pubkey i'm done!encrypt(key) server (pk, sk) key NSA (pk, sk) hello! hello! pubkey i'm done!encrypt(key)key key
  126. 126. client hello! hello! pubkey i'm done!encrypt(key) server (pk, sk) key NSA (pk, sk) hello! hello! pubkey i'm done!encrypt(key)key key
  127. 127. authentication (of the server)
  128. 128. client hello! hello! pubkey server (pk, sk) session key
  129. 129. client hello! hello! signed pubkey server (pk, sk) session key verify signature
  130. 130. client hello! hello! signed pubkey server (pk, sk) session key verify signature i'm done!encryptpk (session key) session key
  131. 131. client hello! hello! signed pubkey server (pk, sk) NSA (pk, sk) hello! hello! signed pubkeykey
  132. 132. client hello! hello! signed pubkey server (pk, sk) NSA (pk, sk) hello! hello! signed pubkeykey abort!
  133. 133. how can you tell you're talking to the right person? (and not to the NSA)
  134. 134. trusted third-party certificate authority
  135. 135. trusted third-party certificate authority
  136. 136. EFF has found more than 650 certificate authorities in the wild
  137. 137. *.google.com
  138. 138. *.google.com
  139. 139. *.google.com
  140. 140. *.google.com 7 different domains
  141. 141. *.google.com 7 different domains
  142. 142. $100
  143. 143. $1,000 $100
  144. 144. $1,000$1,000 $100
  145. 145. HTML hypertext markup language
  146. 146. parsing
  147. 147. .png .jpg .js .css
  148. 148. resolve all hostnames establish TCP connections negotiate TLS session URL DNS IP TCP HTTP / TLS HTML
  149. 149. @fmarier francois@mozilla.com questions?
  150. 150. wanna know more? https://github.com/alex/what-happens-when/blob/master/README.rst USB protocol ARP resolution browser networking stack rendering engine HTML parsing CSS interpretation
  151. 151. Copyright © 2015 Francois Marier <francois@mozilla.com> This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. leaky pipe: https://www.flickr.com/photos/ifl/3920636654 leaky pipe with elephant: https://www.flickr.com/photos/rcrhee/10785374875 sky tower: https://www.flickr.com/photos/elisfanclub/6120863439 golden gate: https://www.flickr.com/photos/jeffgunn/6663212147 san jose: https://www.flickr.com/photos/the_tahoe_guy/3183673224 statue of liberty: https://www.flickr.com/photos/suewaters/7574642942 big ben: https://www.flickr.com/photos/timmorris/3103896345 bbc house: https://www.flickr.com/photos/redvers/532073098 fingers crossed: https://www.flickr.com/photos/bearpark/6861722073 prince charles : http://en.wikipedia.org/wiki/File:Prince_Charles_2012.jpg southern cross cable: https://en.wikipedia.org/wiki/File:Southern_Cross_Cable_route.svg image credits

×