1.来说说长连接
1.http(单工)是应用层的,而socket(双工流)是应用层和传输层之间的抽象层。长连接短连接虽然可以说,但本质上是tcp的长连接和短连接。
2.http来说就是把头部的Connection设置为keep-alive。要服务器上同样设置为keep-alive
3.长连接最重要的是可以服用TCP连接,这样减少了每次建立连接和断开连接的开销。
4.长连接不会长时间保持的,如果长时间没有响应,超时会自动断开的。
5.TCP是socket上的一种通信协议.
2.来说说三次握手和四次挥手 blog.csdn.net/qq_38950316…
(1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手
3.来说说文件协议和http协议的区别:
使用场景:本地打开一个html静态文件,里面引用了cdn上的其他静态文件,图片,css
或者js,你会发现根本加载不成功,但是把那个路径复制粘贴到浏览器里面就可以加载
成功了,这个是为啥呢?因为本地打开一个文件走的是文件协议,文件协议只能读取
本地的文件
什么是file协议:file协议主要用于访问本地计算机中的文件,好比通过Windows的资
源管理器中打开文件或者通过右键单击‘打开’一样。
4.来说说content-type区别:
/*1 content-type:application/x-www-form-urlencoded
默认的。如果不指定content-type,默认使用此格式。
参数格式:key1=value1&key2=value2
let querystirng = require('querystring');
要用querystring.parse()解析
// console.log(querystirng.parse('a==b&c==d','&','=='));
2 content-type:application/json
参数为json格式
{
"key1":"value1",
"key2":"value2"
}
要用JSON.parse()解析
result = JSON.parse(result)
3 content-type:multipart/form-data [dinghanhua]
上传文件用这种格式*/
5.来说说字符集的事情
https://blog.csdn.net/yamadeee/article/details/84250297
6.来说说refer和防盗链
为了减少流量,引用别的网站的图片,但是有的引进之后不能访问,报404错误。
在网站的统计结果里面,统计访问从何而来?统计时候,是如何得知用户从哪来到的本网站呢?
在HTTP协议中有一个重要的选项:Refer
Refer:代表网页的来源,及上一页的地址
如果是直接在浏览器上输入地址,回车进来,则没有Refer头
这也是:为什么服务器知道我们的图片是从哪引用的,也知道客户从那个网站链接点击过来的。
问题:作为网站开发者,如何配置服务用来图片防盗链?
原理:可以再HTTP协议层面,在web服务器层面,根据http协议的referer头信息来判断,
如果来自站外,则统一重写到一个很小的防盗链提醒图片上去。
7.来说说下载中的断点续传问题
在HTTP协议请求中,如果想从文件的某一位置接受数据,就要加上Range头部,Range头部的格式有如下几种情况:
表示头500个字节:bytes=0-499
在发出带Range的请求后,服务器会在Content-Range头部返回当前接受的范围和文件总大小,如:
Content-Range: 0-499/2240
这里0-499是指当前发送的数据的范围,而22400则是文件的总大小
8.http之缓存
状态码: 304 缓存
缓存分为两种:强制缓存 协商(对比)缓存
先说说强缓存:
expires:这是http1.0时的规范,GMT格式的时间字符串,请求的时间在expires之前,那么本地缓存始终有效
cache-control:max-age=number,这是http1.1时出现的header信息,number毫秒内有效
再说说协商缓存:
stat方法拿到一个stat对象,然后利用stat.ctime属性设置响应头中的Last-Modified
当下次请求的到来的时候,利用stat.ctime属性对比客户端返回的if-modified-since
缺点:
1.最后修改时间 一般会有些误差 时间可能不会那么精确 (一秒内改了多次)
2.CDN 分发的时间不同 可能也会导致缓存失效
// 如果文件非常大我们需要读取文件的内容比对
9.http1.1和http2.0的区别
(1)新的二进制格式:
HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
(2)多路复用:
即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
(3)header压缩:
对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
(4)服务端推送:
同SPDY一样,HTTP2.0也具有server push功能。