HTTP协议

1.HTTP协议

        http协议是应用层方面最常见的一种协议,它主要是基于TCP协议实现的,本质上HTTP协议就是给tcp socket 写了一个符合HTTP协议格式的字符串~~
        
而当我们在浏览器输入一个网址后,浏览器在背后帮我们做了很多的事情,根据你输入的网址按一定的方法,打包成一个HTTP请求发送给网站的服务器。服务器在接受到请求之后,会发送给浏览器HTTP响应,其中可能会包含文本图片等。浏览器再进行渲染,将完整网站呈献在我们面前~~

        那http交互的详细过程,肉眼无法感知,就需要借助第三方工具来进行抓包,就好比我想买一包辣条,但是我懒,我要求小明帮我买,我交给小明钱,小明跑去商店买了一包辣条再交给我,这个过程,我并不知道“交钱” “买辣条”这个细节过程的,但是小明知道,小明就是第三方软件,可以清楚的知道 “买辣条” 这个交互的细节·~~

        我们可以通过fiddler这个软件进行抓包工作,

2.HTTP报文格式(请求)

        一个报文可以分成四个部分 :首行,header 空行 body 

1.首行

               

当然我们看到一些网站 例如 www.baidu.com/  这里的端口号直接写成 / ,代表是根目录 网站服务器系统该目录下 外部可以进行访问~~
 

当然URL还有一个重要部分  query string 

        

        方法

主要有俩个:get  post 

get常用于获取服务器上的某个资源 而post  多用于提交用户输入的数据给服务器,但其实这俩方法本质上是没有啥区别的,区别常常体现在用法或者说是习惯上:

1.GET也可以向服务器传递信息,但是这些信息一般是放在url里面的query string中 post则是在body

2.GET是获取信息 POST基本上是用于传递数据信息

3.GET通常会被设计成幂等 而POST则不会(幂等的含义是多次传相同的请求 响应都是同一个)

4.GET是可以被缓存的,则POST则是一般不能被缓存的

2.header

         header里面的部分都是以键值对的形式存在的,这些键值对都是HTTP事先定义好的,有着特定的含义的。

        1.host

host就是服务器所在的地址 和 端口 用来描述你最终要访问的目标

        2.Content - Length / Content - Type

这里描述的是body里面的字段长度 和 字段的数据类型~~

        3.UA

描述了浏览器和操作系统的版本,主要用于区分PC端和手机端的,通过区分 在尺寸方面等可以做出一些调整。

        4.Referer

表示当前页面从哪来的,就好比你从百度上搜索一个视频网站,打开视频网站的时候,referer记录的就是百度的网站。

        5.Cookie

这是一个非常重要的header中的属性,本质上就是浏览器非网页提供的一个本地存储数据的机制。网页 默认是不被允许访问你计算机的硬盘的。 

服务器在接受到http请求的时候,服务器在响应标头中会设置一个/数个set-cookie。浏览器收到响应后通常会保存下 Cookie,并将其放在 HTTP Cookie 标头内,向同一服务器发出请求时一起发送。cookie存的时候,按照浏览器+域名来划分的,不同的浏览器各自存各自的cookie 当然cookie里面不仅存键值对,还存过期时间。比如说网站登陆一次之后,记录登录状态 过来一段时间不登陆的话,就不是默认登陆了。

要知道的是,服务器会有很多客户端进行连接,客户端在访问浏览器的时候,通过cookie值来获取当前状态,当浏览器存好cookie之后,后续再发请求的时候 会带上这个 cookie值,就好比 我们和好友聊天,聊着聊着突然有事情暂时就离开了,完成事情之后如果再想聊,就需要浏览之前的聊天记录 (这里的上下文的聊天记录 就像是cookie

过期时间往往是很有必要的,比如在交易的业务下,其过期时间就要很短来保证安全。

3.HTTP响应报文格式

        1.首行

响应报文的首行以 版本号,状态码,状态码描述来构成的

         2.header body 空行等 基本上和请求一样

HTTP协议报文 小结:

 1.空行就是header的标志

 2.

 如何构造HTTP请求:

        1.地址栏直接输入

        2.点击收藏夹

        3.html中的link script img a....

        4.form标签

 但是form标签只能写get方法和post方法~~ 那还有啥方式可以写http请求吗?ajax运营而生·~~

这里主要讲解的是jquery提供的ajax,因为这里api是针对原生ajax进行封装,要简单很多。

        5.ajax

ajax 全称 Asynchronous Javascript And XML, 是 2005 年提出的一种 JavaScript 给服务器发送HTTP 请求的方式
特点是可以不需要 刷新页面/页面跳转 就能进行数据传输

 Asynchronous是异步的意思 , 相当于客户端在完成“发送请求”操作之后,不必等待服务器响应回来,就可以继续向下执行,当受到响应之后,后续代码再进行操作。

4.HTTPS

        1.HTTPS是什么

http协议内容都是按照文本的方式明文传输,在安全方面非常鸡肋,因此在此基础上加上一个加密层,就是HTTPS。

        HTTP + SSL(安全层) = HTTPS

因此http的明文要如何加密嘞?这时候就要用到一个概念  密钥

        2.加密

明文通过密钥变成密文 就是 加密,密文通过密钥变成明文 就是 解密

        加密其中最简单的一个方式就是  对称加密

啥时候对称加密?简单来说 就是 加密解密用同一套密钥

        明文 + 密钥 pur1  -- 》 密文        加密

        密文 + 密钥 pur1  -- 》 明文        解密

这个密钥pur1又是加密又是解密啥活都干的 就是 对称密钥

但是这种加密方式 看似无懈可击 但又漏洞百出,如果让坏人知道了这个密钥不就玩球了吗~~
        

况且一个服务器需要给很多个客户端提供服务,每个客户端都得有独特的密钥不能相同,假设客户端生成一个密钥,就需要把这个密钥告诉服务器

 解决这一问题就需要把这个密钥传过去,这时候就需要非对称加密 了~~

 具体实现如下:

 但是,但是!还是有漏洞! 这里就涉及到了中间人攻击了

 魔高一尺道高一仗~~ 因为中间人的攻击而进一步的引入了 证书 的概念~~
这里中间人攻击 主要出现的原因就是,这个公钥被替换了,当服务器(网站)设立之初,就需要去专门的认证机构去 申请证书~~ 而这个证书包含了公钥,还有一个重要的字段  证书的签名

也就是当客户端请求公钥的时候,服务器并不是傻傻的直接发密文了,而是发证书,这个证书的签名随着这个证书交给了 客户端,客户端根据一系列的证书上的信息进行复杂的计算 客户端可以使用 认证机构提供的公钥进行解密,计算的结果 相当于一个hash值,客户端再根据相同的hash算法,在计算一遍hash值 进行匹对,如果正确就继续进行交互,如果不对,直接警告~~

这个公钥黑客是无法进行改变的,黑客是根据公钥私钥匹配来进行入侵的,也就是说 已经确定好的公钥,(密钥存在与服务器中)因为如果公钥改变的话,客户端进行hash计算的时候,俩个hash值是不匹配的,黑客就无法让客户端用自己设计好的公钥密钥~~

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值