HTTP部分相关知识点

作为一个前端小小白,最近在准备找实习,在网上看了很多面试题,以下是自己总结的HTTP以及HTTPS部分面试

1:http报文结构(重点:请求行,请求头,请求数据)

http报文分为两种情况:请求报文和响应报文
请求报文是用户向服务器发出请求
而响应报文则是服务器向用户作出相应
http的这两种报文都有三个部分:开始行 首部行 实体主体(数据)
请求报文主要由请求行,请求头部,请求数据组成
开始行
开始行是区分请求报文还是响应报文的关键
请求报文中:开始行是由 方法 URL http协议
方法是指:向请求资源指定的资源发送请求报文的方法

常用方法:
GET :从指定的资源请求数据
POST :向指定的资源提交要被处理的数据
get和post的底层都是tcp/ip
get和post的区别:
1,get产生一个tcp数据包,而post产生两个tcp数据包
2,get,浏览器在发送请求行的时候,会将请求头和请求数据一起发出去,服务器响应200(返回数据)
而post,浏览器会先发送请求头,服务器响应100 (继续),浏览器再发送请求数据,服务器响应200(返回数据)

响应报文中:开始行(又称响应行)分为三部分:http 版本 空格 状态码组成
状态码是由三位组成,有五种写法
状态码 说明
1xx 表示通知信息的,如请求收到了或正在进行处理
2xx 表示成功
3xx 表示重定向
4xx 表示客户端的差错,如请求链接为不存在
5xx 表示服务器的差错

首部行
首部行由首部字段名 空格和值组成
可以说明浏览器,服务器,或者是报文主题的一些信息
首部行之后都有一个回车或者是换行
首部行分为四种情况:通用首部字段 ,请求首部字段,响应首部字段,实体首部字段

实体主体
在请求报文的实体主体中一般有put/post提交表单信息,实体主体的前面一般都有一个空行

2:http协议常用状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
http状态码编写有五种方式,见上题所示

3.http头部关于缓存的字段

说到这个题,先来说一说HTTP缓存机制
HTTP缓存就是浏览器第一次向一个服务器发起HTTP请求后,服务器会返回的资源,并且使用一些有关缓存的字段(字段后面会介绍)之后浏览器再向该服务器请求资源就可以视情况使用强缓存和协商缓存
强缓存:浏览器直接从本地缓存中获取数据,不与服务器进行交换
协商缓存:浏览器发送请求到服务器,服务器判断是否可以使用本地缓存
在这里插入图片描述
在请求静态文件的时候,由于这些文件不经常变化,因此把静态文件储起来是一种优化用户浏览体验的方法,同时也可以释放链路资源,缓解网络压力。

那么,应当如何确定缓存文件的有效时间呢?对此,我们需要用到HTTP头中的Expires和Cache-Control。

Expires

当客户端第一次访问一个文件资源的时候,服务端在返回资源内容的同时也返回了:

Expires: Mon, 1 Aug 2016 22:43:02 GMT

也就是服务端告诉浏览器,先把这个文件缓存起来,在这个过期时间之前,该文件都不会变化了。

下一次浏览器又要访问这个资源,并且访问的时间在Mon, 1 Aug 2016 22:43:02 GMT之前,那浏览器就不去服务器那边获取文件了,而是直接从缓存中取文件。

Cache-Control

由于Expires给定的是绝对时间,而客户端的系统时间可以由用户任意修改,比如Expires设定的过期时间是

Mon, 1 Aug 2016 22:43:02 GMT
现在用户把系统时间改为

Tue, 2 Aug 2016 22:43:02 GMT
则缓存会被判为过期(虽然实际上还没到那个时间)。因此在HTTP1.1中引入了Cache-Control,这就是一个相对时间,比如

Cache-Control: max-age=80
那就是说这份缓存的有效期是80秒,而没有给定过期的绝对时间。

由于Cache-Control是HTTP1.1中才有的,因此可能会有Expires和Cache-Control同时出现的情况,这时以Cache-Control为准。

Last-Modified / If-Modified-Since

现在有另外一个问题,服务端有个文件可能会更新,因此希望客户端时不时过来问一下这个文件是否过期。

