CINXE.COM
Web framework - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Web framework - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"d3c91dbe-b35f-49f8-b037-e7c3eff030e5","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Web_framework","wgTitle":"Web framework","wgCurRevisionId":1253898439,"wgRevisionId":1253898439,"wgArticleId":2342095,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Articles with short description","Short description is different from Wikidata","All articles with unsourced statements","Articles with unsourced statements from November 2021","Articles with unsourced statements from January 2017","Web frameworks"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Web_framework","wgRelevantArticleId":2342095,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true, "wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q1330336","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false, "wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","ext.popups","ext.visualEditor.desktopArticleTarget.init", "ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.quicksurveys.init","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Web framework - Wikipedia"> <meta property="og:type" content="website"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Web_framework"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Web_framework&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Web_framework"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Web_framework rootpage-Web_framework skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Web+framework" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Web+framework" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Web+framework" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Web+framework" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-History" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>History</span> </div> </a> <ul id="toc-History-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Types_of_framework_architectures" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Types_of_framework_architectures"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Types of framework architectures</span> </div> </a> <button aria-controls="toc-Types_of_framework_architectures-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Types of framework architectures subsection</span> </button> <ul id="toc-Types_of_framework_architectures-sublist" class="vector-toc-list"> <li id="toc-Model–view–controller_(MVC)" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Model–view–controller_(MVC)"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Model–view–controller (MVC)</span> </div> </a> <ul id="toc-Model–view–controller_(MVC)-sublist" class="vector-toc-list"> <li id="toc-Push-based_vs._pull-based" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Push-based_vs._pull-based"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1.1</span> <span>Push-based vs. pull-based</span> </div> </a> <ul id="toc-Push-based_vs._pull-based-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Three-tier_organization" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Three-tier_organization"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Three-tier organization</span> </div> </a> <ul id="toc-Three-tier_organization-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Framework_applications" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Framework_applications"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Framework applications</span> </div> </a> <button aria-controls="toc-Framework_applications-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Framework applications subsection</span> </button> <ul id="toc-Framework_applications-sublist" class="vector-toc-list"> <li id="toc-General-purpose_website_frameworks" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#General-purpose_website_frameworks"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>General-purpose website frameworks</span> </div> </a> <ul id="toc-General-purpose_website_frameworks-sublist" class="vector-toc-list"> <li id="toc-Server-side" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Server-side"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1.1</span> <span>Server-side</span> </div> </a> <ul id="toc-Server-side-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Client-side" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Client-side"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1.2</span> <span>Client-side</span> </div> </a> <ul id="toc-Client-side-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </li> <li id="toc-Features" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Features"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Features</span> </div> </a> <button aria-controls="toc-Features-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Features subsection</span> </button> <ul id="toc-Features-sublist" class="vector-toc-list"> <li id="toc-Web_template_system" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Web_template_system"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>Web template system</span> </div> </a> <ul id="toc-Web_template_system-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Caching" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Caching"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>Caching</span> </div> </a> <ul id="toc-Caching-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Security" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Security"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.3</span> <span>Security</span> </div> </a> <ul id="toc-Security-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Database_access,_mapping_and_configuration" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Database_access,_mapping_and_configuration"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.4</span> <span>Database access, mapping and configuration</span> </div> </a> <ul id="toc-Database_access,_mapping_and_configuration-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-URL_mapping" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#URL_mapping"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.5</span> <span>URL mapping</span> </div> </a> <ul id="toc-URL_mapping-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-AJAX" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#AJAX"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.6</span> <span>AJAX</span> </div> </a> <ul id="toc-AJAX-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Web_services" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Web_services"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.7</span> <span>Web services</span> </div> </a> <ul id="toc-Web_services-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Web_resources" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Web_resources"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.8</span> <span>Web resources</span> </div> </a> <ul id="toc-Web_resources-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Web framework</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 21 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-21" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">21 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%A5%D8%B7%D8%A7%D8%B1_%D8%B9%D9%85%D9%84_%D9%88%D9%8A%D8%A8" title="إطار عمل ويب – Arabic" lang="ar" hreflang="ar" data-title="إطار عمل ويب" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/%D0%92%D1%8D%D0%B1-%D1%84%D1%80%D1%8D%D0%B9%D0%BC%D0%B2%D0%BE%D1%80%D0%BA" title="Вэб-фрэймворк – Belarusian" lang="be" hreflang="be" data-title="Вэб-фрэймворк" data-language-autonym="Беларуская" data-language-local-name="Belarusian" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Entorn_de_treball_per_a_aplicacions_web" title="Entorn de treball per a aplicacions web – Catalan" lang="ca" hreflang="ca" data-title="Entorn de treball per a aplicacions web" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Webframework" title="Webframework – German" lang="de" hreflang="de" data-title="Webframework" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Framework_para_aplicaciones_web" title="Framework para aplicaciones web – Spanish" lang="es" hreflang="es" data-title="Framework para aplicaciones web" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%DA%86%D8%A7%D8%B1%DA%86%D9%88%D8%A8_%D9%86%D8%B1%D9%85%E2%80%8C%D8%A7%D9%81%D8%B2%D8%A7%D8%B1%DB%8C_%D8%AA%D8%AD%D8%AA_%D9%88%D8%A8" title="چارچوب نرمافزاری تحت وب – Persian" lang="fa" hreflang="fa" data-title="چارچوب نرمافزاری تحت وب" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Framework_Web" title="Framework Web – French" lang="fr" hreflang="fr" data-title="Framework Web" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%9B%B9_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC" title="웹 프레임워크 – Korean" lang="ko" hreflang="ko" data-title="웹 프레임워크" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Kerangka_kerja_aplikasi_web" title="Kerangka kerja aplikasi web – Indonesian" lang="id" hreflang="id" data-title="Kerangka kerja aplikasi web" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Framework_per_applicazioni_web" title="Framework per applicazioni web – Italian" lang="it" hreflang="it" data-title="Framework per applicazioni web" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-lfn mw-list-item"><a href="https://lfn.wikipedia.org/wiki/Sistem_de_montur_ueb" title="Sistem de montur ueb – Lingua Franca Nova" lang="lfn" hreflang="lfn" data-title="Sistem de montur ueb" data-language-autonym="Lingua Franca Nova" data-language-local-name="Lingua Franca Nova" class="interlanguage-link-target"><span>Lingua Franca Nova</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%B5%E0%B5%86%E0%B4%AC%E0%B5%8D_%E0%B4%AB%E0%B5%8D%E0%B4%B0%E0%B5%86%E0%B4%AF%E0%B4%BF%E0%B4%82%E0%B4%B5%E0%B5%BC%E0%B4%95%E0%B5%8D%E0%B4%95%E0%B5%8D" title="വെബ് ഫ്രെയിംവർക്ക് – Malayalam" lang="ml" hreflang="ml" data-title="വെബ് ഫ്രെയിംവർക്ക്" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF" title="Webアプリケーションフレームワーク – Japanese" lang="ja" hreflang="ja" data-title="Webアプリケーションフレームワーク" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Framework_do_aplikacji_webowych" title="Framework do aplikacji webowych – Polish" lang="pl" hreflang="pl" data-title="Framework do aplikacji webowych" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Framework_para_aplica%C3%A7%C3%B5es_web" title="Framework para aplicações web – Portuguese" lang="pt" hreflang="pt" data-title="Framework para aplicações web" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-kaa mw-list-item"><a href="https://kaa.wikipedia.org/wiki/Veb_freymvork" title="Veb freymvork – Kara-Kalpak" lang="kaa" hreflang="kaa" data-title="Veb freymvork" data-language-autonym="Qaraqalpaqsha" data-language-local-name="Kara-Kalpak" class="interlanguage-link-target"><span>Qaraqalpaqsha</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%B1-%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%B2%D0%BE%D1%80%D0%BA" title="Веб-фреймворк – Russian" lang="ru" hreflang="ru" data-title="Веб-фреймворк" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%92%D0%B5%D0%B1-%D1%84%D1%80%D0%B5%D1%98%D0%BC%D0%B2%D0%BE%D1%80%D0%BA" title="Веб-фрејмворк – Serbian" lang="sr" hreflang="sr" data-title="Веб-фрејмворк" data-language-autonym="Српски / srpski" data-language-local-name="Serbian" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Web_uygulama_iskeleti" title="Web uygulama iskeleti – Turkish" lang="tr" hreflang="tr" data-title="Web uygulama iskeleti" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9A%D0%B0%D1%80%D0%BA%D0%B0%D1%81_%D0%B2%D0%B5%D0%B1%D0%B7%D0%B0%D1%81%D1%82%D0%BE%D1%81%D1%83%D0%BD%D0%BA%D1%96%D0%B2" title="Каркас вебзастосунків – Ukrainian" lang="uk" hreflang="uk" data-title="Каркас вебзастосунків" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Web%E5%BA%94%E7%94%A8%E6%A1%86%E6%9E%B6" title="Web应用框架 – Chinese" lang="zh" hreflang="zh" data-title="Web应用框架" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q1330336#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Web_framework" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Web_framework" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Web_framework"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Web_framework&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Web_framework&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Web_framework"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Web_framework&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Web_framework&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Web_framework" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Web_framework" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Web_framework&oldid=1253898439" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Web_framework&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Web_framework&id=1253898439&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWeb_framework"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWeb_framework"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Web_framework&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Web_framework&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Web_frameworks" hreflang="en"><span>Wikimedia Commons</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q1330336" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Software framework to support the development of websites</div> <p>A <b>web framework</b> (<b>WF</b>) or <b>web application framework</b> (<b>WAF</b>) is a <a href="/wiki/Software_framework" title="Software framework">software framework</a> that is designed to support the development of <a href="/wiki/Web_application" title="Web application">web applications</a> including web services, <a href="/wiki/Web_resource" title="Web resource">web resources</a>, and <a href="/wiki/Web_API" title="Web API">web APIs</a>. Web frameworks provide a standard way to build and deploy web applications on the <a href="/wiki/World_Wide_Web" title="World Wide Web">World Wide Web</a>. Web frameworks aim to automate the overhead associated with common activities performed in <a href="/wiki/Web_development" title="Web development">web development</a>. For example, many web frameworks provide <a href="/wiki/Library_(computing)" title="Library (computing)">libraries</a> for <a href="/wiki/Database" title="Database">database</a> access, <a href="/wiki/Template_processor" title="Template processor">templating</a> frameworks, and <a href="/wiki/Session_(computer_science)" title="Session (computer science)">session</a> management, and they often promote <a href="/wiki/Code_reuse" title="Code reuse">code reuse</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Although they often target development of <a href="/wiki/Dynamic_web_page" title="Dynamic web page">dynamic web sites</a>, they are also applicable to <a href="/wiki/Static_web_page" title="Static web page">static websites</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="History">History</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=1" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Rich_web_application" class="mw-redirect" title="Rich web application">Rich web application</a></div> <p>As the design of the <a href="/wiki/World_Wide_Web" title="World Wide Web">World Wide Web</a> was not inherently dynamic, early <a href="/wiki/Hypertext" title="Hypertext">hypertext</a> consisted of hand-coded <a href="/wiki/HTML" title="HTML">HTML</a> text files that were published on <a href="/wiki/Web_servers" class="mw-redirect" title="Web servers">web servers</a>. Any modifications to published pages needed to be performed by the pages' author. In 1993, the <a href="/wiki/Common_Gateway_Interface" title="Common Gateway Interface">Common Gateway Interface</a> (CGI) standard was introduced for interfacing external applications with web servers, to provide a <a href="/wiki/Dynamic_web_page" title="Dynamic web page">dynamic web page</a> that reflected user inputs.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> </p><p>Original implementations of the CGI interface typically had adverse effects on the server load however, because each request started a separate <a href="/wiki/Process_(computing)" title="Process (computing)">process</a>.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> More recent implementations utilize persistent processes amongst other techniques to reduce the footprint in the server's resources and offer a general performance boost.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (November 2021)">citation needed</span></a></i>]</sup> </p><p>In 1995, fully integrated server/language development environments first emerged and new web-specific languages were introduced, such as <a href="/wiki/ColdFusion" class="mw-redirect" title="ColdFusion">ColdFusion</a>, <a href="/wiki/PHP" title="PHP">PHP</a>, and <a href="/wiki/Active_Server_Pages" title="Active Server Pages">Active Server Pages</a>.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p><p>Although the vast majority of languages for creating dynamic web pages have <a href="/wiki/Library_(computing)" title="Library (computing)">libraries</a> to help with common tasks, web applications often require specific libraries for particular tasks, such as creating <a href="/wiki/HTML" title="HTML">HTML</a> (for example, <a href="/wiki/Jakarta_Faces" title="Jakarta Faces">Jakarta Faces</a>).<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p><p>In the late 1990s, mature, "full stack" frameworks began to appear, that often gathered multiple libraries useful for <a href="/wiki/Web_development" title="Web development">web development</a> into a single cohesive <a href="/wiki/Software_stack" class="mw-redirect" title="Software stack">software stack</a> for web developers to use.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading2"><h2 id="Types_of_framework_architectures">Types of framework architectures</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=2" title="Edit section: Types of framework architectures"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Most web frameworks are based on the <a href="/wiki/Model%E2%80%93view%E2%80%93controller" title="Model–view–controller">model–view–controller</a> (MVC) <a href="/wiki/Architectural_pattern" title="Architectural pattern">pattern</a>.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading3"><h3 id="Model–view–controller_(MVC)"><span id="Model.E2.80.93view.E2.80.93controller_.28MVC.29"></span>Model–view–controller (MVC)</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=3" title="Edit section: Model–view–controller (MVC)"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Model%E2%80%93view%E2%80%93controller" title="Model–view–controller">Model–view–controller</a></div> <p>Many frameworks follow the MVC <a href="/wiki/Architectural_pattern_(computer_science)" class="mw-redirect" title="Architectural pattern (computer science)">architectural pattern</a> to separate the <a href="/wiki/Data_model" title="Data model">data model</a> into <a href="/wiki/Business_rule" title="Business rule">business rules</a> (the "controller") and the <a href="/wiki/User_interface" title="User interface">user interface</a> (the "view"). This is generally considered a good practice as it <a href="/wiki/Separation_of_concerns" title="Separation of concerns">modularizes code</a>, promotes <a href="/wiki/Code_reuse" title="Code reuse">code reuse</a>, and allows multiple interfaces to be applied. In web applications, this permits different views to be presented, for example serving different <a href="/wiki/Web_page" title="Web page">web pages</a> for mobile vs. desktop browsers, or providing machine-readable <a href="/wiki/Web_service" title="Web service">web service</a> interfaces. </p> <div class="mw-heading mw-heading4"><h4 id="Push-based_vs._pull-based">Push-based vs. pull-based</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=4" title="Edit section: Push-based vs. pull-based"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Most MVC frameworks follow a push-based architecture also called "action-based". These frameworks use actions that do the required processing, and then "push" the data to the view layer to render the results.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> An alternative to this is pull-based architecture, sometimes also called "component-based". These frameworks start with the view layer, which can then "pull" results from multiple controllers as needed. In this architecture, multiple controllers can be involved with a single view. </p> <div class="mw-heading mw-heading3"><h3 id="Three-tier_organization">Three-tier organization</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=5" title="Edit section: Three-tier organization"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In <a href="/wiki/Three-tier_architecture" class="mw-redirect" title="Three-tier architecture">three-tier organization</a>, applications are structured around three physical tiers: client, application, and database.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> The database is normally an <a href="/wiki/Relational_database_management_system" class="mw-redirect" title="Relational database management system">RDBMS</a>. The application contains the business logic, running on a server and communicates with the client using <a href="/wiki/HTTP" title="HTTP">HTTP</a>.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> The client on web applications is a web browser that runs HTML generated by the application layer.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> The term should not be confused with MVC, where, unlike in three-tier architecture, it is considered a good practice to keep business logic away from the controller, the "middle layer".<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Framework_applications">Framework applications</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=6" title="Edit section: Framework applications"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Frameworks are built to support the construction of internet applications based on a single programming language, ranging in focus from general purpose tools such as Zend Framework and Ruby on Rails, which augment the capabilities of a specific language, to native-language programmable packages built around a specific user application, such as <a href="/wiki/Content_management_system" title="Content management system">content management systems</a> (CMS), some mobile development tools and some portal tools.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="General-purpose_website_frameworks">General-purpose website frameworks</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=7" title="Edit section: General-purpose website frameworks"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Web frameworks must function according to the architectural rules of browsers and <a href="/wiki/Communication_protocol" title="Communication protocol">protocols</a> such as <a href="/wiki/Hypertext_Transfer_Protocol" class="mw-redirect" title="Hypertext Transfer Protocol">HTTP</a>, which is <a href="/wiki/Stateless_protocol" title="Stateless protocol">stateless</a>. Webpages are served up by a <a href="/wiki/Server_(computing)" title="Server (computing)">server</a> and can then be modified by the browser using <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a>. Either approach has its advantages and disadvantages.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p><p>Server-side page changes typically require that the page be refreshed, but allow any language to be used and more computing power to be utilized. Client-side changes allow the page to be updated in small chunks which feels like a desktop application, but are limited to JavaScript and run in the user's browser, which may have limited computing power. Some mix of the two is typically used.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> Applications which make heavy use of JavaScript and only refresh parts of the page, are called <a href="/wiki/Single-page_application" title="Single-page application">single-page applications</a> and typically make use of a client-side JavaScript web framework to organize the code.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading4"><h4 id="Server-side">Server-side</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=8" title="Edit section: Server-side"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1184024115">.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}</style><div class="div-col" style="column-width: 30em;"> <ul><li><a href="/wiki/Apache_Wicket" title="Apache Wicket">Apache Wicket</a></li> <li><a href="/wiki/ASP.NET_Core" title="ASP.NET Core">ASP.NET Core</a></li> <li><a href="/wiki/CakePHP" title="CakePHP">CakePHP</a></li> <li><a href="/wiki/Catalyst_(software)" title="Catalyst (software)">Catalyst</a></li> <li><a href="/wiki/CodeIgniter" title="CodeIgniter">CodeIgniter</a></li> <li><a href="/wiki/CppCMS" title="CppCMS">CppCMS</a></li> <li><a href="/wiki/Django_(web_framework)" title="Django (web framework)">Django</a></li> <li><a href="/wiki/Express.js" title="Express.js">Express.js</a></li> <li><a href="/wiki/Flask_(web_framework)" title="Flask (web framework)">Flask</a></li> <li><a href="/wiki/Grails_(framework)" title="Grails (framework)">Grails</a></li> <li><a href="/wiki/Jam.py_(web_framework)" title="Jam.py (web framework)">Jam.py</a></li> <li><a href="/wiki/Laravel" title="Laravel">Laravel</a></li> <li><a href="/wiki/Mojolicious" title="Mojolicious">Mojolicious</a></li> <li><a href="/wiki/Pop_PHP_Framework" title="Pop PHP Framework">Pop PHP Framework</a></li> <li><a href="/wiki/Phoenix_(web_framework)" title="Phoenix (web framework)">Phoenix</a></li> <li><a href="/wiki/Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a></li> <li><a href="/wiki/Sails.js" title="Sails.js">Sails.js</a></li> <li><a href="/wiki/Symfony" title="Symfony">Symfony</a></li> <li><a href="/wiki/Spring_MVC" class="mw-redirect" title="Spring MVC">Spring MVC</a></li> <li><a href="/wiki/Wt_(web_toolkit)" title="Wt (web toolkit)">Wt (web toolkit)</a></li> <li><a href="/wiki/Yii" title="Yii">Yii</a></li> <li><a href="/wiki/Zend_Framework" class="mw-redirect" title="Zend Framework">Zend Framework</a></li></ul> </div> <div class="mw-heading mw-heading4"><h4 id="Client-side">Client-side</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=9" title="Edit section: Client-side"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Single-page_application" title="Single-page application">Single-page application</a></div> <p>Examples include <a href="/wiki/Backbone.js" title="Backbone.js">Backbone.js</a>, <a href="/wiki/AngularJS" title="AngularJS">AngularJS</a>, <a href="/wiki/Angular_(web_framework)" title="Angular (web framework)">Angular</a>, <a href="/wiki/Ember.js" title="Ember.js">Ember.js</a>, <a href="/wiki/React_(software)" title="React (software)">ReactJS</a>, <a href="/wiki/JQuery_UI" title="JQuery UI">jQuery UI</a>, <a href="/wiki/Svelte" title="Svelte">Svelte</a>, and <a href="/wiki/Vue.js" title="Vue.js">Vue.js</a>.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Features">Features</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=10" title="Edit section: Features"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Frameworks typically set the <a href="/wiki/Control_flow" title="Control flow">control flow</a> of a program and allow the user of the framework to "hook into" that flow by exposing various events.<sup id="cite_ref-:0_18-0" class="reference"><a href="#cite_note-:0-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> This "<a href="/wiki/Inversion_of_control" title="Inversion of control">inversion of control</a>" design pattern is considered to be a defining principle of a framework, and benefits the code by enforcing a common flow for a team which everyone can customize in similar ways.<sup id="cite_ref-:0_18-1" class="reference"><a href="#cite_note-:0-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> For example, some popular "microframeworks" such as Ruby's <a href="/wiki/Sinatra_(software)" title="Sinatra (software)">Sinatra</a> (which inspired <a href="/wiki/Express.js" title="Express.js">Express.js</a>) allow for "middleware" hooks prior to and after HTTP requests. These middleware functions can be anything, and allow the user to define logging, authentication and session management, and redirecting.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Web_template_system">Web template system</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=11" title="Edit section: Web template system"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Web_template_system" title="Web template system">Web template system</a></div> <div class="mw-heading mw-heading3"><h3 id="Caching">Caching</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=12" title="Edit section: Caching"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Web_cache" title="Web cache">Web cache</a></div> <p>Web caching is the <a href="/wiki/Web_cache" title="Web cache">caching</a> of <a href="/wiki/World_Wide_Web" title="World Wide Web">web</a> <a href="/wiki/Electronic_document" title="Electronic document">documents</a> in order to reduce <a href="/wiki/Bandwidth_(computing)" title="Bandwidth (computing)">bandwidth</a> usage, <a href="/wiki/Web_server" title="Web server">server</a> <a href="/wiki/Load_(computing)" title="Load (computing)">load</a>, and perceived "<a href="/wiki/Latency_(engineering)" title="Latency (engineering)">lag</a>". A web cache stores copies of documents passing through it; subsequent requests may be satisfied from the cache if certain conditions are met. Some application frameworks provide mechanisms for caching documents and bypassing various stages of the page's preparation, such as database access or template interpretation.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading3"><h3 id="Security">Security</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=13" title="Edit section: Security"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Web_application_security" class="mw-redirect" title="Web application security">Web application security</a></div> <p>Some web frameworks come with <a href="/wiki/Authentication" title="Authentication">authentication</a> and <a href="/wiki/Authorization" title="Authorization">authorization</a> frameworks, that enable the <a href="/wiki/Web_server" title="Web server">web server</a> to identify the users of the application, and restrict access to functions based on some defined criteria. <a href="/wiki/Drupal" title="Drupal">Drupal</a> is one example that provides role-based access to pages, and provides a web-based interface for creating users and assigning them roles.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading3"><h3 id="Database_access,_mapping_and_configuration"><span id="Database_access.2C_mapping_and_configuration"></span>Database access, mapping and configuration</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=14" title="Edit section: Database access, mapping and configuration"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Many web frameworks create a unified <a href="/wiki/API" title="API">API</a> to a database backend, enabling web applications to work with a variety of databases with no code changes, and allowing programmers to work with higher-level concepts. Additionally, some <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented</a> frameworks contain mapping tools to provide <a href="/wiki/Object-relational_mapping" class="mw-redirect" title="Object-relational mapping">object-relational mapping</a>, which maps <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">objects</a> to <a href="/wiki/Tuple" title="Tuple">tuples</a>.<sup id="cite_ref-ActiveRecordBasics_20-0" class="reference"><a href="#cite_note-ActiveRecordBasics-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> </p><p>Some frameworks minimize web application configuration through the use of <a href="/wiki/Introspection_(computer_science)" class="mw-redirect" title="Introspection (computer science)">introspection</a> and/or following well-known conventions. For example, many Java frameworks use <a href="/wiki/Hibernate_(Java)" class="mw-redirect" title="Hibernate (Java)">Hibernate</a> as a persistence layer, which can generate a database schema at runtime capable of persisting the necessary information. This allows the application designer to design business objects without needing to explicitly define a database schema. Frameworks such as <a href="/wiki/Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a> can also work in reverse, that is, define properties of model objects at runtime based on a database schema.<sup id="cite_ref-ActiveRecordBasics_20-1" class="reference"><a href="#cite_note-ActiveRecordBasics-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> </p><p>Other features web frameworks may provide include <a href="/wiki/Database_transaction" title="Database transaction">transactional support</a><sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> and <a href="/wiki/Data_migration" title="Data migration">database migration tools</a>.<sup id="cite_ref-ActiveRecordBasics_20-2" class="reference"><a href="#cite_note-ActiveRecordBasics-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="URL_mapping">URL mapping</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=15" title="Edit section: URL mapping"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/Front_controller" title="Front controller">Front controller</a> and <a href="/wiki/URL_redirection" title="URL redirection">URL redirection</a></div> <p>A framework's <a href="/wiki/Uniform_Resource_Locator" class="mw-redirect" title="Uniform Resource Locator">URL</a> mapping or routing facility is the mechanism by which the framework interprets URLs. Some frameworks, such as Drupal and Django, match the provided URL against pre-determined patterns using <a href="/wiki/Regular_expression" title="Regular expression">regular expressions</a>, while some others use <a href="/wiki/Rewriting" title="Rewriting">rewriting</a> techniques to translate the provided URL into one that the underlying engine will recognize. Another technique is that of <a href="/wiki/Graph_traversal" title="Graph traversal">graph traversal</a> such as used by <a href="/wiki/Zope" title="Zope">Zope</a>, where a URL is decomposed in steps that traverse an object graph (of models and views).<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p><p>A URL mapping system that uses pattern matching or rewriting to route and handle requests allows for <a href="/wiki/URL_shortening" title="URL shortening">shorter</a> more "<a href="/wiki/Friendly_URL" class="mw-redirect" title="Friendly URL">friendly URLs</a>" to be used, increasing the simplicity of the site and allowing for better indexing by search engines. For example, a URL that ends with "/page.cgi?cat=science&topic=physics" could be changed to simply "/page/science/physics". This makes the URL easier for people to remember, read and write, and provides search engines with better information about the structural layout of the site. A graph traversal approach also tends to result in the creation of friendly URLs. A shorter URL such as "/page/science" tends to exist by default as that is simply a shorter form of the longer traversal to "/page/science/physics".<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading3"><h3 id="AJAX">AJAX</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=16" title="Edit section: AJAX"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Ajax_framework" class="mw-redirect" title="Ajax framework">Ajax framework</a></div> <p><a href="/wiki/Ajax_(programming)" title="Ajax (programming)">Ajax</a>, shorthand for "<i><a href="/wiki/Asynchronous_I/O" title="Asynchronous I/O">Asynchronous</a> <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a> and <a href="/wiki/XML" title="XML">XML</a></i>", is a web development technique for creating web applications. The intent is to make web pages feel more responsive by exchanging small amounts of data with the server behind the scenes, so that the entire web page does not have to be reloaded each time the user requests a change. This is intended to increase a web page's interactivity, speed, maintainability, and <a href="/wiki/Usability" title="Usability">usability</a>.<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> </p><p>Due to the complexity of Ajax programming in JavaScript, there are numerous <a href="/wiki/Ajax_framework" class="mw-redirect" title="Ajax framework">Ajax frameworks</a> that exclusively deal with Ajax support. Some Ajax frameworks are even embedded as a part of larger frameworks. For example, the <a href="/wiki/JQuery" title="JQuery">jQuery</a> <a href="/wiki/JavaScript_library" title="JavaScript library">JavaScript library</a> is included in Ruby on Rails.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p><p>With the increased interest in developing "<a href="/wiki/Web_2.0" title="Web 2.0">Web 2.0</a>" <a href="/wiki/Rich_web_application" class="mw-redirect" title="Rich web application">rich web applications</a>, the complexity of programming directly in Ajax and JavaScript has become so apparent that compiler technology has stepped in, to allow developers to code in high-level languages such as Java, Python and Ruby. The first of these compilers was <a href="/wiki/Morfik" title="Morfik">Morfik</a> followed by <a href="/wiki/Google_Web_Toolkit" title="Google Web Toolkit">Google Web Toolkit</a>, with ports to Python and Ruby in the form of <a href="/wiki/Pyjs" title="Pyjs">Pyjs</a> and RubyJS following some time after. These compilers and their associated widget set libraries make the development of rich media Ajax applications much more akin to that of developing desktop applications.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading3"><h3 id="Web_services">Web services</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=17" title="Edit section: Web services"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Web_service" title="Web service">Web service</a></div> <p>Some frameworks provide tools for creating and providing web services. These utilities may offer similar tools as the rest of the web application.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Web_resources">Web resources</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=18" title="Edit section: Web resources"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Web_resource" title="Web resource">Web resource</a></div> <p>A number of newer <a href="/wiki/Web_2.0" title="Web 2.0">Web 2.0</a> <a href="/wiki/Representational_state_transfer" class="mw-redirect" title="Representational state transfer">RESTful</a> frameworks are now providing <a href="/wiki/Resource-oriented_architecture" title="Resource-oriented architecture">resource-oriented architecture</a> (ROA) infrastructure for building collections of resources in a sort of <a href="/wiki/Semantic_Web" title="Semantic Web">Semantic Web</a> <a href="/wiki/Ontology_engineering" title="Ontology engineering">ontology</a>, based on concepts from <a href="/wiki/Resource_Description_Framework" title="Resource Description Framework">Resource Description Framework</a> (RDF).<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (January 2017)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=19" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1184024115"><div class="div-col"> <ul><li><a href="/wiki/Comparison_of_JavaScript-based_web_frameworks" title="Comparison of JavaScript-based web frameworks">Comparison of JavaScript-based web frameworks</a> (client-side)</li> <li><a href="/wiki/Comparison_of_server-side_web_frameworks" title="Comparison of server-side web frameworks">Comparison of server-side web frameworks</a></li> <li><a href="/wiki/Application_server" title="Application server">Application server</a></li> <li><a href="/wiki/Application_framework" title="Application framework">Application framework</a></li> <li><a href="/wiki/Application_security" title="Application security">Application security</a></li> <li><a href="/wiki/Convention_over_configuration" title="Convention over configuration">Convention over configuration</a></li> <li><a href="/wiki/Don%27t_repeat_yourself" title="Don't repeat yourself">Don't repeat yourself</a> (DRY)</li> <li><a href="/wiki/List_of_web_service_frameworks" title="List of web service frameworks">List of web service frameworks</a></li> <li><a href="/wiki/Rich_web_application" class="mw-redirect" title="Rich web application">Rich web application</a> (obsolete) <ul><li><a href="/wiki/List_of_rich_web_application_frameworks" title="List of rich web application frameworks">List of rich web application frameworks</a></li></ul></li> <li><a href="/wiki/Solution_stack" title="Solution stack">Solution stack</a></li> <li><a href="/wiki/Mobile_development_framework" title="Mobile development framework">Mobile development framework</a></li></ul> </div> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Web_framework&action=edit&section=20" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist"> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite id="CITEREFMultiple_(wiki)" class="citation web cs1">Multiple (wiki). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150723163302/http://docforge.com/wiki/Web_application_framework">"Web application framework"</a>. <i>Docforge</i>. Archived from <a rel="nofollow" class="external text" href="http://docforge.com/wiki/Web_application_framework">the original</a> on 2015-07-23.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Docforge&rft.atitle=Web+application+framework&rft.au=Multiple+%28wiki%29&rft_id=http%3A%2F%2Fdocforge.com%2Fwiki%2FWeb_application_framework&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span> </span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.staticgen.com/">"Top Open-Source Static Site Generators"</a>. <i>StaticGen</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=StaticGen&rft.atitle=Top+Open-Source+Static+Site+Generators&rft_id=https%3A%2F%2Fwww.staticgen.com%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090409213905/http://hoohoo.ncsa.uiuc.edu/cgi/intro.html">"CGI: Common Gateway Interface"</a>. Archived from <a rel="nofollow" class="external text" href="http://hoohoo.ncsa.uiuc.edu/cgi/intro.html">the original</a> on 2009-04-09.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=CGI%3A+Common+Gateway+Interface&rft_id=http%3A%2F%2Fhoohoo.ncsa.uiuc.edu%2Fcgi%2Fintro.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.ibm.com/docs/en/i/7.4?topic=functionality-cgi">"CGI"</a>. <i>www.ibm.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-05-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.ibm.com&rft.atitle=CGI&rft_id=https%3A%2F%2Fwww.ibm.com%2Fdocs%2Fen%2Fi%2F7.4%3Ftopic%3Dfunctionality-cgi&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFThomson2003" class="citation web cs1">Thomson, Kris (2003-10-29). <a rel="nofollow" class="external text" href="https://www.theserverside.com/discussions/thread/22143.html">"Clarification on MVC= Pull and MVC Push"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2007-07-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Clarification+on+MVC%3D+Pull+and+MVC+Push&rft.date=2003-10-29&rft.aulast=Thomson&rft.aufirst=Kris&rft_id=https%3A%2F%2Fwww.theserverside.com%2Fdiscussions%2Fthread%2F22143.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMicrosoft" class="citation web cs1">Microsoft. <a rel="nofollow" class="external text" href="http://msdn.microsoft.com/en-us/library/ff647546.aspx">"Three-tiered distribution"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-19</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Three-tiered+distribution&rft.au=Microsoft&rft_id=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fff647546.aspx&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFOracle" class="citation web cs1">Oracle. <a rel="nofollow" class="external text" href="http://download.oracle.com/docs/cd/E10316_01/cs/cs_doc_10/documentation/integrator/clustering_concepts_10en.pdf">"clustering_concepts_10en"</a> <span class="cs1-format">(PDF)</span><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-19</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=clustering_concepts_10en&rft.au=Oracle&rft_id=http%3A%2F%2Fdownload.oracle.com%2Fdocs%2Fcd%2FE10316_01%2Fcs%2Fcs_doc_10%2Fdocumentation%2Fintegrator%2Fclustering_concepts_10en.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRobert_R._Perkoski" class="citation web cs1">Robert R. Perkoski. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20131107052241/http://www.sis.pitt.edu/~perkoski/is1092/slides/chapter01.ppt">"Introduction to Web Development"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.sis.pitt.edu/~perkoski/is1092/slides/chapter01.ppt">the original</a> on 2013-11-07.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Introduction+to+Web+Development&rft.au=Robert+R.+Perkoski&rft_id=http%3A%2F%2Fwww.sis.pitt.edu%2F~perkoski%2Fis1092%2Fslides%2Fchapter01.ppt&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFIBM" class="citation web cs1">IBM. <a rel="nofollow" class="external text" href="http://publib.boulder.ibm.com/html/as400/v5r1/ic2933/index.htm?info/rzaii/rzaiithreetier.htm">"Using Client Access Express in a three tier environment"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-19</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Using+Client+Access+Express+in+a+three+tier+environment&rft.au=IBM&rft_id=http%3A%2F%2Fpublib.boulder.ibm.com%2Fhtml%2Fas400%2Fv5r1%2Fic2933%2Findex.htm%3Finfo%2Frzaii%2Frzaiithreetier.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFOracle" class="citation web cs1">Oracle. <a rel="nofollow" class="external text" href="http://download.oracle.com/docs/cd/B25221_05/web.1013/b13593/undtldev010.htm">"Understanding the Three-Tier Architecture"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-19</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Understanding+the+Three-Tier+Architecture&rft.au=Oracle&rft_id=http%3A%2F%2Fdownload.oracle.com%2Fdocs%2Fcd%2FB25221_05%2Fweb.1013%2Fb13593%2Fundtldev010.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMicrosoft" class="citation web cs1">Microsoft. <a rel="nofollow" class="external text" href="http://msdn.microsoft.com/en-us/library/aa905336.aspx">"Pragmatic Architecture: Layering"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-19</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Pragmatic+Architecture%3A+Layering&rft.au=Microsoft&rft_id=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Faa905336.aspx&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFArokia" class="citation web cs1">Arokia. <a rel="nofollow" class="external text" href="http://www.arokiait.com/3-tire-web-architechture.htm">"3-Tier Web Architecture"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-19</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=3-Tier+Web+Architecture&rft.au=Arokia&rft_id=http%3A%2F%2Fwww.arokiait.com%2F3-tire-web-architechture.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20111011174215/http://www.arrangeactassert.com:80/asp-net-mvc-controller-best-practices-%E2%80%93-skinny-controllers/">"ASP.NET MVC Controller Best Practices"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.arrangeactassert.com/asp-net-mvc-controller-best-practices-–-skinny-controllers/">the original</a> on 2011-10-11<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-19</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=ASP.NET+MVC+Controller+Best+Practices&rft_id=http%3A%2F%2Fwww.arrangeactassert.com%2Fasp-net-mvc-controller-best-practices-%E2%80%93-skinny-controllers%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJamis_Buck" class="citation web cs1">Jamis Buck. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150516021854/http://www.arrangeactassert.com/asp-net-mvc-controller-best-practices-%E2%80%93-skinny-controllers/">"Skinny Controller, Fat Model"</a>. Archived from <a rel="nofollow" class="external text" href="http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model">the original</a> on 2015-05-16.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Skinny+Controller%2C+Fat+Model&rft.au=Jamis+Buck&rft_id=http%3A%2F%2Fweblog.jamisbuck.org%2F2006%2F10%2F18%2Fskinny-controller-fat-model&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation news cs1"><a rel="nofollow" class="external text" href="https://www.wired.com/2010/02/get_started_with_web_frameworks/">"Getting Started With Web Frameworks"</a>. <a href="/wiki/Wired_Magazine" class="mw-redirect" title="Wired Magazine">Wired Magazine</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-04-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.atitle=Getting+Started+With+Web+Frameworks&rft_id=https%3A%2F%2Fwww.wired.com%2F2010%2F02%2Fget_started_with_web_frameworks%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKLIMUSHYN2015" class="citation web cs1">KLIMUSHYN, Mel (6 April 2015). <a rel="nofollow" class="external text" href="https://spin.atomicobject.com/2015/04/06/web-app-client-side-server-side/">"Web Application Architecture – Client-Side vs. Server-Side"</a>. <i>Atomic Spin</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-03-06</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Atomic+Spin&rft.atitle=Web+Application+Architecture+%E2%80%93+Client-Side+vs.+Server-Side&rft.date=2015-04-06&rft.aulast=KLIMUSHYN&rft.aufirst=Mel&rft_id=https%3A%2F%2Fspin.atomicobject.com%2F2015%2F04%2F06%2Fweb-app-client-side-server-side%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.airpair.com/js/javascript-framework-comparison">"AngularJS vs. Backbone.js vs. Ember.js"</a>. <i>www.airpair.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-06-04</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.airpair.com&rft.atitle=AngularJS+vs.+Backbone.js+vs.+Ember.js&rft_id=https%3A%2F%2Fwww.airpair.com%2Fjs%2Fjavascript-framework-comparison&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-:0-18"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_18-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_18-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFFowler" class="citation web cs1">Fowler, Martin. <a rel="nofollow" class="external text" href="http://martinfowler.com/bliki/InversionOfControl.html">"bliki: InversionOfControl"</a>. <i>martinfowler.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-03-06</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=martinfowler.com&rft.atitle=bliki%3A+InversionOfControl&rft.aulast=Fowler&rft.aufirst=Martin&rft_id=http%3A%2F%2Fmartinfowler.com%2Fbliki%2FInversionOfControl.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFXue" class="citation web cs1">Xue, Qiang. <a rel="nofollow" class="external text" href="http://www.capitalone.io/blog/successful-framework-philosophies/">"Capital One Engineering – Philosophies that Shaped Successful Frameworks"</a>. <i>www.capitalone.io</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-03-06</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.capitalone.io&rft.atitle=Capital+One+Engineering+%E2%80%93+Philosophies+that+Shaped+Successful+Frameworks&rft.aulast=Xue&rft.aufirst=Qiang&rft_id=http%3A%2F%2Fwww.capitalone.io%2Fblog%2Fsuccessful-framework-philosophies%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-ActiveRecordBasics-20"><span class="mw-cite-backlink">^ <a href="#cite_ref-ActiveRecordBasics_20-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-ActiveRecordBasics_20-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-ActiveRecordBasics_20-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://guides.rubyonrails.org/active_record_basics.html">"Active Record Basics"</a>. <i>Ruby on Rails</i><span class="reference-accessdate">. Retrieved <span class="nowrap">March 20,</span> 2021</span>. <q>Object Relational Mapping, commonly referred to as its abbreviation ORM, is a technique that connects the rich objects of an application to tables in a relational database management system...Active Record automatically creates methods to allow an application to read and manipulate data stored within its tables.</q></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Ruby+on+Rails&rft.atitle=Active+Record+Basics&rft_id=https%3A%2F%2Fguides.rubyonrails.org%2Factive_record_basics.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html">"Active Record Transactions"</a>. <i>Ruby on Rails</i><span class="reference-accessdate">. Retrieved <span class="nowrap">March 20,</span> 2021</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Ruby+on+Rails&rft.atitle=Active+Record+Transactions&rft_id=https%3A%2F%2Fapi.rubyonrails.org%2Fclasses%2FActiveRecord%2FTransactions%2FClassMethods.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.dlsweb.rmit.edu.au/set/Courses/Content/CSIT/oua/cpt270/chapter/08/WhatisAJAX.html">"What is AJAX"</a>. <i>www.dlsweb.rmit.edu.au</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-05-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.dlsweb.rmit.edu.au&rft.atitle=What+is+AJAX&rft_id=https%3A%2F%2Fwww.dlsweb.rmit.edu.au%2Fset%2FCourses%2FContent%2FCSIT%2Foua%2Fcpt270%2Fchapter%2F08%2FWhatisAJAX.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMaximilien2006" class="citation book cs1">Maximilien, E. M. (2006). "Tutorial 4: Web Services on Rails: Using Ruby and Rails for Web Services Development and Mashups". <i>2006 IEEE International Conference on Web Services (ICWS'06)</i>. pp. xliii. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FICWS.2006.139">10.1109/ICWS.2006.139</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/0-7695-2669-1" title="Special:BookSources/0-7695-2669-1"><bdi>0-7695-2669-1</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Tutorial+4%3A+Web+Services+on+Rails%3A+Using+Ruby+and+Rails+for+Web+Services+Development+and+Mashups&rft.btitle=2006+IEEE+International+Conference+on+Web+Services+%28ICWS%2706%29&rft.pages=xliii&rft.date=2006&rft_id=info%3Adoi%2F10.1109%2FICWS.2006.139&rft.isbn=0-7695-2669-1&rft.aulast=Maximilien&rft.aufirst=E.+M.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AWeb+framework" class="Z3988"></span></span> </li> </ol></div></div> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Web_frameworks" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Web_frameworks" title="Template:Web frameworks"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Web_frameworks" title="Template talk:Web frameworks"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Web_frameworks" title="Special:EditPage/Template:Web frameworks"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Web_frameworks" style="font-size:114%;margin:0 4em"><a class="mw-selflink selflink">Web frameworks</a></div></th></tr><tr><td class="navbox-abovebelow hlist" colspan="2"><div> <ul><li><a href="/wiki/Comparison_of_server-side_web_frameworks" title="Comparison of server-side web frameworks">Comparison</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/.NET" title=".NET">.NET</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/ASP.NET" title="ASP.NET">ASP.NET</a> <ul><li><a href="/wiki/ASP.NET_Core" title="ASP.NET Core">Core</a></li> <li><a href="/wiki/ASP.NET_AJAX" title="ASP.NET AJAX">AJAX</a></li> <li><a href="/wiki/ASP.NET_Dynamic_Data" title="ASP.NET Dynamic Data">Dynamic Data</a></li> <li><a href="/wiki/ASP.NET_MVC" title="ASP.NET MVC">MVC</a></li> <li><a href="/wiki/ASP.NET_Razor" title="ASP.NET Razor">Razor</a></li> <li><a href="/wiki/ASP.NET_Web_Forms" title="ASP.NET Web Forms">Web Forms</a></li></ul></li> <li><a href="/wiki/Blazor" title="Blazor">Blazor</a></li> <li><a href="/wiki/DotNetNuke" class="mw-redirect" title="DotNetNuke">DNN</a></li> <li><a href="/wiki/Base_One_Foundation_Component_Library" title="Base One Foundation Component Library">BFC</a></li> <li><a href="/wiki/MonoRail_(software)" title="MonoRail (software)">MonoRail</a></li> <li><a href="/wiki/Umbraco" title="Umbraco">Umbraco</a></li> <li><a href="/wiki/WebSharper" title="WebSharper">WebSharper</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/C%2B%2B" title="C++">C++</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/CppCMS" title="CppCMS">CppCMS</a></li> <li><a href="/wiki/Drogon_(software)" title="Drogon (software)">Drogon</a></li> <li><a href="/wiki/Wt_(web_toolkit)" title="Wt (web toolkit)">Wt</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Adobe_ColdFusion" title="Adobe ColdFusion">ColdFusion</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/ColdBox_Platform" title="ColdBox Platform">ColdBox Platform</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/CL-HTTP" title="CL-HTTP">CL-HTTP</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Haskell" title="Haskell">Haskell</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Servant_(web_framework)" title="Servant (web framework)">Servant</a></li> <li><a href="/wiki/Snap_(web_framework)" title="Snap (web framework)">Snap</a></li> <li><a href="/wiki/Yesod_(web_framework)" title="Yesod (web framework)">Yesod</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Java_(software_platform)" title="Java (software platform)">Java</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/AppFuse" title="AppFuse">AppFuse</a></li> <li><a href="/wiki/Grails_(framework)" title="Grails (framework)">Grails</a></li> <li><a href="/wiki/Google_Web_Toolkit" title="Google Web Toolkit">GWT</a></li> <li><a href="/wiki/ICEfaces" title="ICEfaces">ICEfaces</a></li> <li><a href="/wiki/JHipster" title="JHipster">JHipster</a></li> <li><a href="/wiki/JWt_(Java_web_toolkit)" title="JWt (Java web toolkit)">JWt</a></li> <li><a href="/wiki/Jakarta_Faces#JSF_and_Ajax" title="Jakarta Faces">Mojarra</a></li> <li><a href="/wiki/Play_Framework" title="Play Framework">Play</a></li> <li><a href="/wiki/Remote_Application_Platform" title="Remote Application Platform">Remote Application Platform</a></li> <li><a href="/wiki/JBoss_Seam" title="JBoss Seam">Seam</a></li> <li><a href="/wiki/Apache_Sling" title="Apache Sling">Sling</a></li> <li><a href="/wiki/Spring_Framework#Model-view-controller_framework" title="Spring Framework">Spring</a></li> <li><a href="/wiki/Stripes_(framework)" title="Stripes (framework)">Stripes</a></li> <li><a href="/wiki/Apache_Struts" title="Apache Struts">Struts</a></li> <li><a href="/wiki/Apache_Tapestry" title="Apache Tapestry">Tapestry</a></li> <li><a href="/wiki/Vaadin" title="Vaadin">Vaadin</a></li> <li><a href="/wiki/Vert.x" title="Vert.x">Vert.x</a></li> <li><a href="/wiki/Apache_Wicket" title="Apache Wicket">Wicket</a></li> <li><a href="/wiki/WaveMaker" title="WaveMaker">WaveMaker</a></li> <li><a href="/wiki/ZK_(framework)" title="ZK (framework)">ZK</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Angular_(web_framework)" title="Angular (web framework)">Angular</a>/<a href="/wiki/AngularJS" title="AngularJS">AngularJS</a></li> <li><a href="/wiki/Backbone.js" title="Backbone.js">Backbone.js</a></li> <li><a href="/wiki/Google_Closure_Tools" title="Google Closure Tools">Closure</a></li> <li><a href="/wiki/Dojo_Toolkit" title="Dojo Toolkit">Dojo Toolkit</a></li> <li><a href="/wiki/Ember.js" title="Ember.js">Ember.js</a></li> <li><a href="/wiki/Express.js" title="Express.js">Express.js</a></li> <li><a href="/wiki/Ext_JS" title="Ext JS">Ext JS</a></li> <li><a href="/wiki/Fastify" title="Fastify">Fastify</a></li> <li><a href="/wiki/Htmx" title="Htmx">htmx</a></li> <li><a href="/wiki/JQuery" title="JQuery">jQuery</a></li> <li><a href="/wiki/Knockout.js" class="mw-redirect" title="Knockout.js">Knockout.js</a></li> <li><a href="/wiki/Meteor_(web_framework)" title="Meteor (web framework)">Meteor</a></li> <li><a href="/wiki/MooTools" title="MooTools">MooTools</a></li> <li><a href="/wiki/NestJS" title="NestJS">NestJS</a></li> <li><a href="/wiki/Next.js" title="Next.js">Next.js</a></li> <li><a href="/wiki/Nuxt.js" title="Nuxt.js">Nuxt.js</a></li> <li><a href="/wiki/Node.js" title="Node.js">Node.js</a></li> <li><a href="/wiki/OpenUI5" title="OpenUI5">OpenUI5</a></li> <li><a href="/wiki/Prototype_JavaScript_Framework" title="Prototype JavaScript Framework">Prototype</a></li> <li><a href="/wiki/React_(software)" title="React (software)">React</a></li> <li><a href="/wiki/Remix_(web_framework)" title="Remix (web framework)">Remix</a></li> <li><a href="/wiki/Sencha_Touch" title="Sencha Touch">Sencha Touch</a></li> <li><a href="/wiki/SproutCore" title="SproutCore">SproutCore</a></li> <li><a href="/wiki/Svelte" title="Svelte">Svelte</a></li> <li><a href="/wiki/Vue.js" title="Vue.js">Vue.js</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Perl" title="Perl">Perl</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Catalyst_(software)" title="Catalyst (software)">Catalyst</a></li> <li><a href="/wiki/Dancer_(software)" title="Dancer (software)">Dancer</a></li> <li><a href="/wiki/Maypole_framework" class="mw-redirect" title="Maypole framework">Maypole</a></li> <li><a href="/wiki/Mojolicious" title="Mojolicious">Mojolicious</a></li> <li><a href="/wiki/WebGUI" title="WebGUI">WebGUI</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/PHP" title="PHP">PHP</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/CakePHP" title="CakePHP">CakePHP</a></li> <li><a href="/wiki/CodeIgniter" title="CodeIgniter">CodeIgniter</a></li> <li><a href="/wiki/Drupal" title="Drupal">Drupal</a></li> <li><a href="/wiki/EZ_Publish" title="EZ Publish">eZ Publish</a></li> <li><a href="/wiki/Fat-Free_Framework" title="Fat-Free Framework">Fat-Free</a></li> <li><a href="/wiki/Neos_Flow" title="Neos Flow">Flow</a></li> <li><a href="/wiki/FuelPHP" title="FuelPHP">FuelPHP</a></li> <li><a href="/wiki/Grav_(CMS)" title="Grav (CMS)">Grav</a></li> <li><a href="/wiki/Gyroscope_(software)" title="Gyroscope (software)">Gyroscope</a></li> <li><a href="/wiki/Horde_(software)" title="Horde (software)">Horde</a></li> <li><a href="/wiki/Joomla" title="Joomla">Joomla!</a></li> <li><a href="/wiki/Laminas" title="Laminas">Laminas</a></li> <li><a href="/wiki/Laravel" title="Laravel">Laravel</a></li> <li><a href="/wiki/Li3_(software)" title="Li3 (software)">li₃</a></li> <li><a href="/wiki/Midgard_(software)" title="Midgard (software)">Midgard</a></li> <li><a href="/wiki/MODX" title="MODX">MODX</a></li> <li><a href="/wiki/Phalcon_(framework)" title="Phalcon (framework)">Phalcon</a></li> <li><a href="/wiki/PHP-Fusion" title="PHP-Fusion">PHP-Fusion</a></li> <li><a href="/wiki/PHP-Nuke" title="PHP-Nuke">PHP-Nuke</a></li> <li><a href="/wiki/Pop_PHP_Framework" title="Pop PHP Framework">Pop PHP</a></li> <li><a href="/wiki/PRADO_(framework)" title="PRADO (framework)">PRADO</a></li> <li><a href="/wiki/ProcessWire" title="ProcessWire">ProcessWire</a></li> <li><a href="/wiki/Qcodo" title="Qcodo">Qcodo</a></li> <li><a href="/wiki/Silverstripe_CMS" title="Silverstripe CMS">Silverstripe</a></li> <li><a href="/wiki/Symfony" title="Symfony">Symfony</a></li> <li><a href="/wiki/TYPO3" title="TYPO3">TYPO3</a></li> <li><a href="/wiki/WordPress" title="WordPress">WordPress</a></li> <li><a href="/wiki/XOOPS" title="XOOPS">XOOPS</a></li> <li><a href="/wiki/Yii" title="Yii">Yii</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Zope#BlueBream" title="Zope">BlueBream</a></li> <li><a href="/wiki/CherryPy" title="CherryPy">CherryPy</a></li> <li><a href="/wiki/CubicWeb" title="CubicWeb">CubicWeb</a></li> <li><a href="/wiki/Django_(web_framework)" title="Django (web framework)">Django</a></li> <li><a href="/wiki/FastAPI" title="FastAPI">FastAPI</a></li> <li><a href="/wiki/Flask_(web_framework)" title="Flask (web framework)">Flask</a></li> <li><a href="/wiki/Grok_(web_framework)" title="Grok (web framework)">Grok</a></li> <li><a href="/wiki/Nevow" class="mw-redirect" title="Nevow">Nevow</a></li> <li><a href="/wiki/Pyjs" title="Pyjs">Pyjs</a></li> <li><a href="/wiki/Pylons_project#Pylons_Framework" title="Pylons project">Pylons</a></li> <li><a href="/wiki/Pylons_project#Pyramid" title="Pylons project">Pyramid</a></li> <li><a href="/wiki/Quixote_(web_framework)" title="Quixote (web framework)">Quixote</a></li> <li><a href="/wiki/TACTIC_(web_framework)" title="TACTIC (web framework)">TACTIC</a></li> <li><a href="/wiki/Tornado_(web_server)" title="Tornado (web server)">Tornado</a></li> <li><a href="/wiki/TurboGears" title="TurboGears">TurboGears</a></li> <li><a href="/wiki/Web2py" title="Web2py">web2py</a></li> <li><a href="/wiki/Zope#Zope_2" title="Zope">Zope 2</a></li> <li><i><a href="/wiki/Category:Python_(programming_language)_web_frameworks" title="Category:Python (programming language) web frameworks">more</a></i>...</li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Merb" title="Merb">Merb</a></li> <li><a href="/wiki/Padrino_(web_framework)" title="Padrino (web framework)">Padrino</a></li> <li><a href="/wiki/Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a></li> <li><a href="/wiki/Sinatra_(software)" title="Sinatra (software)">Sinatra</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Rocket_(web_framework)" title="Rocket (web framework)">Rocket</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Lift_(web_framework)" title="Lift (web framework)">Lift</a></li> <li><a href="/wiki/Play_Framework" title="Play Framework">Play</a></li> <li><a href="/wiki/Scalatra" title="Scalatra">Scalatra</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/AIDA/Web" title="AIDA/Web">AIDA/Web</a></li> <li><a href="/wiki/Seaside_(software)" title="Seaside (software)">Seaside</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other languages</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Oracle_Application_Express" title="Oracle Application Express">Application Express</a> (<a href="/wiki/PL/SQL" title="PL/SQL">PL/SQL</a>)</li> <li><a href="/wiki/Grails_(framework)" title="Grails (framework)">Grails</a> (<a href="/wiki/Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a>)</li> <li><a href="/wiki/OpenACS" class="mw-redirect" title="OpenACS">OpenACS</a> (<a href="/wiki/Tcl" title="Tcl">Tcl</a>)</li> <li><a href="/wiki/Phoenix_(web_framework)" title="Phoenix (web framework)">Phoenix</a> (<a href="/wiki/Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a>)</li> <li><a href="/wiki/Shiny_(web_framework)" title="Shiny (web framework)">Shiny (web framework)</a> (<a href="/wiki/R_(programming_language)" title="R (programming language)">R</a>)</li> <li><a href="/wiki/SproutCore" title="SproutCore">SproutCore</a> (<a href="/wiki/JavaScript" title="JavaScript">JavaScript</a>-<a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>)</li> <li><a href="/wiki/Yaws_(web_server)" title="Yaws (web server)">Yaws</a> (<a href="/wiki/Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>)</li></ul> </div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox" aria-labelledby="Web_interfaces" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239400231"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Web_interfaces" title="Template:Web interfaces"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Web_interfaces" title="Template talk:Web interfaces"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Web_interfaces" title="Special:EditPage/Template:Web interfaces"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Web_interfaces" style="font-size:114%;margin:0 4em"><a href="/wiki/Web_API" title="Web API">Web interfaces</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td class="navbox-abovebelow" colspan="2" style="font-weight:bold"><div id="Server-side"><a href="/wiki/Server-side" class="mw-redirect" title="Server-side">Server-side</a></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Communication_protocol" title="Communication protocol">Protocols</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/HTTP" title="HTTP">HTTP</a> <ul><li><a href="/wiki/HTTP/2" title="HTTP/2">v2</a></li> <li><a href="/wiki/HTTP/3" title="HTTP/3">v3</a></li> <li><a href="/wiki/HTTPS" title="HTTPS">Encryption</a></li> <li><a href="/wiki/WebDAV" title="WebDAV">WebDAV</a></li></ul></li> <li><a href="/wiki/Common_Gateway_Interface" title="Common Gateway Interface">CGI</a></li> <li><a href="/wiki/Simple_Common_Gateway_Interface" title="Simple Common Gateway Interface">SCGI</a></li> <li><a href="/wiki/FastCGI" title="FastCGI">FCGI</a></li> <li><a href="/wiki/Apache_JServ_Protocol" title="Apache JServ Protocol">AJP</a></li> <li><a href="/wiki/Web_Services_for_Remote_Portlets" title="Web Services for Remote Portlets">WSRP</a></li> <li><a href="/wiki/WebSocket" title="WebSocket">WebSocket</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Server_application_programming_interface" title="Server application programming interface">Server APIs</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Netscape_Server_Application_Programming_Interface" title="Netscape Server Application Programming Interface">C NSAPI</a></li> <li><a href="/wiki/Apache_HTTP_Server#Feature_overview" title="Apache HTTP Server">C ASAPI</a></li> <li><a href="/wiki/Internet_Server_Application_Programming_Interface" title="Internet Server Application Programming Interface">C ISAPI</a></li> <li><a href="/wiki/Active_Server_Pages" title="Active Server Pages">COM ASP</a></li> <li><a href="/wiki/Jakarta_Servlet" title="Jakarta Servlet">Jakarta Servlet</a> <ul><li><a href="/wiki/Web_container" title="Web container">container</a></li></ul></li> <li><a href="/wiki/Open_Web_Interface_for_.NET" title="Open Web Interface for .NET">CLI OWIN</a></li> <li><a href="/wiki/HTTP_handler" title="HTTP handler">ASP.NET Handler</a></li> <li><a href="/wiki/Web_Server_Gateway_Interface" title="Web Server Gateway Interface">Python WSGI</a></li> <li><a href="/wiki/Asynchronous_Server_Gateway_Interface" title="Asynchronous Server Gateway Interface">Python ASGI</a></li> <li><a href="/wiki/Rack_(web_server_interface)" title="Rack (web server interface)">Ruby Rack</a></li> <li><a href="/wiki/JSGI" title="JSGI">JavaScript JSGI</a></li> <li><a href="/wiki/Plack_(software)#PSGI" title="Plack (software)">Perl PSGI</a></li> <li><a href="/wiki/Java_Portlet_Specification" title="Java Portlet Specification">Portlet</a> <ul><li><a href="/wiki/Java_Portlet_Specification" title="Java Portlet Specification">container</a></li></ul></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/List_of_Apache_modules" title="List of Apache modules">Apache modules</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Server_Side_Includes" title="Server Side Includes">mod_include</a></li> <li><a href="/wiki/Mod_jk" class="mw-redirect" title="Mod jk">mod_jk</a></li> <li><a href="/wiki/Mod_lisp" title="Mod lisp">mod_lisp</a></li> <li><a href="/wiki/Mod_mono" title="Mod mono">mod_mono</a></li> <li><a href="/wiki/Mod_parrot" class="mw-redirect" title="Mod parrot">mod_parrot</a></li> <li><a href="/wiki/Mod_perl" title="Mod perl">mod_perl</a></li> <li><a href="/wiki/PHP" title="PHP">mod_php</a></li> <li><a href="/wiki/Mod_proxy" title="Mod proxy">mod_proxy</a></li> <li><a href="/wiki/Mod_python" title="Mod python">mod_python</a></li> <li><a href="/wiki/Mod_wsgi" title="Mod wsgi">mod_wsgi</a></li> <li><a href="/wiki/Mod_ruby" title="Mod ruby">mod_ruby</a></li> <li><a href="/wiki/Phusion_Passenger" title="Phusion Passenger">Phusion Passenger</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Topics</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Web_service" title="Web service">Web service</a> vs. <a href="/wiki/Web_resource" title="Web resource">Web resource</a></li> <li><a href="/wiki/Web-oriented_architecture" title="Web-oriented architecture">WOA</a> vs. <a href="/wiki/Resource-oriented_architecture" title="Resource-oriented architecture">ROA</a></li> <li><a href="/wiki/Open_API" title="Open API">Open API</a></li> <li><a href="/wiki/Webhook" title="Webhook">Webhook</a></li> <li><a href="/wiki/Application_server" title="Application server">Application server</a> <ul><li><a href="/wiki/List_of_application_servers" title="List of application servers">comparison</a></li></ul></li> <li><a href="/wiki/Server-side_scripting" title="Server-side scripting">Scripting</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td class="navbox-abovebelow" colspan="2" style="font-weight:bold"><div id="Client-side"><a href="/wiki/Client-side" class="mw-redirect" title="Client-side">Client-side</a></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Plug-in_(computing)" title="Plug-in (computing)">Browser APIs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/NPAPI" title="NPAPI">C NPAPI</a> <ul><li><a href="/wiki/NPAPI#LiveConnect" title="NPAPI">LiveConnect</a></li> <li><a href="/wiki/NPAPI#XPConnect" title="NPAPI">XPConnect</a></li></ul></li> <li><a href="/wiki/NPAPI#NPRuntime" title="NPAPI">C NPRuntime</a></li> <li><a href="/wiki/Google_Native_Client#Pepper" title="Google Native Client">C PPAPI</a> <ul><li><a href="/wiki/Google_Native_Client" title="Google Native Client">NaCl</a></li></ul></li> <li><a href="/wiki/ActiveX" title="ActiveX">ActiveX</a></li> <li><a href="/wiki/Browser_Helper_Object" title="Browser Helper Object">BHO</a></li> <li><a href="/wiki/XAML_Browser_Applications" title="XAML Browser Applications">XBAP</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Web_API#Client_side" title="Web API">Web APIs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/WHATWG" title="WHATWG">WHATWG</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/HTML_audio" title="HTML audio">Audio</a></li> <li><a href="/wiki/Canvas_element" title="Canvas element">Canvas</a></li> <li><a href="/wiki/Document_Object_Model" title="Document Object Model">DOM</a></li> <li><a href="/wiki/Server-sent_events" title="Server-sent events">SSE</a></li> <li><a href="/wiki/HTML_video" title="HTML video">Video</a></li> <li><a href="/wiki/WebSocket" title="WebSocket">WebSockets</a></li> <li><a href="/wiki/Web_Messaging" title="Web Messaging">Web messaging</a></li> <li><a href="/wiki/Web_storage" title="Web storage">Web storage</a></li> <li><a href="/wiki/Web_worker" title="Web worker">Web worker</a></li> <li><a href="/wiki/XMLHttpRequest" title="XMLHttpRequest">XMLHttpRequest</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium">W3C</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/DOM_event" title="DOM event">DOM events</a></li> <li><a href="/wiki/Encrypted_Media_Extensions" title="Encrypted Media Extensions">EME</a></li> <li><a href="/wiki/HTML5_File_API" title="HTML5 File API">File</a></li> <li><a href="/wiki/W3C_Geolocation_API" title="W3C Geolocation API">Geolocation</a></li> <li><a href="/wiki/Indexed_Database_API" title="Indexed Database API">IndexedDB</a></li> <li><a href="/wiki/Media_Source_Extensions" title="Media Source Extensions">MSE</a></li> <li><a href="/wiki/SVG" title="SVG">SVG</a></li> <li><a href="/wiki/WebAssembly" title="WebAssembly">WebAssembly</a></li> <li><a href="/wiki/WebAuthn" title="WebAuthn">WebAuthn</a></li> <li><a href="/wiki/WebGPU" title="WebGPU">WebGPU</a></li> <li><a href="/wiki/WebRTC" title="WebRTC">WebRTC</a></li> <li><a href="/wiki/WebXR" title="WebXR">WebXR</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Khronos_Group" title="Khronos Group">Khronos</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/WebCL" title="WebCL">WebCL</a></li> <li><a href="/wiki/WebGL" title="WebGL">WebGL</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Others</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Gears_(software)" title="Gears (software)">Gears</a></li> <li><a href="/wiki/Web_SQL_Database" title="Web SQL Database">Web SQL Database</a> (formerly W3C)</li> <li><a href="/wiki/WebUSB" title="WebUSB">WebUSB</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Topics</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Ajax_(programming)" title="Ajax (programming)">Ajax</a> and <a href="/wiki/Remote_scripting" title="Remote scripting">Remote scripting</a> vs. <a href="/wiki/Dynamic_HTML" title="Dynamic HTML">DHTML</a></li> <li><a href="/wiki/Browser_extension" title="Browser extension">Browser extension</a></li> <li><a href="/wiki/Cross-site_scripting" title="Cross-site scripting">Cross-site scripting</a> and <a href="/wiki/Cross-origin_resource_sharing" title="Cross-origin resource sharing">CORS</a></li> <li><a href="/wiki/Hydration_(web_development)" title="Hydration (web development)">Hydration</a></li> <li><a href="/wiki/Mashup_(web_application_hybrid)" title="Mashup (web application hybrid)">Mashup</a></li> <li><a href="/wiki/Client-side_persistent_data" title="Client-side persistent data">Persistent data</a></li> <li><a href="/wiki/Web_IDL" title="Web IDL">Web IDL</a></li> <li><a href="/wiki/Dynamic_web_page#Client-side_scripting" title="Dynamic web page">Scripting</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td class="navbox-abovebelow" colspan="2"><div id="Related_topics">Related topics</div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Frontend_and_backend" title="Frontend and backend">Frontend and backend</a></li> <li><a href="/wiki/Microservices" title="Microservices">Microservices</a> <ul><li><a href="/wiki/REST" title="REST">REST</a></li> <li><a href="/wiki/GraphQL" title="GraphQL">GraphQL</a></li></ul></li> <li><a href="/wiki/Push_technology" title="Push technology">Push technology</a></li> <li><a href="/wiki/Solution_stack" title="Solution stack">Solution stack</a></li> <li><a href="/wiki/Web_page" title="Web page">Web page</a> <ul><li><a href="/wiki/Static_web_page" title="Static web page">Static</a></li> <li><a href="/wiki/Dynamic_web_page" title="Dynamic web page">Dynamic</a></li></ul></li> <li><a href="/wiki/Web_standards" title="Web standards">Web standards</a></li> <li><a href="/wiki/Web_API_security" title="Web API security">Web API security</a></li> <li><a href="/wiki/Web_application" title="Web application">Web application</a> <ul><li><a href="/wiki/Rich_Internet_Application" title="Rich Internet Application">Rich</a></li> <li><a href="/wiki/Single-page_application" title="Single-page application">Single-page</a></li> <li><a href="/wiki/Progressive_web_app" title="Progressive web app">Progressive</a></li></ul></li> <li><a class="mw-selflink selflink">Web framework</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐6df7948d6c‐kvrvd Cached time: 20241127185152 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.657 seconds Real time usage: 0.773 seconds Preprocessor visited node count: 4498/1000000 Post‐expand include size: 116578/2097152 bytes Template argument size: 10241/2097152 bytes Highest expansion depth: 12/100 Expensive parser function count: 14/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 98592/5000000 bytes Lua time usage: 0.388/10.000 seconds Lua memory usage: 5941094/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 660.617 1 -total 25.45% 168.122 21 Template:Cite_web 23.65% 156.221 14 Template:Citation_needed 19.28% 127.384 14 Template:Fix 18.59% 122.830 1 Template:Reflist 16.07% 106.145 1 Template:Web_frameworks 15.91% 105.108 2 Template:Navbox 14.56% 96.157 2 Template:Refn 11.62% 76.784 1 Template:Short_description 8.63% 57.042 28 Template:Category_handler --> <!-- Saved in parser cache with key enwiki:pcache:2342095:|#|:idhash:canonical and timestamp 20241127185152 and revision id 1253898439. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Web_framework&oldid=1253898439">https://en.wikipedia.org/w/index.php?title=Web_framework&oldid=1253898439</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Category</a>: <ul><li><a href="/wiki/Category:Web_frameworks" title="Category:Web frameworks">Web frameworks</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_is_different_from_Wikidata" title="Category:Short description is different from Wikidata">Short description is different from Wikidata</a></li><li><a href="/wiki/Category:All_articles_with_unsourced_statements" title="Category:All articles with unsourced statements">All articles with unsourced statements</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_November_2021" title="Category:Articles with unsourced statements from November 2021">Articles with unsourced statements from November 2021</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_January_2017" title="Category:Articles with unsourced statements from January 2017">Articles with unsourced statements from January 2017</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 28 October 2024, at 13:23<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Web_framework&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-57488d5c7d-5b7jj","wgBackendResponseTime":144,"wgPageParseReport":{"limitreport":{"cputime":"0.657","walltime":"0.773","ppvisitednodes":{"value":4498,"limit":1000000},"postexpandincludesize":{"value":116578,"limit":2097152},"templateargumentsize":{"value":10241,"limit":2097152},"expansiondepth":{"value":12,"limit":100},"expensivefunctioncount":{"value":14,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":98592,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 660.617 1 -total"," 25.45% 168.122 21 Template:Cite_web"," 23.65% 156.221 14 Template:Citation_needed"," 19.28% 127.384 14 Template:Fix"," 18.59% 122.830 1 Template:Reflist"," 16.07% 106.145 1 Template:Web_frameworks"," 15.91% 105.108 2 Template:Navbox"," 14.56% 96.157 2 Template:Refn"," 11.62% 76.784 1 Template:Short_description"," 8.63% 57.042 28 Template:Category_handler"]},"scribunto":{"limitreport-timeusage":{"value":"0.388","limit":"10.000"},"limitreport-memusage":{"value":5941094,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-6df7948d6c-kvrvd","timestamp":"20241127185152","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Web framework","url":"https:\/\/en.wikipedia.org\/wiki\/Web_framework","sameAs":"http:\/\/www.wikidata.org\/entity\/Q1330336","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q1330336","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2005-07-30T17:18:53Z","dateModified":"2024-10-28T13:23:12Z","headline":"software framework that is designed to support the development of websites, web applications, web services and web resources"}</script> </body> </html>