安利工具ngrok 内网穿透工具
一、网络基础知识:
一个HTTP请求的完整过程。基于chrome。
一个请求实际上是两次请求1.Head请求,服务器给个response
2.真正的请求:Get、Post、Put、Delete
Get不带Body信息,传url——HTTP header里边method:Get/Post.....(字段获取)
Post 带Body,post 会建立多条数据,不幂等
Put是幂等的,put几次,得的数据不变(字段更新)
Delete
3. www.uskid.com/a/p.png 请求包括req.header req.body res.header res.body
先判断走缓存还是server,判断没有就发送server真正的请求。
缓存首先是去本地浏览器的缓存去找这个资源,拿到了,返回304
浏览器认为有,去缓存中没有拿到 。报另外一个错。
给server发请求,进入网络,发Head,问我的地址存不存在。解析域名。先去host找,再去本地局域网内的交换机和路由器中找。再去网络供应商所在的节点配置DNS(白名单,黑名单),再往下到联通移动等供应商的DNS解析(白名单、黑名单),到服务提供商,比如阿里云或者亚马逊,找到IP地址。
组建request请求 header里有发起者的IP-origin信息,有host信息,route信息,cookie信息, auth信息,x-uskid信息, coutent-type等等。
cookie是浏览器自动去拿的信息。它是被缓存到浏览器本地,domain信息 里边又uskid.com。t.uskid.com 等等。第一项找完全匹配的,第二优先级找部分匹配的*.uskid.com 这种,其他都屏蔽了。
Auth记录当前访问者的权限信息。Oauth协议,通常用oauth协议2.用于利用QQ或微信号登录这种。
x-USKid可以放Token信息。放公共信息。
Content-type 声明我的Body长度或类型的。
Body包括body param query等等 Content-type声明json,也可以在Body里放json,但会消耗内存。
query : ?gender=boy&age=10 (最准确详细)
param : 别名 users/:id /Users/boy(只返回boy的id和名字,定制化)
Body:一般不做get,改东西的时候用。更新的内容都放到Body里边。
https端口默认443,http默认80。默认会隐藏。
服务器返回,res阶段。服务器写什么,都到res里。Head:设置res.setcookie,是服务器往浏览器cookie里写东西。Body:status 30x 做重定向指令,html资源,json字串等 下载的时候,服务端返回一个文件流,文件流也有Content-type,拿到操作系统默认的路径开始传输,然后触发打开或保存操作。
问题 Content-type属性的影响
req: “content-type :json”,浏览器把它解析成json。 “content-type :text” 解析成“xxxx文字”
multify-part 文件流 file,length等信息。
res:Content-type文件流,bmp:0100001(描述一个图片二维码),浏览器就能展示这个二维码。
二、代理和反向代理
1.代理:在网络中代发代做的作用。
三 nginx 反向代理
1. 服务器不用直接暴露给用户,服务器可能有多个网卡。
计算机对端口的权限和安全等级不一样,除了80端口外其他端口都不能对服务器造成致命的威胁。NGINX不在集群内部,多台NGINX,用来保护服务器。Nginx只能访问server1的8001和server2的9003端口,接到不同的请求访问不同的地址。而server1和server2可以没有外网网卡等等,安全升级。NGINX10.10.10.10 ,url180 url2 443 url3 通过NGINX访问server1 2 3
四 IIS
IIS配置在服务器上,IIS假如是10.10.10.11 url 80 通过IIS 发送给自己的app
IIS的管道模型: IIS加载Java组件后,能处理Java请求, 请求来了,IIS知道你要访问那个application,帮你创建context上下文,处理,最后response,返回给user。
nodejs是单线程的。
PM2 起了8个nodejs(或者镜像),PM2把请求分发在比较闲的nodejs上。
Docker 8个,暴露的都是8001端口,也可以起到分发作用。
我们再Docker里运行PM2.
Openshift。