http/https协议、常见状态码、get/post、http缓存机制

1、http/https协议?

一、http到底是什么?

http协议全名叫做:超文本传输协议。是互联网上最广泛的一种协议。例如,我们打开浏览器,输入http://so.com/就可以访问360搜索,这就是通过http协议进行的一次访问
个人的理解是:http协议就是通信的双方(通常指客户端和服务器)进行数据传输的一种约定好的规范!
二、http协议的特点有哪些?
1、http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。

2、无连接。所谓的无连接就是服务器收到了客户端的请求之后,响应完成并收到客户端的应答之后,即断开连接。限制每次的连接只处理一次请求。从而节省传输时间。

3、无状态。http协议对事务的处理没有记忆能力。也就意味着如果需要前面的信息,只能重传,这无形之中增加数据的传输量。这种方式某种方面上讲解放了服务器,但是却不利于客户端与服务器的连接。为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session,后面我们再细讲它们。

4、简单快捷:所谓的简单快捷是指客户端向服务器请求服务时,一般来说只需要传输请求方法和路径,就能进行访问。

5、灵活:这里主要指的是客户端可以通过http协议传输任意类型的数据。比如传输.jpg文件、.ppt文件等等,只需要设定content-type就可以进行传输。至于content-type是什么,咱们后面再细讲。
三、http请求/响应的步骤是什么?

1、客户端连接到web服务器:客户端,我们通常指的是浏览器,与web服务器的http端口(默认情况下80)建立一个TCP套接字的连接。

2、发送HTTP请求:通过TCp套接字,浏览器向web服务器发送一个请求报文,一个请求报文包括请求行、请求头、空行、请求体四部分。

3、服务器端解析请求并返回http响应:web服务器解析请求,定位资源,返回响应报文。响应报文主要包括状态行、响应头部、空行、响应体四部分构成。

4、释放TCP连接:web浏览器主动关闭TCP套接字,关闭TCP连接。而客户端则需要被动的关闭TCP套接字,释放TCP连接。

5、客户端浏览器解析响应报文,解析成HTML内容,经过浏览器的渲染之后就能展示给用户了。
**Https是什么?
什么是SSL
重要的相关概念
1、对称加密
2、非对称加密
3、消息摘要
4、数字签名
5、数字证书
Https请求流程
Http和Https的区别
**

Https是什么?

Https(全程:Hyper Text Tansfer  Protocol over SecureSocket Layer),是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS在HTTP的基础下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层。

什么是SSL

SSL对传输的数据进行加密,使第三方无法“窃听”传输并查看正在传输的数据,只有用户的计算机和服务器能够识别数据。

SSL将您的姓名、地址和信用卡信息保存在您与提供这些信息的商户之间。如果没有这种加密,网上购物时,个人信息可能会被第三放窃取。当您访问一个以“https”开头的Web地址时,“http”后面的“s”表示该网站是安全的,这些网站经常使用SSL证书来验证其真实性。

重要的相关概念

