HTTP协议+非对称加密

一、基本概念

经典场景:当向浏览器中输入一个URL网址后,直到显示出网页的过程中发生了什么?

① DNS解析获取IP地址
首先浏览器搜索自身的DNS缓存——>操作系统的DNS缓存——>本地硬盘的host文件——>路由器——>服务器

② TCP三次握手建立连接

③ 浏览器向服务器发送http请求,索要网页(get)

④ 服务器处理请求,返回对应的HTML报文(页面代码)

⑤ 浏览器根据HTML页面代码解析和渲染页面(里面的JS、CSS、图片等资源继续通过http请求进行加载),根据收到的资源完成整个页面的渲染后将完整的网页呈现给用户。

⑥ 浏览器若没有后续的请求,就会跟服务器发起TCP四次挥手断开连接。

HTTP,全称为HyperText Transfer Protocol,即超文本传输协议。是互联网中应用最广泛的一种网络协议,所有的文件都必须遵守这个标准。

所在协议层:应用层

HTTP特性:

  • 无连接无状态(无状态是指HTTP本身不会去追踪请求之间的关系,即每一次请求之间都是独立的)
  • 构建于TCP/IP协议之上(也就是说,http请求都是TCP连接),默认端口号为80。

二、HTTP协议的过程

1. URL详解

URL(Uniform Resource Locator)是统一资源定位符的简称,有时候也被俗称为网页地址(网址),如同是网络上的门牌,是因特网上标准的资源的地址。
URL
在这里插入图片描述

三、HTTP请求

1. 请求方式

  • HTTP定义了与服务器交互的不同方式,最常用的方法有4种:GET、POST、PUT、DELETE
  • HTTP请求由3部分组成,分别是:请求行、请求头、请求正文(主体)

    在这里插入图片描述

2. GET和POST详解

① GET:一般用于信息获取,比如浏览百度首页

GET请求一般不会产生副作用,它仅仅是获取资源信息,就像数据库查询一样,不会修改、增加数据,不会影响资源的状态,并且对同一个URL的多次GET请求应该返回相同的结果。

GET请求实例
GET实例

  • 请求行由请求方式、路径、协议等构成,各元素之间以空格分隔。对应到图中即为 GET、/books/?sex=man&name=Professional、HTTP/1.1。
  • 请求头提供一些参数比如:cookie,用户代理信息,主机名等(上图第2行-第5行)。
  • 请求正文就放一些发送的数据,一般GET请求会将参数放在URL中,所以请求正文一般为空。

② POST:表示可能会修改服务器上的资源。

POST请求实例
POST

3. GET和POST的区别

GET和POST请求参数位置不同:GET对应的参数放在URL中,而POST请求的参数放在请求正文(这只是一种约定,GET将参数放在正文中也可以,但一般不这么做)。

GET请求的参数长度有限,而POST没有。

③ 出于安全考虑,在一些涉及安全的请求比如登陆请求,需要用POST提交表单,而GET请求一般用来获取静态资源。

④ GET请求和POST都可以被缓存,但GET请求可以被收藏为书签,而POST不可以。

⑤ GET请求的参数在URL中,因此绝不能用GET请求传输敏感数据

GET发送1个数据包,而POST一般发送2个数据包(Firefox只发送一个)。

具体来说:

  • 对于GET的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
  • 而对POST请求,浏览器先发送header,服务器响应100 continue,然后浏览器再发送data,服务器响应200 ok(返回数据)

四、HTTP响应

HTTP响应数服务器在客户端发送请求后经过一些处理而做出的响应,由3个部分组成:状态行、响应头、响应正文。
在这里

HTTP响应实例
HTTP响应

1. 状态码

状态行中包含状态码(一般由3位构成),用来表示服务器对客户端响应的结果:

• 1xx : 表示请求已经接受了,继续处理。
• 2xx : : 表示请求已经处理掉了。
• 3xx : 重定向,需要进一步的操作以完成请求。
• 4xx : 客户端错误,请求无法实现。
• 5xx : 服务器端错误。

常见的状态码:

• 200 OK : 客户端请求成功。

• 301 Moved Permanently : : 请求永久重定向。

• 302 Moved Temporarily : 请求临时重定向。

• 304 Not Modified :文件未修改,可以直接使用缓存的文件。

• 400 Bad Request :由于客户端请求有语法错误,不能被服务器所理解。
• 401 Unauthorized :请求未经授权,无法访问。

• 403 Forbidden :服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因。

• 404 Not Found :请求的资源不存在,比如输入了错误的URL。

• 500 Internal Server Error :服务器发生不可预期的错误,导致无法完成客户端的请求。

