# Web Fundamental
WWW
HTML
```
<html>
<head>
<link rel="stylesheet" src="app.css" />
<script defer type="javascript" src="app.js" />
</head>
<body>
<h1>Title</h1>
<section>
<p></p>
</section>
<script src="b.js" />
</body>
</html>
```
rccc.org
- index.html (1st request from browser)
- app.css
- app.js
HTTP2
HTTP
- stateless
- no session build in
Verbs: GET / POST / DELETE / PATCH
```
// client
GET /
HOST rccc.org
HEADER ... (cookie, authentication, accepts: json, x-api-key)
BODY ...
```
```
cache/
web-fund-tab/
index.html
app.css
app.js
```
Web - C/S architecture
Client
- Browser: Chrome/Safari/Edge
- Program
- Search Engine Spider
Server
- Host: Java Server / NodeJS Server / Ruby Server
- CDN: distribution
How Browser Renders A Page
- index.html
- css/js/image/video (head blocking, body non blocking): time to first impression TTFI
- layout computation(css: width/height/float/padding/flex, <img src="a.jpeg" width="200" height="100" />) content layout shifting CLS web performance metric
DOM
jQuery
- heavy JS
- window.onLoad = function() { console.log("haha") }
- $.ready(funtion() {
DOM operation
node.on("click", function() { alert("haha"); })
})
- getElementById / querySelector (CSS selector)
AJAX API
Single Page Application
- request / => index.html (20k)
- request /about => about.html (20k)
- request / => index.html (js) 30k
- /about => onClick
- window.history.push("/about")
- trigger page React re-render, now with /about context
React
- Virtual DOM (js maintained dom) => native dom
- to list
- DOM / Page Data
- todo application state
- array
- description
- state (closed/open)
- component(function)
- input: state data
- output: virtual dom
```
// react version
function TodoItem(props) {
const [state, setState] = useState("open")
return (
<div onClick={() => setState("closed")}>{props.description} is {props.state}</div>
)
}
```
```
// DOM based version
<body><div id="todos"></div></body>
app.js
function onClick(event) {
const todoItemNode = event.target
const oldDescription = todoItemNode.innerHTML
"fix computer-open"
"fix computer-closed"
const newDescription = oldDescription.replace(/open/, "closed")
todoItemNode.innertHTML = newDescription
}
fetch("/todos").then(items => {
items.forEach(item => {
const todosNode = document.getElementById("todos")
todosNode.createElement(
"div",
{onClick},
item.description + "-" + item.state
);
})
})
```
```
<html>
<head>
<script src="app.js" /> // react framework, app
</head>
<body>
<div id="root"></div>
</body>
</html>
```
Security
- HTTPS
- RSA (asymetric encryption)
- public key
- private key
- encode("public key", "helloword") => "xxxxooo"
- decode("private key", "xxxxooo") => "helloworld"
- Handshake
- browser => cn.rccc.org SSL certificate => public key
- browser == (encrypted) => cn.rccc.org
Web3 (no much relationship)
Build Time
- git repo commit => build => html/js/css
- getStaticProps
- /courses/a.html
- /courses/b.html
- getServerSideProps
- /courses/*.html
- netlify will execute the code with given context
- serverside render
- virtual renderString <html>
Runtime
- getServerSideProps