如果你的代码是主要处理数据库和数据之间的逻辑 那么你就算是个后端
如果你的代码主要处理交互(用户的点击事件 鼠标事件 用户的一些流程)那么您就是一个前端
什么是服务端和客户端
server服务端是一个机器
client客户端也是一个机器
如果我们在chorme中输入一个网址
它会发一个请求到server //发起请求 request
一般server使用80端口 来接收这个请求
server呢 就返回一个响应 //返回响应 response
//注意:
在mac 或者 linux 系统上 80 端口是不能被普通用户使用的
用了就会报错
端口号只要大于1024 就可以了
那我非要用呢
可以 前面加 sudo
想知道的详细点
curl -v
v //verbose 啰嗦
➜ http-demo curl -v http://localhost:9999/main.css
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 9999 (#0)
> GET /main.css HTTP/1.1
> Host: localhost:9999
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/html;charset=utf-8
< Date: Mon, 13 Aug 2018 02:48:26 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
<
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
呜呜呜%
链接过程
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 9999 (#0)
发起请求
> GET /main.css HTTP/1.1
> Host: localhost:9999
> User-Agent: curl/7.52.1
> Accept: */*
>
大于号 表示我们发起的请求
小于号 表示 我们得到的响应
User-Agent 你用什么上网
Accept: / 你给我什么样的东西 我都要
> //回车也是一句话
response.end('sldf')
返回一个什么
返回的数据后 有一个 %
为什么? 表示 文件结尾
请求 request
- 请求行
- *请求头
- 回车
- 请求体
响应 response
- 响应行 状态行
- *响应头
- 回车
- 响应体
js css html json xml image jsonp本质
- 都是字符串 不过 Content-Type 不同
text/javascript application/javascript
text/css
text/html
text/json
text/xml application/xml text/xml+html
image/png
image/jpeg
image/gif
text/javascript =>jsonp
你浏览器地址栏 输入地址 默认请求 html
link 标签 请求css
script 标签 请求js
json 怎么请求
let request = new XMLHttpRequest()
request.open('GET','/3.json')
request.onload = function(){
console.log(request.responseText)
}
request.send()
jsonp就是在json的基础上 加 函数名(json)
Content-Type: application/x-www-form-urlencoded
- 用key=value的方式来表示
- 如果你有多个key value 请用&连接
- 如果你有特殊字符 将转换成%开头的数字
缓存
/style response.setHeader('Cache-Control','max-age=3600')
浏览器在得到 /style 响应之后 3600s之内 不会再请求服务器
如果你想抛弃之前的缓存 , 你只需要把 /style 改下
/style?v=1
response.setHeader('Etag','xxx')
if(resquest.headers('if-none-match')==='xxx'){
response.statusCode = 304
response.end()
}
如果你第二次请求服务器时,带的特征值不变 我就304跳转,返回空
所以cache 和 Etag的区别就是 有没有请求服务器
cookie
cookie用来标示用户
, 如那些用户登录了
if(query.xxx='xxx'){
//如果查询参数里的xxx的值为...
response.setHeader('Set-Cookie','login=true')
}
- cookie过期
设置 cookie过期的时间为前一秒或者 最早
let d = new Date(0) // 1970
let xyz = d.toGMTString()
response.setHeader('Set-Cookie',`login=true;Expries=${xyz}`)
//过期的时间 为 GMT 时间
如果只是用简单的标记 true或者false 来表示用户的登录
前端很容易伪造的
document.cookie= "login=true"
session
为了 既能 标示用户
又能 防止用户篡改
引入了session
session={} 不能放到 createServer里面
不然每次启动的时候 都会重新创建
-
session存储
你不可能只把session 放内存里 一旦你重启服务器 内存就挂了
一般 你在关闭服务器的时候
要把 session 存文件里面
或者你平时就 存文件里面
这样session 不会丢失
如果你真正存session 你不能只存内存里面
你可以同时存 session 和内存里面
或者同时存 内存或数据库里面
我只存内存里面 重启服务器 内存就关掉了 关掉之后 你就完了 -
cookie session 的区别
1.目的
我需要标志一个用户和另一个用户是不一样的 我就用cookie 除此之外我没有其他任何方法 当然也可以用gwt
我想记录某一个用户信息的时候 session 不是用来区分用户的 session 用来记录用户的敏感信息 是否登录的了密码是什么 有没有购买这些东西 是不是vip 是不是 管理员
2.实现原理
cookie 就是响应的时候 设置一个 Set-Cookie 这么一个头 Set-Cookie 是写死在http协议里面的 cookie存在浏览器上
session 和http 没有任何关系 session 没有规定如何实现 session 是不同的后台框架用不同的方式实现的 他存在服务器的一个地方 可以是内存 (维护一个redis里面) 可以是文件可以是数据库
一般来说 session的实现是基于cookie的 我必须要用一个id放到用户那里 放cookie是最好的 因为它每次都带着
//注意:
除此之外还可以放到那里吗?
可以 可以不放到cookie里面
你可以放到 localstorage
localstorage 不是每次都随浏览器 复制到请求里面 你用js去读 读了之后放到请求头里面
或者 , 你可以放到 url的查询参数里
/login?sessionId=0.1661568
访问另一个页面 可以把查询参数拷贝到另一个url后 这是一种最龊的方法
3.不是区别的区别
cookie最大 4k
废话 你发的请求只能那么大嘛 请求发大了 网速就慢了嘛
session 为什么无限大
你的后台服务器有多大 你的session就可以有多大喽 你存你自己服务器当然可以控制session的大小
cookie是存在别人电脑 你当然不能控制别人电脑 cookie的大小
4.cookie可以清除 session不能清除
用户清除 当然只能清除cookie 怎么能清除session了
反向代理
正向代理 代理客户端
方向代理 代理服务端
买房的人 找中介买房 找房源 中介就是正向代理
卖房的人 也找中介卖房 找买房的人 中介就是反向代理
一般用nginx 来做反向代理
baidu server nginx baidu
google server google
命令
which nginx // 查询nginx位置
nginx -t //查询 nginx 配置
service nginx start
sudo nginx
搜索
nginx 配置 静态 目录
nginx 配置 server name
网友评论