网络与TCP-IP

1、http报文的请求会有几个部分
http的报文分为:请求报文和响应报文
1】请求报文
请求行、请求头部、空行、请求数据(请求体)
1)请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1
2)请求头部(见上)
3)空行
它的作用是通过一个空行,告诉服务器请求头部到此为止
4)请求数据
若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据

2】响应报文
HTTP响应报文也由三部分组成:响应行、响应头、响应体
1)响应行
响应行一般由协议版本、状态码及其描述组成
比如 HTTP/1.1 200 OK
2)响应头(见下)
3)响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JSON就是JSON

2、常见http请求头和响应头?
1】请求头
Accept
可接受的响应内容类型(Content-Types) Accept: text/plain
Authorization
用于表示HTTP协议中需要认证资源的认证信息 Authorization: Basic OSdjJGRpbjpvcGVuIANlc2SdDE==
Cache-Control
用来指定当前的请求/回复中的,是否使用缓存机制。 Cache-Control: no-cache
Cookie
由之前服务器通过Set-Cookie(见下文)设置的一个HTTP协议Cookie Cookie: $Version=1; Skin=new;
Host
表示服务器的域名以及服务器所监听的端口号。如果所请求的端口是对应的服务的标准端口(80),则端口号可以省略。 Host: www.itbilu.com:80 Host: www.itbilu.com
Origin
发起一个针对跨域资源共享的请求(该请求要求服务器在响应中加入一个Access-Control-Allow-Origin的消息头,表示访问控制所允许的来源)。 Origin: http://www.itbilu.com
User-Agent
浏览器的身份标识字符串 User-Agent: Mozilla/……

2】响应头
Access-Control-Allow-Origin
指定哪些网站可以跨域源资源共享 Access-Control-Allow-Origin: *
Cache-Control
通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒 Cache-Control: max-age=3600
Content-Length
响应消息体的长度,用8进制字节表示 Content-Length: 348
Server
服务器的名称 Server: nginx/1.6.3
Set-Cookie
设置HTTP cookie Set-Cookie: UserID=itbilu; Max-Age=3600; Version=1
Status
通用网关接口的响应头字段,用来说明当前HTTP连接的响应状态 Status: 200 OK

3、常见的一些HTTP状态码
1】2开头 (请求成功)
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页
201 (已创建) 请求成功并且服务器创建了新的资源
2】3
开头 (请求被重定向)
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
304 (未修改/缓存) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
3】4开头 (请求错误)
400 (错误请求) 服务器不理解请求的语法(参数缺失)
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应
403 (禁止) 服务器拒绝/禁止请求
404 (未找到) 服务器找不到请求的网页
405 (方法禁用) 禁用请求中指定的方法
413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力(上传文件)
415 (不支持的媒体类型) 请求的格式不受请求页面的支持
4】5
开头(服务器错误)
500 (服务器内部错误) 服务器遇到错误,无法完成请求
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应
503 服务不可用
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求

4、http1.1
1】相比1.0新增的属性
a、长连接
b、节约带宽
HTTP1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能。HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端接收到100才开始把请求body发送到服务器;如果返回401,客户端就可以不用发送请求body了节约了带宽。
c、HOST域
HTTP1.1的请求消息和响应消息都支持host域,且请求消息中如果没有host域会报告一个错误(400 Bad Request)
d、缓存处理
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
2】如何复用tcp连接
HTTP 的header里有一个“Keep-Alive”参数,用来告知服务器:我想要保存此次连接,我稍后还会请求,这样我们可以避免再次TCP三次握手

5、介绍http2.0
1)介绍
1】解析速度快
服务器解析 HTTP1.1 的请求时,必须不断地读入字节,直到遇到分隔符 CRLF 为止。
而解析 HTTP2 的请求就不用这么麻烦,因为 HTTP2 是基于帧的协议,每个帧都有表示帧长度的字段。
2】多路复用
HTTP1.1 如果要同时发起多个请求,就得建立多个 TCP 连接,因为1个 TCP 连接同时只能处理1个 HTTP1.1 的请求。
在 HTTP2 上,多个http请求可以共用1个TCP 连接,这称为多路复用。同1个请求和响应用1个流来表示,并有唯一的流 ID 来标识。
3】首部压缩
HTTP2 提供了首部压缩功能。
多个请求如果数据重复的部分比较多,可以把相同的首部存储起来,仅发送它们之间不同的部分,就可以节省不少的流量,加快请求的时间。
4】服务器推送
HTTP2 新增的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。
无需客户端明确地请求,服务器还可以额外向客户端推送资源。
2)应用
一般是由后端和nginx来启用。

6、TCP三次握手

1】传输层传输协议分为UDP和TCP两种
UDP是无连接的协议,而TCP是可靠的有连接的协议
由于HTTP协议使用的是TCP协议
2】握手过程
第一次握手
客户主动(active open)去connect服务器,并且发送SYN 假设序列号为J,
服务器是被动打开(passive open)
第二次握手
服务器在收到SYN后,它会发送一个SYN以及一个ACK(应答)给客户,
ACK的序列号是 J+1表示是给SYN J的应答,新发送的SYN K 序列号是K
第三次握手
客户在收到新SYN K, ACK J+1 后,也回应ACK K+1 以表示收到了,
然后两边就可以开始数据发送数据了
3】握手意义
解决的不仅仅有数据包序号问题,还解决了包括窗口大小、MTU(Maximum Transmission Unit,最大传输单元),以及所期望的网络延时等其他问题。
4】构建TCP请求会增加大量的网络时延,常用的优化方式如下所示
(1)资源打包,合并请求
(2)多使用缓存,减少网络传输
(3)使用keep-alive建立持久连接
(4)使用多个域名,增加浏览器的资源并发加载数,或者使用HTTP2的管道化连接的多路复用技术

7、TCP四次挥手
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

8、计算机网络分层
1)OSI模型的七层
1】物理层
集线器和网线,比特流
2】数据链路层
交换机通过MAC地址转发数据,逻辑链路控制
3】网络层
路由器通过 ip 进行寻址
4】传输层
负责网络传输,tcp 和 udp
5】会话层
6】表示层
7】应用层
为应用程序提供网络服务,telnet, ssh, http, ftp, smtp

2)TCP/IP模型的四层

1】链路层:包括操作系统中的设备驱动程序、计算机中对应的网络接口卡
2】网络层:处理分组在网络中的活动,比如分组的选路。
3】传输层:主要为两台主机上的应用提供端到端的通信。
4】应用层:负责处理特定的应用程序细节。

9、从输入URL到页面加载全过程

1】浏览器构建HTTP Request请求
1)应用层进行DNS解析
通过DNS将域名解析成IP地址,若浏览器缓存有对应的解析结果,则直接取出来,若无,将这次的解析结果保存到浏览器
2)应用层生成HTTP请求报文(见上)
3)传输层建立TCP三次握手(见上)
4)网络层使用IP协议来选择路线
5)数据链路层将数据封装成帧,然后实现网络相邻结点间可靠的数据通信
6)物理层传输数据,将数据链路层的帧(Frame)转换成二进制形式的比特(Bit)流,从网卡发送出去

2】网络传输
从客户机到服务器需要通过许多网络设备, 一般地,包括集线器、交换器、路由器和防火墙

3】服务器构建HTTP Response 响应
服务器接收到这个比特流,把比特流转换成帧格式,上传到数据链路层,服务器发现数据帧中的目的MAC地址与本网卡的MAC地址相同,服务器拆除数据链路层的封装后,把数据包上传到网络层。服务器的网络层比较数据包中的目的IP地址,发现与本机的IP地址相同,服务器拆除网络层的封装后,把数据分段上传到传输层。传输层对数据分段进行确认、排序、重组,确保数据传输的可靠性。数据最后被传到服务器的应用层
  HTTP服务器,如nginx通过反向代理,将其定位到具体的后台服务的实际的端口位置,比如,8080端口对应的是一个nodejs服务,然后nodejs接收到这些数据之后,经过一系列的逻辑处理,生成对应的响应报文

4】网络传输
应用层的响应报文,通过传输层、网络层、数据链路层的层层封装,最终在物理层将响应报文封装成二进制比特流,并转换成其他信号,如电信号到网络中传输

5】浏览器渲染页面
客户机接受到二进制比特流之后,把比特流转换成帧格式,上传到数据链路层,客户机发现数据帧中的目的MAC地址与本网卡的MAC地址相同,拆除数据链路层的封装后,把数据包上传到网络层。网络层比较数据包中的目的IP地址,发现与本机的IP地址相同,拆除网络层的封装后,把数据分段上传到传输层。传输层对数据分段进行确认、排序、重组,确保数据传输的可靠性。数据最后被传到应用层。
应用层开始处理:
1、如果HTTP响应报文是301或302重定向,则浏览器会相应头中的location再次发送请求
2、浏览器处理HTTP响应报文中的主体内容,首先使用loader模块加载相应的资源
loader模块有两条资源加载路径:主资源(index.html)加载路径和派生资源(静态文件)加载路径
3、使用parse模块解析HTML、CSS、Javascript资源
4、构建DOM树、Render树及RenderLayer树
Render树用于表示文档的可视信息,记录了文档中每个可视元素的布局及渲染方式
5、布局和渲染
布局:就是安排和计算页面中每个元素大小位置等几何信息的过程。HTML采用流式布局模型,基本的原则是页面元素在顺序遍历过程中依次按从左至右、从上至下的排列方式确定各自的位置区域
渲染:Paint模块负责将Render树映射成可视的图形,它会遍历Render树调用每个Render节点的绘制方法将其内容显示在一块画布或者位图上
6、硬件加速
硬件渲染是指网页各层的合成是通过GPU完成的

