HTTP协议:当下最主流的应用层协议之一,你确定不了解一下吗?,‘超’可以理解为除了


一.HTTP协议的含义

http是什么?

  • 405 Method NOT Allowed 方法不被允许

    1. 301 永久重定向

    1. 302临时重定向

    场景:当我们访问某个页面时进行跳转:比如当我们登录一个页面成功后进行页面跳转

    响应报文中的location表示要跳转的地址

    1. 500服务器错误

    服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个

    状态码. 咱们平时常用的网站很少会出现 500 (但是偶尔也能看到)

    1. 504访问超时

    在服务器负载相对较大的情况下,处理单条请求的时间会变长,如果时间过于长,可能出现超时情况

    八.通过form表单构造HTTP请求

    九.通过ajax构造HTTP请求

    Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTMLXHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 [3] 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。 [3]

    1.关于同步和异步

    同步(synchronize):当我们发送请求时,在得到响应之前,我们不能进行其他操作,程序进入阻塞状态

    异步(Asynchronous ):当我们发送请求时,在得到响应之前,我们依然可以进行其他操作,当得到响应的时候获取响应并进行下一步操作即可。

    2.ajax的实现方式

    ①手动调用ajax,这个过程相对比较麻烦,在这里我们不做赘述

    ②使用Jquery对ajax进行封装,我们在此进行讲述

    2.1引入JQuery的两种方式

    ①下载jQuery资源,引用相对路径

    ②调用网络上的CDN,调用网络资源

    3.使用jQuery实现方法

    十.HTTPS协议

    HTTPS协议是什么?

    HTTPS协议也是一个应用层协议,是在HTTP协议的基础上进行了一层加密,这个加密层通常是TLS和SSL

    HTTP协议是按照明文的协议进行数据传输的,这也就造成了一定的风险:数据在传输过程中存在被篡改的风险:

    我们分析以下场景:当我们在网络中下载某个软件,当浏览器弹出下载框时,我们发现弹出来的下载软件并不是自己想下载的软件:

    我们分析其中的问题:

    正是因为以明文的形式进行数据传输,在获得响应的途中被别有用心的人发现这是一条下载响应,将对应的URL进行替换,来达到下载他自己推广的软件,而这个问题被称作‘运营商劫持’

    所以我们要对传输的数据进行加密。

    1.对称加密

    何为对称加密?

    对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文.

    引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的

    真实内容是啥了.

    但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都

    必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户

    端和每个密钥之间的关联关系, 这也是个很麻烦的事情~

    比较理想的做法, 就是能在客户端和服务器建立连接的时候, 双方协商确定这次的密钥是啥~

    但是如果把密钥直接在网络传输中直接以明文传输,那么这个密钥也就是形同虚设了。

    所以我们这时引入更安全的加密方式:非对称加密

    何为非对称加密?

    非对称加密就是存在一把公钥和私钥,对对称加密的密钥进行加密,如果使用公钥进行加密,必须用私钥进行解密,相反,如果用私钥进行加密,就要用公钥进行解密,私钥加密不能私钥解密,公钥同样也是如此。

    除此之外,公钥在数据传输过程中由服务器传输给客户端,谁都可以获取,但是没有私钥,公钥也没什么用。这样,客户端服务端在初次加密时使用公钥将对称加密的密码进行加密,服务端用私钥进行解密,并在解开对称加密的密钥之后用这个对称密钥给客户端返回响应。

    在后面数据传输的过程中,都使用这个对称加密进行数据传输。

    由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商密钥的时候使用非对称加密,

    后续的传输仍然使用对称加密.

    但是此时,新的问题又产生了,我们看以下的场景:

    那我们又该使用什么策略来判断公钥的真伪呢?

    这时引入证书:

    在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个证书.

    这个证书包含了刚才的公钥, 也包含了网站的身份信息.

    这个证书可以理解成是一个结构化的字符串, 里面包含了以下信息:

    证书发布机构

    证书有效期

    公钥

    证书所有者

    签名

    ......

    我们如何判断证书的真伪呢?

    1.判断证书是否过期

    2.是否是我们所信任的机构颁发的

    3.证书的内容是否生效:证书在颁布时存在一个签名:这是一个hash值(通过MD5算法计算),同时证书本身也会生成一个hash值(同样是MD5算法),一旦证书的数据被修改,证书的hash值就会被改变,但是在这个过程中,签名的hash值不会改变,那么我们的验证策略也相对比较简单了:通过比对签名的hash值和整个证书的hash值相比对,一致则有效,不一致则无效。

    但是如果黑客把内容改了,也把数据通过md5算法重新计算,并把签名改为这个值,那么我们又该如何验证它的真伪性呢?

    其实思路也相对简单:既然签名是一个比对标准值,那么我们让黑客没办法拿到这个标准值进行比对即可:同样引入一对公钥和私钥,对正数签名进行加密:私钥由证书颁发机构持有,不进行网络传输,由于该机构被信任,所以这个公钥在最开始就存在于我们的操作系统,当证书传来的时候,我们使用公钥进行对签名解密,然后再比对判断数据是否有效。

    总结:

    第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公

    钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的

    签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.

    第二组(非对称加密):用于协商生成对称加密的密钥. 服务器生成这组私钥-公钥对, 然后通过证书把公钥

    传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解

    密获取到对称加密密钥.

    第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密.

    相关内容