get和post的区别
Get请求:请求参数在HTTP协议头,基本都可以发get请求,但是参数可见,不安全。
Post请求:请求参数在HTTP协议体,只有表单能发post请求,参数不可见,安全。
get提交的数据一般只有1024B 因为get是附在URL之后 而浏览器对URL有限制 通过 URL 传递数据 所以get请求只支持URL编码 ascal格式的参数 post没限制 get用Request.QueryString 来取得变量的值
post提交的数据理论上是没限制的 但是还是会受到浏览器、操作系统、服务器处理能力等限制 一般就是80KB或者100KB post用Request.Form 来获取变量值
Get
POST数据可以加密 但GET的速度可能会快些。
HTTP和HTTPS
HTTP
HTTP的本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。在这一过程中,会涉及到负载均衡等操作。
简单的请求-响应协议 用于web浏览器和网站服务器之间(也就是全端和后端之间)传递消息
使用TCP作为支撑运输层协议 默认在TCP协议的80端口
如果客户计算机与服务器实现了TCP连接 则浏览器和服务器进程就可以通过套接字接口访问TCP
客户机和服务器都可以从套接字发送HTTP请求报文和接受HTTP响应报文
通信内容是以明文的方式发送(就是不加密) 通信结束客户端与服务端就会断开链接
Keep-Alive和非Keep-Alive
在http1.0时 浏览器每次发起http请求都要与服务器之间创建一个新的tcp链接
完成请求就断开 所以创建和关闭请求都耗费资源和时间
如果想要保持链接就需要需要指定 connection 的首部字段的值为 Keep-Alive 来告诉对方这个请求响应完成后不要关闭
非Keep-Alive的缺点就是每次发请求都要创建一个TCP 严重增加了服务器的负担
而Keep-Alive也有缺点 长时间的保持 TCP 连接时容易导致系统资源被无效占用
正确的是当完成最后一个HTTP请求后设置一个固定的秒数关闭TCP链接
长链接和短链接(Keep-Alive和非Keep-Alive)的应用场景
长链接用于两个点之间操作传输数据较为频繁且点对点通讯 客户端链接数目较少 例如即时通讯和网络游戏
短链接一般用于网站用户较多 例如京东淘宝
HTTPS
是以安全为目标的HTTP协议
在 HTTP 的基础上通过传输加密和身份认证的方式保证了传输过程的安全性
端口号为443
客户端发送HTTPS请求 里面包含了自己的加密算法列表和秘钥长度
服务端选择一种适合客户端的加密算法连同加密组件一同发给客户端
服务端再向客户端发送一个包含数字证书的报文
服务端收到后发送给客户端一个完成协商报文 说明第一阶段协商完成
SSL第一次协商完成后 客户端发送一个回应报文 这个报文包含了一个客户端生成的随机密码串称为 pre_master_secre
① 并再发一个报文告诉服务端之后的内容都用pre_master_secre加密
然后再向服务端发送一个结束报文 这次握手中包含第一次握手至今所有报文的整体校验值,最终协商是否完成取决于服务端能否成功解密。
然后服务端会发送一个和①一样的报文给客户端 让客户端确认
最后服务端发送一个finish报文告诉客户端自己正确解密了
当服务端和客户端的 finish 报文交换完成之后,SSL 连接就算建立完成了,之后就进行和 HTTP 相同的通信过程,唯一不同的是在 HTTP 通信过程中并不是采用明文传输,而是采用对称加密的方式,其中对称密钥已经在 SSL 的建立过程中协商好了
HTTPS和HTTP的区别
一个加密了内容一个没加密
一个端口80一个443
HTTPS需要数字认证机构申请证书 需要一定费用
HTTP比HTTPS响应更快 因为HTTP只要三次握手 而HTTPS还多了一个SSL协商
状态码
200 请求成功
204 请求成功但无内容返回
206 范围请求成功
301 永久重定向; 30(2|3|7)临时重定向,语义和实现有略微区别;
304 带if-modified-since 请求首部的条件请求,条件没有满足
400 语法错误
401 需要认证信息
403 拒绝访问
404 找不到资源
412 除if-modified-since 以外的条件请求,条件未满足
500 服务器错误
503 服务器宕机了
DNS
域名系统的简称
DNS的作用
识别主机的方式:主机名(也就是域名 例如www.baidu.com)和IP地址例如[220.181.38.149] 人喜欢记主机名也就是直接访问网址 而路由器喜欢记定长的IP地址 TCP/IP采用IP地址进程寻址
DNS是域名和IP地址相互映射的一个分布式数据库
从上到下是 根域名服务器 顶级域名服务器,权威域名服务器
顶级域名服务器负责顶级域名(如 com、org、net、edu)和所有国家的顶级域名(如uk、fr、ca 和 jp)
本地DNS服务器
他不在DNS服务的层次结构中 每个网络服务提供商(ISP) 都有一台本地 DNS 服务器
当用户输入网址 def.mn.edu后 用户主机会先在本地NDS高速缓存中查找该域名所对应的IP地址 如果没找就会把带有该域名的报文发给根DNS服务器 根域名看到前缀是edu 向本地DNS返回edu顶级域名服务器的IP地址 然后本地DNS就向这个服务器发送查询报文 这个服务器看到是mn。edu就返回mn的权威域名服务器IP地址
域名解析查询方式
递归查询:本地DNS服务器不知道被查询域名的 IP 地址,本地DNS服务器就以 DNS 客户端的身份,向其他根域名服务器发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询
迭代查询: 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器进行后续的查询
重要 网络解析
① DNS 解析:用户输网址按回车,浏览器获得一个域名 然后要将域名通过DNS变成IP地址
② TCP 连接:浏览器向 Web 服务器发起 TCP 连接请求,通过 TCP 三次握手建立好连接后,浏览器便可以将 HTTP 请求数据发送给服务器了
③ 发送 HTTP 请求:浏览器向 Web 服务器发起一个 HTTP 请求,HTTP 协议是建立在 TCP 协议之上的应用层协议,
HTTP的本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。在这一过程中,会涉及到负载均衡等操作。
④ 处理请求并返回:服务器获取到客户端的 HTTP 请求后,会根据 HTTP 请求中的内容来决定如何获取相应的文件,并将文件发送给浏览器。
⑤ 浏览器渲染:浏览器根据响应开始显示页面,首先解析 HTML 文件构建 DOM 树,然后解析 CSS 文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。
⑥ 断开连接:客户端和服务器通过四次挥手终止 TCP 连接。【其中的细节放在传输层详细讲解】
再简单点:
浏览器获取域名 将域名变成IP地址 然后向服务器发起TCP请求 通过三次握手建立好TCP链接 然后再向服务器发送HTTP请求 索要一个网页
然后服务器根据HTTP请求将相应文件发送给浏览器 浏览器再解析HTML文件和CSS文件构建DOM树和渲染树 将布局绘制在屏幕上 最后四次挥手终止TCP链接
什么是负载均衡?
负载均衡,指将负载(工作任务)分摊到多个操作单元上进行运行 协同完成工作任务。
负载均衡的作用:
扩展服务器和网络设备的带宽、增加吞吐量、加强网络处理能力并提高网络的灵活性和可用性。
负载均衡是分布式系统架构设计中必须考虑的因素之一,例如天猫、京东等大型用户网站中为了处理海量用户发起的请求,其往往采用分布式服务器,并通过引入反向代理等方式将用户请求均匀分发到每个服务器上,而这一过程所实现的就是负载均衡。