如果没有过期,服务端不返回数据给浏览器,只返回304状态码,告诉浏览器目前的缓存还没有过期,然后浏览器继续使用已有缓存。
这个就叫做条件请求。这里就要用到以下两个头部信息
Last-Modified (response header)
If-Modified-Since (request header)
以上一小节的响应头和请求头为例,浏览器第一次请求资源的时候,服务端返回资源内容,同时也返回了

Last-Modified:Mon, 01 Aug 2016 13:48:44 GMT

也就是服务端在告诉客户端这个文件在服务器上的最后修改时间。

浏览器第二次访问的时候(假设这里没有设置Expires或者Cache-Control)。那么浏览器在访问资源的时候会在请求头上带上

If-Modified-Since:Mon, 01 Aug 2016 13:48:44 GMT

服务端收到后对比目前文件的最后修改时间和该请求头的信息,如果没有修改,那就直接返回304给浏览器,而不返回实际资源。如果有变化了,就返回200,并且带上新的资源内容。

http和https的区别

http是超文本传输协议,
HTTPS是http的安全通道,有http和SSL组成。可以说是安全版的http
区别:
1:HTTPS比http安全性能高,因为http为明文传输,而HTTPS则是由具有安全性的SSL加密传输协议
2:HTTPs协议需要ca证书,费用高
3:使用端口不同:http使用端口80,HTTPS使用端口为443
4:http连接简单,是无状态的,而HTTPS则是由http+SSL共同组成用于身份认证加密传输的网络协议,比http协议安全

http1.0 1.1 2.0 大致的区别

HTTP/1.0
HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用。相对于HTTP/0.9增加了如下主要特性

请求与响应支持头域
响应对象以一个响应状态行开始
响应对象不只限于超文本
开始支持客户端通过POST方法向Web服务器提交数据,支持GET、HEAD、POST方法
支持长连接(但默认还是使用短连接),缓存机制,以及身份认证
HTTP/1.1
HTTP协议的第三个版本是HTTP/1.1,是目前使用最广泛的协议版本。HTTP/1.1是目前主流的HTTP协议版本,相对于HTTP/1.0新增了以下内容:

1:默认为长连接

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection:keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

2:提供了范围请求功能(宽带优化)

HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。这是支持文件断点续传的基础。

3:提供了虚拟主机的功能(HOST域)

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

4:多了一些缓存处理字段

HTTP/1.1在1.0的基础上加入了一些cache的新特性,引入了实体标签,一般被称为e-tags,新增更为强大的Cache-Control头。

5:错误通知的管理

在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

HTTP/2.0

HTTP协议的第四个版本是HTTP/2.0,相对于HTTP/1.1新增了以下内容

1:二进制分帧

HTTP 2.0 的所有帧都采用二进制编码
帧:客户端与服务器通过交换帧来通信,帧是基于这个新协议通信的最小单位。
消息:是指逻辑上的 HTTP 消息,比如请求、响应等,由一或多个帧组成。
流:流是连接中的一个虚拟信道,可以承载双向的消息;每个流都有一个唯一的整数标识符(1、2 … N);
2:多路复用
多路复用允许同时通过单一的HTTP/2.0 连接发起多重的请求-响应消息。有了新的分帧机制后,HTTP/2.0不再依赖多个TCP 连接去处理更多并发的请求。每个数据流都拆分成很多互不依赖的帧,而这些帧可以交错(乱序发送),还可以分优先级。最后再在另一端根据每个帧首部的流标识符把它们重新组合起来。HTTP 2.0 连接都是持久化的,而且客户端与服务器之间也只需要一个连接(每个域名一个连接)即可。
3:头部压缩
HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。HTTP/2.0 要求通讯双方各自缓存一份首部字段表,从而避免了重复传输。
4:请求优先级

浏览器可以在发现资源时立即分派请求,指定每个流的优先级,让服务器决定最优的响应次序。这样请求就不必排队了,既节省了时间,也最大限度地利用了每个连接。

服务端推送

服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。

.tcp的三次握手和四次挥手

三次握手

三次握手可以简化为:c向s发送请求,s接收c的请求,并且向c发送确认
第一次握手:s确认收到c发送的报文段
第二次握手:c确认S已经收到自己发送的报文段,并且确认自己可以接受s发送的报文段
第三次握手:s确认c已经收到自己发送的报文段
c是客户端 ,s是服务端

