http
一、介绍一下http
,有什么特点
http
是超文本传输协议(Hyper Text Transfer Protocol
),主要负责web server
和浏览器之间的通讯;http
协议是把客户端的请求发送到一个服务器,并把网页内容从服务器返回到客户端
特点:
- 简单快速:客户向服务器请求服务时,只需要发送请求方法和路径
- 灵活:
http
允许传输任意类型的数据对象,使用Content-Type
标志 - 无连接:无连接是指限制每次只连接处理一个请求,服务器处理完客户的请求并收到客户的应答后,即断开连接
- 无状态:
http
协议是无状态协议
二、http
和https
的区别
http
:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器请求和应答的标准,用于从服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少
https
:是以安全为目标的http
通道,就是http
的安全版,即在http
下加入ssl
层,是安全基础
区别
https
需要申请证书,一般免费证书较少,需要一定费用http
是超文本传输协议,信息是明文传输的;https
是具有安全性的ssl
加密传输协议http
和https
是完全不同的连接方式,用的端口也不一样,http
用80,https
用443http
的连接很简单,是无状态的;https
协议是由ssl+http
协议构建的可进行加密传输、身份认证的网络协议,比http
协议安全
三、http
请求方式
请求方式
- 简单请求
get
:常用于向服务器请求获取资源post
:常用于发送或者提交数据到服务器head
:代表请求资源的头部信息,并且这些头部与http
的get
请求返回一致,使用场景是在下载一个大文件前先获取其大小再决定是否下载,可以节约带宽资源
- 复杂请求
options
:试探请求,在真正发送请求时,先试探是否 OK ,用于获取目的资源所支持的通信选项put
:用于新增资源或者使用请求中的有效负载替换目标资源的表现形式delete
:用于删除指定的某些资源trace
:回显服务器收到的请求,主要用于测试或者诊断patch
:用于对资源进行部分修改
get
和post
的区别
- 数据传输方式不同:
get
请求将参数拼接在url
之后的,对用户可见,post
的传输数据对用户是不可见的,在请求体的body
中传输(但是打开控制台也会可以看到) - 安全性不同:
get
是明文传输,直接在页面可见,不安全;post
的数据包含在请求主体的body
中,相对来说较为安全 - 数据类型不同:
get
传输字符串,post
无限制 - 传输数据大小不同:
get
限制大小为2 KB ,post
默认无限制 get
无害:get
刷新后退等浏览器操作是无害的,post
可能重复提交表单
put
和post
的区别
- 两者相同点都是给服务器发送新增资源
put
方法是幂等的,连续调用一次或者多次的效果相同,无副作用;而post
方法是非幂等的,调用多次会产生多次结果put
指定具体单一资源;post
可以指向资源集合
put
和patch
的区别
- 两者相同点都是给服务器发送修改资源,都是更新资源
put
是直接覆盖资源的修改方法,可能需要携带无用信息;post
用来对已知资源进行局部更新,避免携带无用信息
四、http
状态码
2xx
成功
- 200:
OK
,表示从客户端发来的请求在服务端被正确处理 - 201:
Created
,请求已经被实现,而且有一个新的资源已经依据请求的需要而建立 - 202:
Accepted
,请求已接收,但未执行,不保证完成请求 - 204:
No content
,表示请求成功,但是响应报文不含实体的主体部分 - 206:
Partial Content
,进行范围请求
3xx
重定向
- 301:
move permanently
,永久重定向,表示资源已经被分配了新的url
- 302:
found
,临时重定向,表示资源临时被分配了新的url
- 303:
see other
,表示资源存在在另一个url
,应使用get
请求获取资源 - 304:
not modified
,表示服务器允许访问资源,但因发生请求不满足条件的情况,走了对比缓存拿数据 - 307:
temporary redirect
,同302,临时重定向
4xx
客户端错误
- 400:
bad request
,请求报文存在语法错误 - 401:
unauthorized
,可以访问页面但需携带认证消息 - 403:
forbidden
,不存在访问页面的权力,表示对请求资源的访问被服务器拒绝 - 404:
not found
,表示在服务器上没有找到请求资源 - 408:
request timeout
,客户端请求超时 - 409:
confict
,请求的资源可能引起冲突
5xx
服务器错误
- 500:
internal server error
,表示服务器在执行请求时发生了错误 - 501:
not implemented
,请求超出服务器能力范围,例如服务器不支持当前请求所需要的某个功能或者某个方法 - 503:
service unavailable
,表示服务器暂时处于超负荷或正在停机维护,无法处理请求 - 505:
http version not supported
,服务器不支持,或拒绝支持在请求中使用的http
版本
五、http
请求报文和响应报文
请求报文
-
请求行:请求方法 + URL + HTTP 协议版本
Request URL: http://10.9.65.177/api/newsNotice/list Request Method: POST ......
-
请求头:由关键字/关键值对组成,每行一对
Accept: */* Content-Type: application/json;charset=UTF-8 Host: 10.9.65.177 Origin: http://localhost:8080 ......
-
请求体/请求正文:简单来说就是请求参数,
post/put
等请求携带的数据
响应报文
- 响应行:协议版本 + 状态码 + 状态码原因短语组成 ----> HTTP/1.1 200 OK
- 响应头:响应首部字段,也是由关键字/关键值对组成,每行一对
- 响应体:服务器响应的数据
六、http
的请求头中keep-alive
是干啥的
在早期的 HTTP/1.0
中,每次 http
请求都要创建一个连接,而在创建链接的或称需要耗费资源合时间,为了减少资源消耗和缩短响应时间,就需要重用连接;
在后来的HTTP/1.0
中以及HTTP/1.1
中,引入了重用连接的机制,就是在http
请求头中加载Connection:keep-alive
,来告诉对方这个请求响应完成之后不要关闭,下一次我们还用这个请求继续交流;
协议规定,HTTP/1.0
如果想要保持长连接,需要在请求头上加上Connection:keep-alive
优点:
- 较少的
cpu
和内存使用 - 允许请求和应答的
http
管线化(管线化是指将多个 HTTP 请求整批发送,在发送过程中不用等待对方响应;管线化是在持久连接的基础上实现的,管线化的实现,能够同时并行发送多个请求,而不需要一个接一个的等待响应) - 降低拥塞控制
- 减少后续请求的延迟
- 报告错误无需关闭
tcp
连接
七、http
的缓存过程是怎么样的
- 客户端首次向服务器发出请求,请求资源
- 服务器返回资源和缓存策略,浏览器将缓存策略和缓存资源写入缓存系统
- 客户端再次向服务器发出请求时,会先从缓存系统中对比查找,根据策略的不同,判断资源是否过期等,决定是否读取本地缓存或者服务器协商缓存
八、http
的优化策略
优化策略有两种:压缩和缓存
压缩
- 将文件变小,一个文件会不会解压,看浏览器根据请求头的
Accept-Encodeing
缓存
- 强缓存:看两个响应头
Expires
与Cache-Control
,它控制着多长时间内不要再来访问我 - 对比缓存:如果一个文件没有改变,那么文件走缓存,
Last-Modified/If-Modified-Since
还有ETag/If-None-Match
; 服务器会优先验证ETag
,ETag
是资源唯一标识符,看是否一致,一致的情况下,才会继续比对Last-Modified
,看最后一次资源修改的时间
tcp
一、网络模型
-
应用层
与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个灭有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心
OSI
的第七层;但是如果添加了一个传输文件的选项,那么字处理的程序就需要实现OSI
的第七层,比如TELNET
-
表示层
这一层主要功能是定义数据格式及加密。例如,
FTP
允许你选择以二进制或ASCII
格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容;如果选择ASCII
格式,发送方将把文本从发送发的字符集转换成标准的ASCII
后发送数据,在接收方将标准的ASCII
转换为计算机的字符集,比如,加密 -
会话层
它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层,比例
RPC
-
传输层
这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能,比如,
TCP
-
网络层
这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式;为了使用最大传输单元长度小于包长度的传输介质,网络层还定义了如何将包分解成更小的包的分段方法,比如,
IP
-
数据链路层
它定义了在单个链路上如何传输数据,这些协议与被讨论的各种介质有关,比如,
ATM
-
物理层
OSI
的物理层规范是有关传输介质的特性,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于物理层规范中的内容,物理层常用多个规范完成对所有细节的定义,比如,Rj45
-
网络模型概述
网络模型又可称的七层协议,但有时会减为5层,他是从下到上来看的,物理层是第一层,应用层是第七层
二、输入一个网址到浏览器显示页面经历的过程
- 浏览器地址栏中输入
url
回车 DNS
查询解析得到ip
地址,通过ip
访问服务器- 建立
tcp
连接,进行三次握手 - 浏览器端发起
http
请求‘ - 服务器响应请求,并返回响应数据
- 浏览器获取资源后进行解析和渲染,显示页面
- 断开连接,存在四次挥手
三、浏览器解析渲染页面的详细步骤
- 浏览器获取
html
代码解析成DOM
树 - 浏览器整理样式解析形成
css
规则树 DOM
树和css
规则树组合成render
树,即渲染树- 浏览器根据
render
树绘制并显示页面
四、建立tcp
连接的过程
http
协议是基于tcp
协议的,在数据流通之前,有一个建立tcp
连接的过程,他会建立三次握手和四次挥手
三次握手
目的是:让客户端、服务端都确保双方的发送、接受能力是正常的
- 客户端发送连接请求(报文
SYN
)到服务器,等待服务器确认 - 服务器确认客户端发送的请求;同时也向客户端发送请求(报文
SYN
+ACK
),等待客户端确认 - 客户端确认发送过来的请求,会发送一个
ACK
报文给服务端,建立tcp
连接(这一次可传数据)
四次挥手:为什么要四次呢,因为在服务端接收到客户端发来的FIN
之后,可能还有数据没有传输完给客户端,所以只能先回应客户端说收到啦,等数据都传输完之后去向客户端发断开请求
- 客户端发送一个
FIN
报文给服务端 - 服务端 接收到
FIN
报文,会发送ACK
报文给客户端( 服务端处于CLOSE_WAIT
状态 ) - 服务端发送
FIN
报文给客户端( 服务端处于LAST_ACK
的状态 ) - 客户端收到
FIN
报文后,一样发送一个ACK
报文作为应答传给服务端(服务端处于CLOESED
的状态)
浏览器
一、同源策略是什么
同源策略是指协议、域名、端口三者都要相同,只要有一个不同就会产生跨域;同源策略是指作为浏览器最基本的安全功能的一种约定,降低来自xss
、csfr
等攻击的风险
二、跨域是什么
广义上来讲是一个域下的资源去请求另一个非同源域下的资源
狭义上上来讲是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对javascript
施加的安全限制
换句话说,跨域的限制访问,其实是浏览器的限制
三、跨域产生的条件或者说跨域产生的原因?
浏览器的限制和ajax
请求;跨域问题只存在浏览器端
四、跨域解决常见方案
jsonp
:利用script
标签的src
属性发出get
请求- 代理服务器:
webpack-dev-server
- 空的
iframe
+form
- 服务器使用
nginx
反向代理
五、浏览器是由什么组成的
分别有7个模块:
用户界面、浏览器引擎、渲染引擎、网络、js
解释器、UI
后端、数据持久化存储
最重要的是渲染引擎(内核)和javascript
解释器(javascript
引擎)
浏览器内核:主要负责HTML
、CSS
的解析,页面布局、渲染和复合层合成;javascript
引擎负责javascript
解析和代码执行
六、谈谈对seo
的理解
搜索引擎优化,目的是使网站能够被搜索引擎抓取,提高在搜索引擎内的自然排名,从而带来更多免费的流量;优化主要分为站内优化和站外优化
站内优化:精准使用title
,description
、keyword
等页面属性
站外优化:在各网站上宣传,扩大知名度等