I am trying to understand what things happen in the background when using a website OR basically what are the things that happen when a user interacts with a browser. I understand that this is a huge list and highly dependent on architecture and user actions etc, I am just trying to get a feel of major things and flush my misunderstandings and also use this to read more about stuff I don't understand.
As an exercise I am trying to note down things that happen in the background with respect to users action in a browser. Here is my attempt at this bit open ended but fun question:
User enters a url => browser checks if available in browser cache => DNS look up [root dns lookup => recursive dns => get ip ] => establish a tcp connection => send http req => get the static page from web server=> if authentication is required that happens [either read cookies from browser OR ask user to enter credentials] => somehow gets the dynamic elements as well [how ? , there is some lazy initilization here ?] => Then user performs some action[clicks a link or something] => check browser cache => if not avail [take the input parameters and embed in the url in some manner [may be encrypt some things if required] => hits a load balancer => directed to a application server [depending on how the LB selects a host] => application server cache is checked [memcached or some kind of caching, not sure if this "normally" happens here or at some other level] => application server tries to understand the request [if its a service listening on some port, http port 80 it will get the URL and parse to perform some operations] => database is queried if required to => there might again be connection mgmt/caching/parallel queries etc here => database returns back the result to app server => app server creats a result payload and headers [http] => sends it to browser for rendering => browser cache is updated => user reacts to the response.
I have not considered retries/failures and how they are handled, but I would like to get some input there as well in a general sense
Note:
I am looking at thin开发者_开发知识库gs in general, I am sure that few companies might do it in different way etc etc. I will like to hear alternatives as well though!.- This is an effort to try and get more perspective and read on few things that will help me in general.
- Clearly I have made an honest attempt
- I also hope this would help others looking at the question in general to learn something new.
- I am not asking for opinions etc, so this aint a completely open ended question [not everything is right though there are many options]
Thanks !
There is no difference between static or dynamic for browser. Browser makes HTTP request and gets HTTP response. If response is an HTML page, then browser renders HTML ,applies styles, and executes JavaScript code that come with page. This page can by dynamic or static - browser don't care! The side is care - is server side. If page is static, than HTTP server will just take page from disk and send it to client as HTTP response. If page is dynamic, than HTTP server will call some application and will ask this application to give requested resource. This application can be an PHP module for Apache(http server), or ASP.net for IIS, or even your C++ code that will generate any content you want. How exactly page or resource (HTTP response can be also xml, or image etc) will be constructed depends on used application (server side technology).
As example, if you are using PHP - HTTP server will detect that requested resource has extension .php, server will pass this PHP file to PHP module for processing, and result will be sent to HTTP client(browser) as response.
When user perform some action, this is again just usual HTTP request. HTTP method GET and POST (look for article about HTTP on Wikipedia) is used to pass some input from server to client. Page can contain some heavy JS, that will make page look more like desktop application (rich controls, dynamically reacting on user action without request to server, or communicate with server in background), but this is not necessary for web application to be web application (for web site to by dynamic). It can be good old static HTML with HTML forms, and some server side code.
Web application is abstract entity that may consist from many HTTP resources (different URLs for server to response). Web application also is client-side code that communicates with server-side code thru HTTP with help of HTTP client(browser) and HTTP server. Web application is not some stand alone part, that only comes to work when user perform some action.
Web-service may fits this description - as thing that usually don't care about pages, and comes only when some action required. Its special type of web application, that expose some API thru HTTP(usually). You can request some resource, and pass some parameter, and you will get response with some result. It's same web application but without pages. But web-service usually part of big web application with pages, or even other part of same web-application (depending on how you look at this). It can be same server-side technology, and same HTTP server. And it's not necessary to create web-service if you want to make some web-application (dynamic web site).
Server-side part of web application can also communicate with some database, but it's not necessary too. There can be real database, or just some text files on disk. And browser, client side code and HTTP server also don't care about database or source where server side code takes data.
Cache, load balancer, etc - it's just additional elements that usually are transparent for all this general stuff.
Cookies is passed with every HTTP request to HTTP server, and if requested resource is not static page, that HTTP server will pass them further to server-side code/application(part). And its usually how authentication and authorization works - cookies has contain info about session, and there is some data associated with session contains on server side - it can be ID of user, so server-side code will recognize user on every request.
精彩评论