定义
三次握手与四次挥手分别对应TCP连接建立过程与断开过程,先上TCP报文格式
字段介绍
(1)序号
Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号
Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
在这里插入图片描述

三次握手流程图
在这里插入图片描述
简明理解
第一次握手:Client什么都不能确认;Server确认了对方发送正常
第二次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己接收正常,对方发送正常
第三次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己发送、接收正常,对方发送接收正常
实际过程
A对B说:我的序号是x,我要向你请求连接;(第一次握手,发送SYN包,然后进入SYN-SEND状态)
B听到之后对A说:我收到你的序号x了,我给你返回一个x+1,我的序号是y,期待你下一句序号是y+1的话(意思就是收到了序号为y的话,即ack=y+1),同意建立连接。(第二次握手,发送ACK-SYN包,然后进入SYN-RCVD状态)
A听到B说同意建立连接之后,对B说:与确认你同意与我连接(ack=y+1,ACK=1,seq=x+1)。(第三次握手,A已进入ESTABLISHED状态)
B听到A的确认之后,也进入ESTABLISHED状态。

四次挥手
四次挥手流程图:
在这里插入图片描述
具体过程:
1.A与B交谈结束之后,A要结束此次会话,对B说:我要关闭连接了(seq=u,FIN=1)。(第一次挥手,A进入FIN-WAIT-1)
2.B收到A的消息后说:确认,你要关闭连接了。(seq=v,ack=u+1,ACK=1)(第二次挥手,B进入CLOSE-WAIT)
3.A收到B的确认后,等了一段时间,因为B可能还有话要对他说。(此时A进入FIN-WAIT-2),等B说完了他要说的话(只是可能还有话说)之后,对A说,我要关闭连接了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次挥手)
4.A收到B要结束连接的消息后说:已收到你要关闭连接的消息。(seq=u+1,ack=w+1,ACK=1)(第四次挥手,然后A进入CLOSED)
B收到A的确认后,也进入CLOSED。

udp和tcp的区别

TCP:传输控制协议 ,是面向连接,可靠,基于字节流的传输层通信协议
UDP:用户数据报协议,为应用程序提供了一种无需建立连接就可以发送封装IP的数据报方法
区别
1:TCP面向连接,而UDP发送数据前不需要数据连接
2:TCP传输数据,无差错,不丢失,不重复,按序到达(适合大数据交换,可靠性传输)
UDP 尽最大努力传输,但是不保证传输数据可靠(不可靠传输)
3:TCP面向字节 ,UDP面向报文
4:TCP是一对一传输 UDP既支持一对一,也支持一对多传输
5:TCP首部较大,为20字节;UDP只有8字节

cookie WebStorage

什么是cookie?
(1)cookie是指某些网站为了辨别用户身份而存储在用户本地终端上的数据(通常经过加密)。
(2)cookie是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求同一个页面时,就会发送这个 cookie 。
(3)通俗的说就是当一个用户通过HTTP协议访问一个服务器的时候,这个服务器会将一些key/Value键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整的带回给服务器。
(4)cookie是浏览器提供的一种机制,可以由 Javascript 对其进行控制,而不是 javascript 本身的性质。
Cookie 的不可跨域名性:cookie是存于用户硬盘的一个文件,这个文件通常对应于一个域名。cookie可以跨越同一个域名下的多个网页,但不能跨越多个域名使用。
什么是WebStorage?
WebStorage是HTML5中本地存储的解决方案之一,在 html5 中的 WebStorage 概念引入并不是为取代 cookie 而制定的标准,cookie 作为HTTP协议的一部分用来处理客户端和服务器通信是不可或缺的, session正是依赖于实现的客户端状态保持。
Local Storage与Session Storage的区别?
Session Storage:用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此 sessionStorage 不是一种长久化的本地存储,仅仅是会话级别的存储。
Local Storage:除非主动删除数据,否则数据是永远不会过期的。

发布了35 篇原创文章 · 获赞 5 · 访问量 820

猜你喜欢

转载自blog.csdn.net/weixin_43332220/article/details/101480844