Skip to content

Instantly share code, notes, and snippets.

@binshuohu
Created December 8, 2015 12:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save binshuohu/0ecd221f7d8aa2009c6e to your computer and use it in GitHub Desktop.
Save binshuohu/0ecd221f7d8aa2009c6e to your computer and use it in GitHub Desktop.
what happens when typing a url in a browser and hit return.
  1. 输入url.
  2. 浏览器尝试解析域名得到响应的ip. 浏览器会依次在浏览器, OS, 路由器上查询DNS缓存, 如果找到就可以停止继续查询. 如果没有找到对应域名的DNS缓存, 会发起一个对DNS查询的递归搜索.
  3. 获得对应服务器的IP后, 浏览器尝试建立一个TCP连接.
  4. 连接建立好之后, 浏览器发起一个HTTP GET请求, header中的Content-Type为'text/html'.
  5. web server接到这个HTTP请求后, 会尝试将请求转换为响应, 这中间可能包含了其他业务逻辑. 5.1 如果web server配置了反向代理, web server会根据uri将此请求路由到响应的服务器, 等待其响应后再将对应的HTTP Response转发返回给浏览器.
  6. 浏览器拿到HTTP响应后, 检查其Status Code, Content-type, encoding等包含在header中的信息, 然后尝试从body中解析html.
  7. 浏览器解析完毕html的基本结构后, 根据情况会发送额外的HTTP请求去获取其它还需要的资源, 例如css, js以及图片.

从WireShark抓包来看, 访问www.vpon.com.tw时, 在第一条HTTP Response返回了200状态码后, 浏览器又通过额外的HTTP GET去获取了js, css以及图片等静态资源. 此外还发送了两条POST请求.

http://edusagar.com/articles/view/70/What-happens-when-you-type-a-URL-in-browser

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment