计算机基础知识

1.从输入URL到页面展示发生了什么?

1.在浏览器中输入指定网页的URL;

2.浏览器通过DNS协议,获取域名对应的IP地址;

3.浏览器根据IP地址和端口号,向目标服务器发送一个TCP连接请求;

4.浏览器在TCP连接上,向服务器发送一个HTTP请求报文,请求获取网页的内容;

5.服务器收到HTTP请求报文后,处理请求,并返回HTTP响应报文给浏览器;

6.浏览器收到HTTP响应报文后,解析响应体中的HTML代码,渲染网页的结构和样式,同时根据HTML中的其他资源的URL(如图片,css,js),再次发起HTTP请求,获取这些资源的内容,直到网页完全加载显示;

7.浏览器在不需要和服务器通信时,可以主动关闭TCP连接,或者等待服务器的关闭请求;

2.http1.0 vs http1.1

(1)响应状态码:http1.0仅规定了16种状态码,而http1.1新增了大量状态码;

(2)缓存处理:

        http1.0中,服务器端使用expires标签来标志一个响应体,在expires标志时间内的请求,都会获得该响应体的缓存。服务器端在初次返回给客户端的响应体中,有一个last-modified标签,该标签标记了被请求资源在服务器端的最后一次修改。在请求头中,使用if-modified-since标签,该标签标志一个时间,意为向服务器端询问该时间之后我所请求的资源是否有被修改过,通常情况下,if-modified-since的值就是上一次获得该资源时,响应体中last-modified的值。如果服务器接收到了请求头,并判断if-modified-since时间后资源没有被修改过,则返回给客户端一个304not modified响应头,表示缓存可用,从浏览器中拿取;如果资源被修改过,则返回一个200ok的响应体,并附带全新的资源。

        http1.1在1.0的基础上,大大增加了灵活性和可扩展性。基本工作原理和1.0保持不变,而是增加了更多细致的特性。其中,请求头中最常见的特性就是cache-control;

(3)连接方式:

        http1.0默认使用短连接,也就是说客户端和服务器每进行一次http操作,就建立一次连接,任务结束就中断连接。这样会导致有大量的“握手报文”和“挥手报文”占用了带宽;

        http1.1优化为默认长连接模式。建立的tcp连接会持续打开,为后续的客户端-服务端的数据交互提供服务。如果tcp一直保持连接的话也是一种浪费,因此一些服务器软件(比如apache)还支持超时时间,在超时时间内没有新的请求达到,tcp连接才会关闭;

        http1.0中仍提供了长连接选项,即在请求头中加入Connection:Keep-alive。如果在http1.1中不希望使用长连接选项,也可以在请求头中加入Connect:close;

        http协议的长连接和短连接,实质上是tcp协议的长连接和短连接;实现长连接需要客户端和服务端都支持长连接;

(4)Host头处理

        域名系统(DNS)允许多个主机名绑定到同一个ip地址上,但是http1.0没有考虑这个问题,例如资源url是http://example.org/home.html,http1.0的请求报文中,将会请求get /home.html http/1.0,也就是不会加入主机名,这样的报文送到服务器端,服务器是理解不了客户端想请求的真正网址。因此,http1.1在请求头中加入了host字段,指定真正的网址;

(5)压缩

        许多格式的数据在传输时都会做预压缩处理。数据的压缩可以大幅优化带宽的利用。然而,http1.0对数据压缩的选项提供的不多,不支持压缩细节的选择,也无法区分端到端压缩或者是逐跳压缩。

        http1.1则对内容编码和传输编码做了区分。内容编码总是端到端的,传输编码总是逐跳的。

3.http常见状态码总结

http状态码用于描述http请求的结果。

类别原因短语
1xxinformational(信息性状态码)接收的请求正在处理
2xxsuccess(成功状态码)请求正常处理完毕
3xxredirection(重定向状态码)需要进行附加操作以完成请求
4xxclient error(客户端错误状态码)服务器无法处理请求
5xxserver error(服务器错误状态码)服务器处理请求出错

(1)2xx success

200:ok,请求被成功处理;

201:created,请求被成功处理并且在服务端创建一个或多个新的资源;

202:accepted,服务端已经接收到了请求但是还未处理;

204:no content,服务端已经成功处理了请求,但是没有返回任何内容;

(2)3xx Redirection

301:moved permanently,资源被永久重定向了;

302:found,资源被临时重定向了;

(3)4xx client error

400:bad request,发送的http请求存在问题,比如请求参数不合法,请求方法错误;

401:unauthorized,未认证却请求需要认证之后才能访问的资源;

403:forbidden,直接拒绝http请求,不处理。一般针对非法请求;

404:not found,你请求的资源未在服务器端找到。

409:conflict,表示请求的资源与服务端当前的状态存在冲突,请求无法被处理;

(4)5xx server error

500:internal server error,服务端出问题了(通常是服务器出bug);

502: bad gateway,我们的网关将请求转发到服务器,但是服务端返回的却是一个错误的响应;

4.http和https的区别?

端口号:http默认是80,https默认是443;

url前缀:http的url前缀是http://,https的前缀是https://;

安全性和资源消耗:http协议运行在tcp之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。https是运行在ssl/tls上的http协议,ssl/tls运行在tcp之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的秘钥用服务器方的证书进行了非对称加密。所以说,http安全性没有https高,但是https比http耗费更多服务器资源;

seo:(搜索引擎优化)搜索引擎通常会更青睐使用https协议的网站,因为https能够提供更高的安全性和用户隐私保护。使用https协议的网站在搜索结果中可能会被优先显示,从而对seo产生影响。

5.http是不保存状态的协议,如何保存用户状态?

http是一种不保存状态,即无状态协议。Session机制的存在就是为了解决这个问题,Session的主要作用就是通过服务端记录用户的状态。在服务端保存Session的方法很多,最常用的就是内存和数据库。

6.Tcp和Udp的区别?

1.是否面向连接:Udp在传送数据之前不需要先建立连接。而Tcp提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。

2.是否是可靠传输:远程主机在收到udp报文后,不需要给出任何确认,并且不保证数据不丢失。不保证是否按顺序到达。Tcp提供可靠的传输服务,tcp在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制等机制。通过tcp连接传输的数据,无差错、不丢失、不重复、并且按序到达。

3.是否有状态:tcp传输是有状态的,这个有状态说的是tcp会去记录自己发送消息的状态比如消息是否发送了,是否被接受了等等。为此,tcp需要维持复杂的连接状态表。而udp是无状态服务;

4.传输效率:由于使用tcp进行传输的时候多了连接、确认、重传等机制,所以tcp的传输效率要比udp低很多;

5.传输形式:tcp是面向字节流的,udp是面向报文的;

6.首部开销:tcp首部开销比udp首部开销要大;

7.是否提供广播或多播服务:tcp只支持点对点通信,udp支持一对一、一对多、多对一、多对多;

7.tcp三次握手和四次挥手?

一次握手:客户端发送带有syn(seq = x)标志的数据包到服务端,然后客户端进入syn_send状态,等待服务端的确认;

二次握手:服务端发送带有syn + ack(seq = y, ack = x + 1)标志的数据包到客户端,然后服务端进入syn_recv状态;

三次握手:客户端发送带有ack(ack = y + 1)标志的数据包到服务端,然后客户端和服务端都进入established状态,完成tcp三次握手;

第一次挥手:客户端发送一个fin(seq = x)标志的数据包到服务端,用来关闭客户端到服务端的数据传送。然后客户端进入fin-wait-1状态;

第二次挥手:服务端收到这个fin(seq = x)标志的数据包,它发送一个ack(ack = x + 1)标志的数据包到客户端,然后服务端进入close-wait状态,客户端进入fin-wait-2状态;

第三次挥手:服务端发送一个fin(seq = y)标志的数据包到客户端,请求关闭连接,然后服务端进入last-ack状态;

第四次挥手:客户端发送ack(ack = y + 1)标志的数据包到服务端,然后客户端进入time-wait状态,服务端在收到ack(ack = y + 1)标志的数据包后进入close状态。此时如果客户端等待2 msl(报文段最长寿命) 后依然没有收到回复说明服务端已经正常关闭,随后客户端也可以关闭连接了;

8.tcp如何保证传输的可靠性?

1.基于数据块传输:应用数据被分割成tcp认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段;

2.对失序数据包重新排序以及去重:tcp为了保证不发生丢包,会给每个包一个序列号,有了序列号就能对接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重;

3.校验和:tcp将保持它首部和数据的校验和。这是一个端到端的校验,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,tcp将丢弃这个报文段和不确认收到此报文段。

4.重传机制:在数据包丢失或延迟的情况下,重新发送数据包,直到收到对方的确认应答(ack)。

5.流量控制:tcp连接的每一方都有固定大小的缓冲空间,tcp的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。tcp使用的流量控制协议是可变大小的滑动窗口协议。

6.拥塞控制:当网络拥塞时,减少数据的发送。tcp在发送数据时,需要考虑两个因素:一是接收方的接收能力,二是网络的拥塞程度。接收方的接收能力用滑动窗口表示,表示接收方还有多少缓冲区可以用来接收数据,网络的拥塞程度用拥塞窗口表示,它是发送方根据网络状况自己维护的一个值,表示发送方认为可以再网络中传输的数据量。发送方发送数据的大小是滑动窗口和拥塞窗口的最小值,这样可以保证发送方既不会超过接收方的接收能力,也不会造成网络的过度拥塞;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值