1.Http 与 Https 的区别:
HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
HTTP 是不安全的,而 HTTPS 是安全的
HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 的安全传输机制工作在传输
层
HTTP 无法加密,而 HTTPS 对传输的数据进行加密
HTTP 无需证书,而 HTTPS 需要 CA 机构 wosign 的颁发的 SSL 证书
2.什么是 Http 协议无状态协议?怎么解决 Http 协议无状态协议?(了解)
无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面
的信息
也就是说,当客户端一次 HTTP 请求完成以后,客户端再发送一次 HTTP 请求,HTTP
并不知道当前客户端是一个”老用户“。
可以使用 Cookie 来解决无状态的问题,Cookie 就相当于一个通行证,第一次访
问的时候给客户端发送一个 Cookie,当客户端再次来的时候,拿着 Cookie(通行
证),那么服务器就知道这个是”老用户“。
3.URI 和 URL 的区别(了解)
URI,是 uniform resource identifier,统一资源标识符,用来唯一的标识一
个资源。
Web 上可用的每种资源如 HTML 文档、图像、视频片段、程序等都是一个来 URI
来定位的
URI 一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。
URL 是 uniform resource locator,统一资源定位器,它是一种具体的 URI,即
URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。
URL 是 Internet 上用来描述信息资源的字符串,主要用在各种 WWW 客户程序和
服务器程序上,特别是著名的 Mosaic。
采用 URL 可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址
和目录等。URL 一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机 IP 地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如
mailto:java-net@java.sun.com。
URI 是以一种抽象的,高层次概念定义统一资源标识,而 URL 和 URN 则是具体的
资源标识的方式。URL 和 URN 都是一种 URI。笼统地说,每个 URL 都是 URI,但
不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称
(URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI
都是 URN 的示例。
在 Java 的 URI 中,一个 URI 实例可以代表绝对的,也可以是相对的,只要它符
合 URI 的语法规则。而 URL 类则不仅符合语义,还包含了定位该资源的信息,因
此它不能是相对的。
在 Java 类库中,URI 类不包含任何访问资源的方法,它唯一的作用就是解析。
相反的是,URL 类可以打开一个到达资源的流。
4.常用的 HTTP 方法有哪些?
GET: 用于请求访问已经被 URI(统一资源标识符)识别的资源,可以通过 URL
传参给服务器
POST:用于传输信息给服务器,主要功能与 GET 方法类似,但一般推荐使用 POST
方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应 URI 位置。
HEAD: 获得报文首部,与 GET 方法类似,只是不返回报文主体,一般用于验证
URI 是否有效。
DELETE:删除文件,与 PUT 方法相反,删除对应 URI 位置的文件。
OPTIONS:查询相应 URI 支持的 HTTP 方法。
HTTP 请求报文与响应报文格式
HTTP 请求报文与响应报文格式
请求报文包含四部分:
a、请求行:包含请求方法、URI、HTTP 版本信息
b、请求首部字段
c、请求内容实体
d、空行
响应报文包含四部分:
a、状态行:包含 HTTP 版本、状态码、状态码的原因短语
b、响应首部字段
c、响应内容实体
d、空行
常见的首部:
通用首部字段(请求报文与响应报文都会使用的首部字段)
Date:创建报文时间
Connection:连接的管理
Cache-Control:缓存的控制
Transfer-Encoding:报文主体的传输编码方式
请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器
Accept:可处理的媒体类型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的自然语言
响应首部字段(响应报文会使用的首部字段)
Accept-Ranges:可接受的字节范围
Location:令客户端重新定向到的 URI
Server:HTTP 服务器的安装信息
实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
Allow:资源可支持的 HTTP 方法
Content-Type:实体主类的类型
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的的字节数
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
5.HTTPS 工作原理(了解)
一、首先 HTTP 请求服务端生成证书,客户端对证书的有效期、合法性、域名是
否与请求的域名一致、证书的公钥(RSA 加密)等进行校验;
二、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数
使用公钥进行加密(RSA 加密);
三、消息体产生的后,对它的摘要进行 MD5(或者 SHA1)算法加密,此时就得到
了 RSA 签名;
四、发送给服务端,此时只有服务端(RSA 私钥)能解密。
五、解密得到的随机数,再用 AES 加密,作为密钥(此时的密钥只有客户端和服
务端知道)。
具体的参考链接:
一次完整的 HTTP 请求所经历的 7 个步骤
一次完整的 HTTP 请求所经历的 7 个步骤
HTTP 通信机制是在一次完整的 HTTP 通信过程中,Web 浏览器与 Web 服务器之间
将完成下列 7 个步骤:
建立 TCP 连接
在 HTTP 工作开始之前,Web 浏览器首先要通过网络与 Web 服务器建立连接,该
连接是通过 TCP 来完成的,该协议与 IP 协议共同构建 Internet,即著名的
TCP/IP 协议族,因此 Internet 又被称作是 TCP/IP 网络。HTTP 是比 TCP 更高层
次的应用层协议,根据规则, 只有低层协议建立之后才能,才能进行更层协议
的连接,因此,首先要建立 TCP 连接,一般 TCP 连接的端口号是 80。
Web 浏览器向 Web 服务器发送请求行
一旦建立了 TCP 连接,Web 浏览器就会向 Web 服务器发送请求命令。例如:GET
/sample/hello.jsp HTTP/1.1。
Web 浏览器发送请求头
浏览器发送其请求命令之后,还要以头信息的形式向 Web 服务器发送一些别的信
息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
Web 服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,
应答的第一部分是协议的版本号和应答状态码。
Web 服务器发送应答头
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发
送关于它自己的数据及被请求的文档。
Web 服务器向浏览器发送数据
Web 服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到
此为结束,接着,它就以 Content-Type 应答头信息所描述的格式发送用户所请
求的实际数据。
Web 服务器关闭 TCP 连接
一般情况下,一旦 Web 服务器向浏览器发送了请求数据,它就要关闭 TCP 连接,
然后如果浏览器或者服务器在其头信息加入了这行代码:
Connection:keep-alive
TCP 连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接
发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带
宽。
建立 TCP 连接->发送请求行->发送请求头->(到达服务器)发送状态行->发送响
应头->发送响应数据->断 TCP 连接
最具体的 HTTP 请求过程:
6.常见的 HTTP 相应状态码
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行 GET 方法,
相应报文中通过 Content-Range 指定范围的资源。
301:永久性重定向
302:临时重定向
303:与 302 状态码有相似功能,只是它希望客户端在请求一个 URI 的时候,能
通过 GET 方法重定向到另一个 URI 上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与 302 类似,只是强制要求使用 POST 方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙
7.HTTP1.1 版本新特性
a、默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开 TCP
连接,就一直保持连接,可以发送多次 HTTP 请求
b、管线化,客户端可以同时发出多个 HTTP 请求,而不用一个个等待响应
c、断点续传
实际上就是利用 HTTP 消息头使用分块传输编码,将实体主体分块传输。
8.HTTP 优化方案
我下面就简要概括一下:
TCP 复用:TCP 连接复用是将多个客户端的 HTTP 请求复用到一个服务器端 TCP
连接上,而 HTTP 复用则是一个客户端的多个 HTTP 请求通过一个 TCP 连接进行处
理。前者是负载均衡设备的独特功能;而后者是 HTTP 1.1 协议所支持的新功能,
目前被大多数浏览器所支持。
内容缓存:将经常用到的内容进行缓存起来,那么客户端就可以直接在内存中获
取相应的数据了。
压缩:将文本数据进行压缩,减少带宽
SSL 加速(SSL Acceleration):使用 SSL 协议对 HTTP 协议进行加密,在通道
内加密并加速
TCP 缓冲:通过采用 TCP 缓冲技术,可以提高服务器端响应时间和处理效率,减
少由于通信链路问题给服务器造成的连接负担。
9.GET 和 POST 两种请求方式的区别
一、功能不同
1、get 是从服务器上获取数据。
2、post 是向服务器传送数据。
二、过程不同
1、get 是把参数数据队列加到提交表单的 ACTION 属性所指的 URL 中,值和
表单内各个字段一一对应,在 URL 中可以看到。
2、post 是通过 HTTP post 机制,将表单内各个字段与其内容放置在 HTML
HEADER 内一起传送到 ACTION 属性所指的 URL 地址。用户看不到这个过程。
三、获取值不同(了解即可)
1、对于 get 方式,服务器端用 Request.QueryString 获取变量的值。
2、对于 post 方式,服务器端用 Request.Form 获取提交的数据。
四、传送数据量不同
1、get 传送的数据量较小,不能大于 2KB。
2、post 传送的数据量较大,一般被默认为不受限制。但理论上,IIS4 中最大量
为 80KB,IIS5 中为 100KB。
五、安全性不同
1、get 安全性非常低。
2、post 安全性较高。
如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据
监听到。
10.用户从输入 URL 到页面渲染完成都有哪些过程?(简单阐述即可)
从输入 URL 到渲染出完整页面大致可分为以下几个阶段。
【用户输入】用户输入关键字,按下回车;
【发送 URL 请求】浏览器进程通过进程间通信(IPC)把 URL 请求发送至网络
进程(浏览器告诉计算机要发送一条 url 请求);
【查找缓存 / DNS 解析 / 建立 TCP 连接】优先从本地的域名存放文件 host
中进行查找,找到 url 地址对应的真实 IP 地址,如果找不到就向最近的存放域
名解析的 DNS 服务器发送请求,得到最终的 IP 地址;
【发送请求信息】浏览器构建请求行、请求头等信息,并把和该域名相关的
Cookie 等数据附加到请求头中,发送给目标服务器。服务器根据请求信息生成
响应数据,发给计算机的网络进程做出响应;
【解析响应头】客户端计算机的网络进程解析响应头,如果返回的状态码是 301
或 302,就从响应头的 Location 字段读取重定向地址,然后再发起新的请求。
如果返回的状态码是 200,浏览器就继续处理响应数据;
【处理响应数据 / 准备渲染进程】浏览器根据响应头中的 Content-Type 值决
定如何显示响应体的内容(也就是服务器返回的是什么类型的数据或文件),如
果 Content-Type 值为 text/html,则服务器返回的数据是 HTML 格式,浏览器
就将数据提交给渲染进程;
11.跨域问题怎么解决?
解决跨域的问题可以考虑以下几种方式:
1. 服务器开启 CORS 来实现跨域资源共享
普通跨域请求:只需要服务端设置 Access-Control-Allow-Origin 即可,前
端无须设置。
2. 设置 jsonp
通常为了减轻 web 服务器的负载,我们把 js、css,img 等静态资源分离到
另一台独立域名的服务器上,在 html 页面中再通过相应的标签从不同域名下加
载静态资源,而被浏览器允许,基于此原理,我们可以通过动态创建 script,再
请求一个带参网址实现跨域通信。缺点也很明显,就是只能实现 get 一种请求。
3. Vue 开发跨域使用 devserver 配置代理
在项目根目录中,找到或者创建 vue.config.js 配置文件,配置 devServer
的 proxy 进行代理:
module.exports = {
entry: {},
module: {},
...
devServer: {
historyApiFallback: true,
proxy: {
'/api':{ // 这个是你要替换的位置
target: 'www.baidu.com',//这个是被替换的目标地…
secure:true ,//接受对方是 https 的接口
changeOrigin:true ,// 是否需要跨域
pathRewrite: {'^/api' : ''}
}
}
}
4. nginx 反向代理接口跨域(了解,主要由运维或后端实现)
跨域原理: 同源策略是浏览器的安全策略,不是 HTTP 协议的一部分。服
务器端调用 HTTP 接口只是使用 HTTP 协议,不会执行 JS 脚本,不需要同源策
略,也就不存在跨越问题(简单理解,就是通过服务器来发起请求,服务器之间
通信没有跨域问题)。
实现思路:通过 nginx 配置一个代理服务器(域名与 domain1 相同,端口
不同)做跳板机,反向代理访问 domain2 接口,并且可以顺便修改 cookie 中
domain 信息,方便当前域 cookie 写入,实现跨域登录。
nginx 具体配置(#号为注释):
#proxy 服务器
server {
listen 81;
server_name www.domain1.com;
location / {
proxy_pass www.domain2.com:8080; #反向代理
proxy_cookie_domain www.domain2.com www.domain1.com; #
修改 cookie 里域名
index index.html index.htm;
# 当用 webpack-dev-server 等中间件代理接口访问 nignx 时,此时
无浏览器参与,故没有同源限制,下面的跨域配置可不启用
add_header Access-Control-Allow-Origin
www.domain1.com; #当前端只跨域不带 cookie 时,可为*
add_header Access-Control-Allow-Credentials true;
}
}
12.项目优化的方案?
首先,针对客户端的优化可以分为资源优化和渲染优化,其中
资源优化可以有以下几种方案:
1. 静态资源压缩合并, 减少 http 请求
2. 静态资源进行客户端缓存
3. CDN 外链资源
4. 单页面应用程序进行 SSR 后端渲染
5. 服务器 gzip,减少资源体积
6. DNS 预解析
7. 使用精灵图和二倍图
8. script 异步加载
异步加载方式
a. 动态脚本加载
b. script 标签添加 defer 属性
c. script 标签添加 async 属性
异步加载区别:
- defer 是在 html 解析之后执行,如果是多个,按照加载顺序依次执行
- async 是在加载之后立即执行, 如果是多个, 执行顺序与加载顺序无关
然后是渲染优化:
1. CSS 前面, JS 后面
2. 懒加载(图片懒加载,下拉加载更多)
3. 减少 dom 操作(增删改查)
4. 事件节流防抖
5. 预加载(preload, prefetch)
12.Ajax 请求状态及含义?
readyState 属性表示 Ajax 请求的当前状态。它的值用数字代表。
0 代表未初始化。 还没有调用 open 方法
1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
2 代表已加载完毕。send 已被调用。请求已经开始
3 代表交互中。服务器正在发送响应
4 代表完成。1.Http 与 Https 的区别:
HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
HTTP 是不安全的,而 HTTPS 是安全的
HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 的安全传输机制工作在传输
层
HTTP 无法加密,而 HTTPS 对传输的数据进行加密
HTTP 无需证书,而 HTTPS 需要 CA 机构 wosign 的颁发的 SSL 证书
2.什么是 Http 协议无状态协议?怎么解决 Http 协议无状态协议?(了解)
无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面
的信息
也就是说,当客户端一次 HTTP 请求完成以后,客户端再发送一次 HTTP 请求,HTTP
并不知道当前客户端是一个”老用户“。
可以使用 Cookie 来解决无状态的问题,Cookie 就相当于一个通行证,第一次访
问的时候给客户端发送一个 Cookie,当客户端再次来的时候,拿着 Cookie(通行
证),那么服务器就知道这个是”老用户“。
3.URI 和 URL 的区别(了解)
URI,是 uniform resource identifier,统一资源标识符,用来唯一的标识一
个资源。
Web 上可用的每种资源如 HTML 文档、图像、视频片段、程序等都是一个来 URI
来定位的
URI 一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。
URL 是 uniform resource locator,统一资源定位器,它是一种具体的 URI,即
URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。
URL 是 Internet 上用来描述信息资源的字符串,主要用在各种 WWW 客户程序和
服务器程序上,特别是著名的 Mosaic。
采用 URL 可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址
和目录等。URL 一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机 IP 地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如
mailto:java-net@java.sun.com。
URI 是以一种抽象的,高层次概念定义统一资源标识,而 URL 和 URN 则是具体的
资源标识的方式。URL 和 URN 都是一种 URI。笼统地说,每个 URL 都是 URI,但
不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称
(URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI
都是 URN 的示例。
在 Java 的 URI 中,一个 URI 实例可以代表绝对的,也可以是相对的,只要它符
合 URI 的语法规则。而 URL 类则不仅符合语义,还包含了定位该资源的信息,因
此它不能是相对的。
在 Java 类库中,URI 类不包含任何访问资源的方法,它唯一的作用就是解析。
相反的是,URL 类可以打开一个到达资源的流。
4.常用的 HTTP 方法有哪些?
GET: 用于请求访问已经被 URI(统一资源标识符)识别的资源,可以通过 URL
传参给服务器
POST:用于传输信息给服务器,主要功能与 GET 方法类似,但一般推荐使用 POST
方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应 URI 位置。
HEAD: 获得报文首部,与 GET 方法类似,只是不返回报文主体,一般用于验证
URI 是否有效。
DELETE:删除文件,与 PUT 方法相反,删除对应 URI 位置的文件。
OPTIONS:查询相应 URI 支持的 HTTP 方法。
HTTP 请求报文与响应报文格式
HTTP 请求报文与响应报文格式
请求报文包含四部分:
a、请求行:包含请求方法、URI、HTTP 版本信息
b、请求首部字段
c、请求内容实体
d、空行
响应报文包含四部分:
a、状态行:包含 HTTP 版本、状态码、状态码的原因短语
b、响应首部字段
c、响应内容实体
d、空行
常见的首部:
通用首部字段(请求报文与响应报文都会使用的首部字段)
Date:创建报文时间
Connection:连接的管理
Cache-Control:缓存的控制
Transfer-Encoding:报文主体的传输编码方式
请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器
Accept:可处理的媒体类型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的自然语言
响应首部字段(响应报文会使用的首部字段)
Accept-Ranges:可接受的字节范围
Location:令客户端重新定向到的 URI
Server:HTTP 服务器的安装信息
实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
Allow:资源可支持的 HTTP 方法
Content-Type:实体主类的类型
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的的字节数
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
5.HTTPS 工作原理(了解)
一、首先 HTTP 请求服务端生成证书,客户端对证书的有效期、合法性、域名是
否与请求的域名一致、证书的公钥(RSA 加密)等进行校验;
二、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数
使用公钥进行加密(RSA 加密);
三、消息体产生的后,对它的摘要进行 MD5(或者 SHA1)算法加密,此时就得到
了 RSA 签名;
四、发送给服务端,此时只有服务端(RSA 私钥)能解密。
五、解密得到的随机数,再用 AES 加密,作为密钥(此时的密钥只有客户端和服
务端知道)。
具体的参考链接:
一次完整的 HTTP 请求所经历的 7 个步骤
一次完整的 HTTP 请求所经历的 7 个步骤
HTTP 通信机制是在一次完整的 HTTP 通信过程中,Web 浏览器与 Web 服务器之间
将完成下列 7 个步骤:
建立 TCP 连接
在 HTTP 工作开始之前,Web 浏览器首先要通过网络与 Web 服务器建立连接,该
连接是通过 TCP 来完成的,该协议与 IP 协议共同构建 Internet,即著名的
TCP/IP 协议族,因此 Internet 又被称作是 TCP/IP 网络。HTTP 是比 TCP 更高层
次的应用层协议,根据规则, 只有低层协议建立之后才能,才能进行更层协议
的连接,因此,首先要建立 TCP 连接,一般 TCP 连接的端口号是 80。
Web 浏览器向 Web 服务器发送请求行
一旦建立了 TCP 连接,Web 浏览器就会向 Web 服务器发送请求命令。例如:GET
/sample/hello.jsp HTTP/1.1。
Web 浏览器发送请求头
浏览器发送其请求命令之后,还要以头信息的形式向 Web 服务器发送一些别的信
息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
Web 服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,
应答的第一部分是协议的版本号和应答状态码。
Web 服务器发送应答头
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发
送关于它自己的数据及被请求的文档。
Web 服务器向浏览器发送数据
Web 服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到
此为结束,接着,它就以 Content-Type 应答头信息所描述的格式发送用户所请
求的实际数据。
Web 服务器关闭 TCP 连接
一般情况下,一旦 Web 服务器向浏览器发送了请求数据,它就要关闭 TCP 连接,
然后如果浏览器或者服务器在其头信息加入了这行代码:
Connection:keep-alive
TCP 连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接
发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带
宽。
建立 TCP 连接->发送请求行->发送请求头->(到达服务器)发送状态行->发送响
应头->发送响应数据->断 TCP 连接
最具体的 HTTP 请求过程:
6.常见的 HTTP 相应状态码
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行 GET 方法,
相应报文中通过 Content-Range 指定范围的资源。
301:永久性重定向
302:临时重定向
303:与 302 状态码有相似功能,只是它希望客户端在请求一个 URI 的时候,能
通过 GET 方法重定向到另一个 URI 上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与 302 类似,只是强制要求使用 POST 方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙
7.HTTP1.1 版本新特性
a、默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开 TCP
连接,就一直保持连接,可以发送多次 HTTP 请求
b、管线化,客户端可以同时发出多个 HTTP 请求,而不用一个个等待响应
c、断点续传
实际上就是利用 HTTP 消息头使用分块传输编码,将实体主体分块传输。
8.HTTP 优化方案
我下面就简要概括一下:
TCP 复用:TCP 连接复用是将多个客户端的 HTTP 请求复用到一个服务器端 TCP
连接上,而 HTTP 复用则是一个客户端的多个 HTTP 请求通过一个 TCP 连接进行处
理。前者是负载均衡设备的独特功能;而后者是 HTTP 1.1 协议所支持的新功能,
目前被大多数浏览器所支持。
内容缓存:将经常用到的内容进行缓存起来,那么客户端就可以直接在内存中获
取相应的数据了。
压缩:将文本数据进行压缩,减少带宽
SSL 加速(SSL Acceleration):使用 SSL 协议对 HTTP 协议进行加密,在通道
内加密并加速
TCP 缓冲:通过采用 TCP 缓冲技术,可以提高服务器端响应时间和处理效率,减
少由于通信链路问题给服务器造成的连接负担。
9.GET 和 POST 两种请求方式的区别
一、功能不同
1、get 是从服务器上获取数据。
2、post 是向服务器传送数据。
二、过程不同
1、get 是把参数数据队列加到提交表单的 ACTION 属性所指的 URL 中,值和
表单内各个字段一一对应,在 URL 中可以看到。
2、post 是通过 HTTP post 机制,将表单内各个字段与其内容放置在 HTML
HEADER 内一起传送到 ACTION 属性所指的 URL 地址。用户看不到这个过程。
三、获取值不同(了解即可)
1、对于 get 方式,服务器端用 Request.QueryString 获取变量的值。
2、对于 post 方式,服务器端用 Request.Form 获取提交的数据。
四、传送数据量不同
1、get 传送的数据量较小,不能大于 2KB。
2、post 传送的数据量较大,一般被默认为不受限制。但理论上,IIS4 中最大量
为 80KB,IIS5 中为 100KB。
五、安全性不同
1、get 安全性非常低。
2、post 安全性较高。
如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据
监听到。
10.用户从输入 URL 到页面渲染完成都有哪些过程?(简单阐述即可)
从输入 URL 到渲染出完整页面大致可分为以下几个阶段。
【用户输入】用户输入关键字,按下回车;
【发送 URL 请求】浏览器进程通过进程间通信(IPC)把 URL 请求发送至网络
进程(浏览器告诉计算机要发送一条 url 请求);
【查找缓存 / DNS 解析 / 建立 TCP 连接】优先从本地的域名存放文件 host
中进行查找,找到 url 地址对应的真实 IP 地址,如果找不到就向最近的存放域
名解析的 DNS 服务器发送请求,得到最终的 IP 地址;
【发送请求信息】浏览器构建请求行、请求头等信息,并把和该域名相关的
Cookie 等数据附加到请求头中,发送给目标服务器。服务器根据请求信息生成
响应数据,发给计算机的网络进程做出响应;
【解析响应头】客户端计算机的网络进程解析响应头,如果返回的状态码是 301
或 302,就从响应头的 Location 字段读取重定向地址,然后再发起新的请求。
如果返回的状态码是 200,浏览器就继续处理响应数据;
【处理响应数据 / 准备渲染进程】浏览器根据响应头中的 Content-Type 值决
定如何显示响应体的内容(也就是服务器返回的是什么类型的数据或文件),如
果 Content-Type 值为 text/html,则服务器返回的数据是 HTML 格式,浏览器
就将数据提交给渲染进程;
11.跨域问题怎么解决?
解决跨域的问题可以考虑以下几种方式:
1. 服务器开启 CORS 来实现跨域资源共享
普通跨域请求:只需要服务端设置 Access-Control-Allow-Origin 即可,前
端无须设置。
2. 设置 jsonp
通常为了减轻 web 服务器的负载,我们把 js、css,img 等静态资源分离到
另一台独立域名的服务器上,在 html 页面中再通过相应的标签从不同域名下加
载静态资源,而被浏览器允许,基于此原理,我们可以通过动态创建 script,再
请求一个带参网址实现跨域通信。缺点也很明显,就是只能实现 get 一种请求。
3. Vue 开发跨域使用 devserver 配置代理
在项目根目录中,找到或者创建 vue.config.js 配置文件,配置 devServer
的 proxy 进行代理:
module.exports = {
entry: {},
module: {},
...
devServer: {
historyApiFallback: true,
proxy: {
'/api':{ // 这个是你要替换的位置
target: 'www.baidu.com',//这个是被替换的目标地…
secure:true ,//接受对方是 https 的接口
changeOrigin:true ,// 是否需要跨域
pathRewrite: {'^/api' : ''}
}
}
}
4. nginx 反向代理接口跨域(了解,主要由运维或后端实现)
跨域原理: 同源策略是浏览器的安全策略,不是 HTTP 协议的一部分。服
务器端调用 HTTP 接口只是使用 HTTP 协议,不会执行 JS 脚本,不需要同源策
略,也就不存在跨越问题(简单理解,就是通过服务器来发起请求,服务器之间
通信没有跨域问题)。
实现思路:通过 nginx 配置一个代理服务器(域名与 domain1 相同,端口
不同)做跳板机,反向代理访问 domain2 接口,并且可以顺便修改 cookie 中
domain 信息,方便当前域 cookie 写入,实现跨域登录。
nginx 具体配置(#号为注释):
#proxy 服务器
server {
listen 81;
server_name www.domain1.com;
location / {
proxy_pass www.domain2.com:8080; #反向代理
proxy_cookie_domain www.domain2.com www.domain1.com; #
修改 cookie 里域名
index index.html index.htm;
# 当用 webpack-dev-server 等中间件代理接口访问 nignx 时,此时
无浏览器参与,故没有同源限制,下面的跨域配置可不启用
add_header Access-Control-Allow-Origin
www.domain1.com; #当前端只跨域不带 cookie 时,可为*
add_header Access-Control-Allow-Credentials true;
}
}
12.项目优化的方案?
首先,针对客户端的优化可以分为资源优化和渲染优化,其中
资源优化可以有以下几种方案:
1. 静态资源压缩合并, 减少 http 请求
2. 静态资源进行客户端缓存
3. CDN 外链资源
4. 单页面应用程序进行 SSR 后端渲染
5. 服务器 gzip,减少资源体积
6. DNS 预解析
7. 使用精灵图和二倍图
8. script 异步加载
异步加载方式
a. 动态脚本加载
b. script 标签添加 defer 属性
c. script 标签添加 async 属性
异步加载区别:
- defer 是在 html 解析之后执行,如果是多个,按照加载顺序依次执行
- async 是在加载之后立即执行, 如果是多个, 执行顺序与加载顺序无关
然后是渲染优化:
1. CSS 前面, JS 后面
2. 懒加载(图片懒加载,下拉加载更多)
3. 减少 dom 操作(增删改查)
4. 事件节流防抖
5. 预加载(preload, prefetch)
12.Ajax 请求状态及含义?
readyState 属性表示 Ajax 请求的当前状态。它的值用数字代表。
0 代表未初始化。 还没有调用 open 方法
1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
2 代表已加载完毕。send 已被调用。请求已经开始
3 代表交互中。服务器正在发送响应
4 代表完成。