• 503 Service Unavailable :服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

五、HTTP与HTTPS的区别

HTTP 的缺点:

  • 通信使用明文(不加密) , 内容可能会被窃听
  • 不验证通信方的身份, 因此有可能遭遇伪装
  • 无法证明报文的完整性, 所以有可能已遭篡改

加密:

HTTP 协议中没有加密机制, 但可以通过和 SSL(Secure Socket Layer, 安全套接层) 或 TLS(Transport Layer Security, 安全层传输协议)的组合使用,加密 HTTP 的通信内容。用 SSL建立安全通信线路之后, 就可以在这条线路上进行 HTTP通信了。 与 SSL组合使用的 HTTP 被称为HTTPS(HTTPSecure,超文本传输安全协议)。

防伪装:

SSL不仅提供加密处理, 而且还使用了一种被称为证书的手段,可用以证明服务器和客户端都是所期望的和实际存在的。

防篡改:

常用的是 MD5 和 SHA-1 等散列值校验的方法,以及用来确认文件的数字签名方法。
不论使用哪一种方法, 都需要操纵客户端的用户本人亲自检查验证下载的文件是否就是原来服务器上的文件。浏览器无法自动帮用户检查。

HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用SSL(Secure Socket Layer) 和 TLS(Transport Layer Security) 协议代替而已。
通常, HTTP 直接和 TCP 通信。 当使用 SSL时, 则演变成先和 SSL通信, 再由 SSL和 TCP 通信了。

SSL采用一种叫做公开密钥加密(Public-key cryptography) 的加密处理方式

  • 每个用户都使用一对非对称的密钥。 一把叫做私有密钥(private key) , 另一把叫做公开密钥(public key) 。 顾名思义, 私有密钥不能让其他任何人知道, 而公开密钥则可以随意发布, 任何人都可以获得。
  • 送密文的一方使用对方的公开密钥进行加密处理, 对方收到被加密的信息后, 再使用自己的私有密钥进行解密。 利用这种方式, 不需要发送用来解密的私有密钥, 也不必担心密钥被攻击者窃听而盗走。
  • 要想根据密文和公开密钥, 恢复到信息原文是异常困难的, 因为解密过程就是在对离散对数进行求值, 这并非轻而易举。

六、非对称加密

6.1 对称加密

概念:通信双方约定加密解密算法并且确定一个秘钥后,采用这个秘钥进行加密和解密。
问题:传输的秘钥可能会被窃取,这样无法保证信息安全。

6.2 非对称加密

通信双方都拥有两个秘钥,一个公钥用于加密,一个私钥用于解密,两者配对使用。

A给B发送数据的过程:
1、通信双方A和B交换各自的公钥pulicA、publicB
2、当A要给B发送数据时,用pulicB加密
3、B接受到A的信息后,用自己的私钥PrivateB解密A发过来的数据。

存在的问题:
上述过程的第一步,也就是在A、B交换各自公钥的时候,假如存在第三方的攻击者C,拦截了各自的信息,然后伪装成对方发送自己的秘钥keyC,之后A、B之间的通信数据都会用keyC加密,攻击者C就可以窃取双方的数据。

解决方式:使用带证书的公钥传输机制:
使用证书,证书由受信任的第三方的证书颁发机构CA颁发。当A到给B发数据时,A首先要获取B服务器的证书(证书上包含B的公钥pulicB).
数字签名:防止证书被伪造

具体过程:
1、设有服务器S,客户端C,和第三方信赖证书机构CA
2、服务器S信赖证书机构CA,CA是知道S的公钥的,CA向S颁发证书(证书包含S的公钥),并对证书用散列技术生成一个摘要,然后CA用自己的私钥加密摘要生成一个加密签名。CA将证书和加密签名一起发给服务器S。
3、S获得CA颁发的证书,将证书发送给客户端C。
4、C拿到证书,信任CA并知晓CA的公钥,使用CA的公钥对S证书上加密的签名解密,同时对消息进行散列处理得到摘要,一次验证S证书的真实性
5、如果C验证S的证书是真的,则信任S的公钥。

6.3 经典的非对称加密算法

RSA


参考:https://blog.csdn.net/SimonxxSun/article/details/89973900
一个HTTP打趴80%面试者 - flyhero的文章 - 知乎
https://zhuanlan.zhihu.com/p/60450391
每个程序员都该懂点 HTTP - 慕课网的文章 - 知乎
https://zhuanlan.zhihu.com/p/36339844
99%的人都理解错了HTTP中GET与POST的区别 - Larry的文章 - 知乎
https://zhuanlan.zhihu.com/p/22536382
https://zhuanlan.zhihu.com/p/57142784

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值