1、对称加密

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
简单来说就是 对明文信息加密解决都用一个钥匙来完成(不安全的,但是效率较高于非对称加密

2.非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。
另一方面,甲方可以使用自己的私钥对机密信息进行签名后再发送给乙方;乙方再用甲方的公钥对甲方发送回来的数据进行验签。
甲方只能用其私钥解密由其公钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多

3、消息摘要

将一段明文信息通过哈希算法生成一段密文信息(不可逆)称为消息摘要

4. 数字签名

对消息摘要的信息 进行CA秘钥加密,生成的内容称为数字签名

5.数字证书

数字签名+服务端的公钥和一些其他信息(当前证书的过期时间,办法机构之类的信息) 组成发送给客户端的内容就是数字证书

HTTPS 请求流程

在这里插入图片描述

HTTP和HPPTS的区别?

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTPS提高了安全性,但其他方面就不如HTTP了
1、因为HTTPS要保证安全,所以HTTPS协议握手阶段比较费时,会消耗更多的CPU
2、HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗。
3、SSL证书需要钱,功能越强大的证书费用越高。
4、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
5、HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
总结
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

常见的状态码?

在这里插入图片描述

1XX系列:
100:客户端应继续其请求
101:服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2XX系列:
200:请求成功。一般用于GET与POST请求
202:已接受。已经接受请求,但未处理完成
204:无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
3XX系列:
300:多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301:永久性重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302:临时性重定向。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303:查看其它地址。与301类似。使用GET和POST请求查看
304:资源已找到,但未符合条件请求
4XX系列:
400:客户端请求的语法错误,服务器无法理解
401:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息
403:不允许访问那个资源。该状态码表明对请求资源的访问被服务器拒绝了。(权限,未授权IP等)
404:服务器上没有请求的资源。路径错误等。
5XX系列:
500:服务器内部错误,无法完成请求
501:服务器不支持请求的功能,无法完成请求
502:为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503:由于超载或系统维护,服务器暂时的无法处理客户端的请求。
504:充当网关或代理的服务器,未及时从远端服务器获取请求

http请求方式?

1、GET方法
发送一个请求来取得服务器上的某一资源
2、POST方法
向URL指定的资源提交数据或附加新的数据
3、PUT方法
跟POST方法很像,也是想服务器提交数据。但是,它们之间有不同。PUT指定了资源在服务器上的位置,而POST没有
4、HEAD方法
只请求页面的首部
5、DELETE方法
删除服务器上的某资源
6、OPTIONS方法
它用于获取当前URL所支持的方法。如果请求成功,会有一个Allow的头包含类似“GET,POST”这样的信息
7、TRACE方法
TRACE方法被用于激发一个远程的,应用层的请求消息回路
8、CONNECT方法
把请求连接转换到透明的TCP/IP通道
get和post的区别?
1、GET请求在URL中传送的参数是有长度限制的,而POST没有。
2、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递3、敏感信息。而POST数据不会显示在URL中。是放在Request body中。
4、对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
5、GET请求参数会被完整保留在浏览器历史记录里;相反,POST请求参数也不会被浏览器保留。
6、GET请求只能进行url编码(application/x-www-form-urlencoded),而POST支持多种编码方式。
7、GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
8、GET在浏览器回退时是无害的,而POST会再次提交请求。

http缓存机制?
Http缓存机制,一向在开发中会作为Web性能优化的重要手段.合理使用浏览器的缓存,可以有效的减少请求访问次数,一是减小服务器压力,更重要的是能降低页面的加载时间
2、缓存中的HTTP报文
这里介绍一下与缓存相关的请求报文段和响应报文,作为一个知识储备,好为下面介绍缓存做铺垫

*HTTP 报文就是浏览器和服务器间通信时发送以及响应的数据块*

浏览器向服务器请求数据,发送请求Request报文

服务器向浏览器返回数据,返回响应Response报文

报文主要分为两部分

(1) 包含属性的首部(header) cookie,缓存信息,与缓存相关的规则信息,都包含在header中

(2) 包含数据的主体部分(body) 真正想要传输的部分
1.Expires策略
不过Expires 是HTTP 1.0的东西,现在默认浏览器均默认使用HTTP 1.1,所以它的作用基本忽略。
2.Cache-control策略(重点关注):
Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。
它的值有一下6种
Cache-Control 是最重要的规则。常见的取值有private、public、no-cache、max-age,no-store,默认为private。
private: 客户端可以缓存
public: 客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的)
max-age=xxx: 缓存的内容将在 xxx 秒后失效
no-cache: 需要使用对比缓存来验证缓存数据(后面介绍)
no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发(对于前端开发来说,缓存越多越好,so…基本上和它说886)
Last-Modified:
服务器在响应请求时,告诉浏览器资源的最后修改时间。

If-Modified-Since:
再次请求服务器时,通过此字段通知服务器上次请求时,服务器返回的资源最后修改时间。
服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。
若资源的最后修改时间大于If-Modified-Since,说明资源有被改动过,则响应整片资源内容,返回状态码200;
若资源的最后修改时间小于或等于If-Modified-Since,说明资源无新修改,则响应HTTP 304,告知浏览器继续使用所保存的cache。

Etag / If-None-Match(优先级高于Last-Modified / If-Modified-Since)
Etag:
服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。

If-None-Match:
再次请求服务器时,通过此字段通知服务器客户段缓存数据的唯一标识。
服务器收到请求后发现有头If-None-Match 则与被请求资源的唯一标识进行比对,
不同,说明资源又被改动过,则响应整片资源内容,返回状态码200;
相同,说明资源无新修改,则响应HTTP 304,告知浏览器继续使用所保存的cache。
总结
1.对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
2.对于比较缓存,将缓存信息中的Etag和Last-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。

第一次请求
来源于网络
第二次请求
来源于网上
301重定向和302重定向的区别:
1.301重定向是永久的重定向,搜索引擎在抓取新的内容的同时也将旧的网址替换为了重定向之后的网址。
2.而302重定向只是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址,因为服务器返回302,所以,搜索搜索引擎认为新的网址是暂时的

详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值