1.常见的http方法
GET 用于请求服务器发送某个资源
HEAD 与get方法的行为相似,但服务器在响应中只返回首部,不会返回实体的主体部分,这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。
PUT 与get相反,向服务器写入文档
POST 向服务器输入数据
DELETE 从服务器中删除命名资源
TRACE 允许客户端在最终将请求发送给服务器时,看看它变成了什么样子
OPTIONS 请求web服务器告知其支持的各种功能
put和post的区别:
put是幂等操作,post不是。幂等操作通俗来说就是不管进行多少次的重复操作,都实现相同的结果。
post和get区别
GET在浏览器回退时是无害的,而POST会再次提交请求
GET请求会被浏览器主动缓存,而POST不会,除非手动设置
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
GET请求在URL中传送的参数是有长度限制的,而POST没有限制
GET参数通过URL传递,POST放在Request body中
2.状态码
状态码分类:
100~101 信息性状态码
200~299 成功状态码
300~399 重定向状态码
400~499 客户端错误状态码
500~599 服务器错误状态码
200 成功
301 永久重定向
302 暂时重定向 到其他地方去获取资源
304 如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。
400 请求无效
前端提交数据的字段名称和字段类型与后台的实体没有保持一致
前端提交到后台的数据应该是json字符串类型,但是前端没有将对象JSON.stringify转化成字符串
401当前请求需要用户验证
403 服务器已经得到请求,但是拒绝执行
404 找不到资源
500 服务器内部错误,无法完成请求
3.报文
报文分为请求报文和响应报文
请求报文:请求行包含一个方法、一个请求URL、协议、协议的版本
请求头 connection ;Cache-Control ; Host给出接受请求的服务器的主机名和端口号 ; Accept指定客户端能够接收的内容类型text/html,application/json ; cookie;If-Modified-Since;If-None-Match;User-Agent请求用户信息;Content-Type:application/x-www-form-urlencoded
空行
请求体
响应报文:状态行
响应头部
空行
响应体
4.https
HTTPS就是在HTTP和TCP之间插入了一个(称为TLS或SSL的)密码加密层
https工作原理:
客户使用https url访问服务器,则要求web 服务器建立ssl链接。
web服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),返回或者说传输给客户端。
客户端和web服务器端开始协商SSL链接的安全等级,也就是加密等级。
客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
web服务器通过自己的私钥解密出会话密钥。
web服务器通过会话密钥加密与客户端之间的通信。
缺点:
访问速度变慢,成本较高(ssl证书费用较高),同时ssl体系也存在安全风险
5.http和https的区别是什么? (http、https、http2这些都是经常被问到的)
HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
HTTPS需要用到SSL证书,而HTTP不用;
HTTPS标准端口443,HTTP标准端口80;
HTTPS基于传输层,HTTP基于应用层;
HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
6.https需要多少时间 比http慢多少 怎么优化
比http慢两倍,采用优化方式CDN 加速
7.http2有哪些特性 头部压缩怎么回事
http请求和响应都是由【状态行、请求/响应头部、消息主题】三部分组成的。 一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩过后的二进制文件(如图片、音频等),但是状态行和头部多是没有经过任何压缩,而是直接以纯文本的方式进行传输的。然而,随着web功能越来越复杂,请求数量越来越多,随之而来的就是头部的流量越来越多,并且在建立初次链接之后的链接也要发送user-agent等信息,是在是一种浪费。 因此,http2提出了对请求和响应的头部进行压缩,即不再只是压缩主题部分,这种压缩方式就是HAPCK --- 其设计简单而灵活。通过压缩,头部大小可以减少一半之多,如果后面重复发送请求,那么可能压缩后的头部大小只有原始大小的 1/10。
8.http1.0和http1.1和http2.0的区别
http1.0和http1.1的区别:
(1)http1.0需要使用参数keep-live来告知服务器建立一个长连接,而HTTP1.1默认支持长连接。
(2) HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。 这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。
(3)HTTP1.0是没有host域的,HTTP1.1才支持这个参数。
http1.1和HTTP2.0的区别
(1) HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
(2) HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
(3)服务器推送,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。
http2的所有特性
http2中的头部压缩和多路复用。
http1.1中的keep-alive是怎么理解的?
http1.0、http1.1、http2 (这三者还是要会区分的,也会经常被问到)
TCP/UDP区别
4.TCP
无差错的数据传输
按序传输(数据总是会按照发送 v的顺序到达)
未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
TCP连接通过四个值来识别
<源IP地址、源端口号、目的IP地址、目的端口号>
5.基本的浏览器连接处理
(1)浏览器从URL中解析出服务器的主机名
(2)浏览器将服务器的主机名转换成服务器的IP地址
(3)浏览器将端口号(如果有的话)从URL中解析出来
(4)浏览器建立一条与web服务器的TCP连接
(5)浏览器向服务器发送一条HTTP请求报文
(6)服务器向浏览器回送一条HTTP响应报文
(7)关闭连接,浏览器显示文档。
7.http与https的区别
HTTP:是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
区别:
(1)https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
(2)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443.
(4)http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
客户端在使用HTTPS方式与web服务器通信时有以下几个步骤,如图所示
(1) 客户使用https的URL访问web服务器,要求与web服务器建立ssl连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与web服务器开始协商ssl连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
HTTPS的优点
(1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。
(2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变、确保数据的完整性。
(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
(4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
HTTPS的缺点
(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电。
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5) HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
http切换到https
在切换的时候可以做http和https的兼容,具体实现方式是,去掉页面链接中的http头部,这样可以自动匹配http头和https头。
https解决内容可能被窃听的问题:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。
数字签名解决内容可能被篡改的问题:数字签名如何生成:将一段文本先用Hash函数生成消息摘要,然后用发送者的私钥加密生成数字签名,与原文文一起传送给接收者。接下来就是接收者校验数字签名的流程了。校验数字签名流程:接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与上一步得到的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
数字证书解决身份被伪装问题:数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。
8.get和post区别
请求缓存:GET 会被缓存,而post不会
收藏书签:GET可以,而POST不能
保留浏览器历史记录:GET可以,而POST不能
用处:get常用于取回数据,post用于提交数据
安全性:post比get安全,get参数直接暴露在url中,所以不能用来传递敏感信息。
请求参数:querystring 是url的一部分get、post都可以带上。 get的querystring(仅支持urlencode编码)通过URL传递,post的参数是放在request body(支持多种编码),请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制
get请求只能进行url编码,而post支持多种编码方式
get请求会浏览器主动cache,而post支持多种编码方式。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET产生一个TCP数据包;POST产生两个TCP数据包。