【重绘和回流】
  重绘和回流是在页面渲染过程中非常重要的两个概念。页面生成以后,脚本操作、样式表变更,以及用户操作都可能触发重绘和回流
  回流reflow是firefox里的术语,在chrome中称为重排relayout
  回流是指窗口尺寸被修改、发生滚动操作,或者元素位置相关属性被更新时会触发布局过程,在布局过程中要计算所有元素的位置信息。由于HTML使用的是流式布局,如果页面中的一个元素的尺寸发生了变化,则其后续的元素位置都要跟着发生变化,也就是重新进行流式布局的过程,所以被称之为回流。

10、浏览器缓存:强缓存(本地缓存) 和协商缓存
1)浏览器在第一次请求发生后,再次请求时:
1】先判断是否命中强缓存
浏览器在请求某一资源时,会先获取该资源缓存的header信息,判断是否命中强缓存(cache-control和expires信息),若命中直接从缓存中获取资源信息,包括缓存header信息;本次请求根本就不会与服务器进行通信;
2】再判断是否命中协商缓存
如果没有命中强缓存,浏览器会发送请求到服务器,请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified/If-Modified-Since和Etag/If-None-Match),由服务器根据请求中的相关header信息来比对结果是否协商缓存命中;若命中,则服务器返回新的响应header信息更新缓存中的对应header信息,但是并不返回资源内容,它会告知浏览器可以直接从缓存获取;否则返回最新的资源内容。
2)强缓存
强缓存是利用http头中的Expires和Cache-Control两个字段来控制的,用来表示资源的缓存时间。强缓存中,普通刷新会忽略它,但不会清除它,需要强制刷新。
1】Expires
代表这这个资源的失效时间,只要发送请求时间是在Expires之前,那么本地缓存始终有效。
Expires有一个非常大的缺陷,它使用一个固定的时间,要求服务器与客户端的时钟保持严格的同步,并且这一天到来后,服务器还得重新设定新的时间。
2】Cache-Control
HTTP1.1引入了Cathe-Control,它使用max-age指定组件被缓存多久,从请求开始在max-age时间内浏览器使用缓存,之外的使用请求,这样就可以消除Expires的限制。如果对浏览器兼容性要求很高的话,可以两个都使用。
a、no-cache:不使用本地缓存,需要使用缓存协商
b、no-store:直接禁止浏览器缓存数据
c、public:可以被所有的用户缓存,包括终端用户和CDN
d、private:只能被终端用户的浏览器缓存,不允许CDN缓存
3)应用
1】html标签


2】nginx
location ~ .(gif|jpg|jpeg|png|bmp|ico)$ {
root /var/www/img/;
expires 30d;
}
location / {
root /home/www/html;
add_header Cache-Control max-age=3600;
}

11、提交方式post和get有什么区别?
(1)post是向服务器传送数据;get是从服务器上获取数据。
(2)在客户端,get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。
post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
(3)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
例如:get 提交Request.QueryString[“aa”].ToString();
post 提交用 Request.Form[“aa”].ToString();
(4)get可以传送的数据量则非常小,只能有1024字节,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
(5)安全性问题。正如在(1)中提到,使用 get 的时候,参数会显示在浏览器地址栏上,而 post 不会。
(6)get请求可以被缓存,post不可以被缓存

12、http请求中的keep-alive有了解吗
通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。 但是,长时间的tcp连接容易导致系统资源无效占用。配置不当的keep-alive,有时比重复利用连接带来的损失还更大。所以,正确地设置keep-alive timeout时间非常重要

13、DNS解析的具体过程

当一个用户在地址栏输入www.taobao.com时,DNS解析有大致十个过程,如下:

  1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。
  2. 如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。

但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly,防止被恶意篡改。
3.  如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
4. 如果LDNS仍然没有命中,就直接跳到Root Server 域名服务器请求解析
5. 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址
6. 此时LDNS再发送请求给上一步返回的gTLD
7. 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
8. Name Server根据映射关系表找到目标ip,返回给LDNS
9. LDNS缓存这个域名和对应的ip
10. LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束

14、介绍HTTPS
1)简介
HTTPS=HTTP+SSL,在 HTTP 层和 TCP 之间加了一个 SSL/TLS 层。SSL(Secure Sockets Layer)中文叫“安全套接层”,后来由于广泛应用,SSL 标准化之后就改名为 TLS(Transport Layer Security)

它的工作流程一般如以下方式:
1】TCP 三次同步握手
2】客户端验证服务器数字证书
3】DH 算法协商对称加密算法的密钥、hash 算法的密钥
4】SSL 安全加密隧道协商完成
5】网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
2)https请求可以拦截吗
使用axios,使用请求和响应统一拦截器。
3)https对称和非对称加密
对称:加密和解密都是通过同一个秘钥
非对称:是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值