了解HTTP、HTTPS

HTTP

HTTP原理

HTTP 是一个无状态的协议。无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接, 这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP 遵循请求(Request)/应答(Response)模型。客户机(浏览器)向 服务器发送请求,服务器处理请求并返回适当的应答。所有 HTTP 连接都被构造成一套请求和应答。

HTTPS工作原理

  • 一、首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;
  • 二、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);
  • 三、消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;
  • 四、发送给服务端,此时只有服务端(RSA私钥)能解密。
  • 五、解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。

URI、URL、URN

URI(uniform resource identifier):统一资源标识符,用来唯一地标识一个资源(抽象的)

URL(uniform resource locator):统一资源定位符,是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何定位这个资源(是URI的子集,任何东西,只要能够唯一地标识出来,都可以说这个标识是URI。如果这个标识是一个可获取到对象的路径,那么同时它也可以是一个URL;但是如果这个标识不提供获取到对象的路径,那么它就必然不是URL)

URN(uniform resource name):统一资源命名,是通过名字来标识资源,也是一种URI

平时我们俗称的 “网址” 其实就是说的 URL
在这里插入图片描述

URL编码规则:

  1. 每对name/value由&;符分开;每对来自表单的name/value由=符分开
  2. 任何特殊的字符以百分符%用十六进制编码
  3. 其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”
    • 比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。那么汉字的url编码呢?
    • “胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。

urlencode和urldecode

urlencode:将字符串以URL编码

urldecode:对字符串进行URL解码,就是urlencode的逆过程

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.

比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

转义的规则如下:

将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY 格式

HTTP常见Header :

​ · Content-Type:数据类型(text/html等)

​ · Content-Length: Body的长度
​ · Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上

​ · User-Agent:声明用户的操作系统和浏览器版本信息

​ · referer:当前页面是从哪个页面跳转过来的

​ · location:搭配3xx状态码使用,告诉客户端接下来要去哪里访问;

​ · Cookie:用于在客户端存储少量信息,通常用于实现会话(session)的功能;

HTTP方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XcIJJjNb-1600950574255)(H:\Typora图片\1596630208068.png)]

HTTP/1.0定义了三种请求方法:GET、POST、HEAD

HTTP/1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACERT、CONNECT

GET和POST的区别:

GET请求:

GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive12345

POST请求:

POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

1、get重点在从服务器上获取资源,post重点在向服务器发送数据;

2、get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用”?”连接,多个请求数据间用”&”连接,如<http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;
post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;

3、Get传输的数据量小,因为受URL长度限制,但效率较高;
Post可以传输大量数据(理论上不受限制),所以上传文件时只能用Post方式;

4、get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等; post较get安全性较高;

5、GET只接受ASCII字符,而POST没有限制

PUT请求:与GET从服务器读取资源相反,PUT方法会向服务器写入资源. 有些发布系统允许用户创建Web页面,并用PUT直接向其传输到Web服务器中

HTTP之状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

常见状态码:

​ · 200 OK:客户端发来的http请求,被正确处理了

​ · 204 NO Content:请求结果被正确处理了,但是响应信息中没有响应正文

​ · 206 Partial Content:客户端对服务器进行了范围请求,而且服务器成功的执行了这部分GET请求

​ · 301 Moved Permamently:永久性重定向,表示请求的资源已经被分配了新的URI,以后应使用新的URI

​ · 302 Found:临时性重定向,目标资源被分配了新的URI,希望用户本次使用新的URI进行访问

​ (当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送;301、302标准是禁止将POST方法改变成GET方法的,但实际使用时大家并不遵守

​ · 303 该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源,明确表示客户端应当采用get方法获取资源,这点与302状态码有区别。

​ · 307 Temporary Redirect:临时重定向,该状态码与302 Found有着相同的含义。尽管302标准禁止POST变换成GET,但实际使用时大家并不遵守;307会遵照浏览器标准,不会从POST变成GET,但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。

​ · 400 Bad Request:表明请求报文中存在语法错误,需修改请求内容重新发送,另外,浏览器会像200 OK一样对待该状态码

​ · 403 Forbbiden:表明浏览器所请求的资源被服务器拒绝了

​ · 404 Not Found:太常见了,表明服务器上没有浏览器所请求的资源

​ · 500 Internal Server Error:表明服务器端在执行的时候发生了错误

​ · 503 Server Unavailable:表明服务器目前处于超负载或正在进行停机维护状态,目前无法处理请求

HTTP存在的问题

由于我们在传输数据时信息都是明文的,因此很容易出现数据被监听和窃取的情况

在这里插入图片描述

另外,传输的数据还有可能被一些别有用心的人篡改,导致浏览器与网站收发的内容不一致。示意图如下:

在这里插入图片描述

也就是说,使用http传输数据至少存在着数据被监听以及数据被篡改这两大风险,因此http是一种不安全的传输协议

HTTPS

HTTPS就是安全的HTTP,在http与传输层之间加上了一个SSL对称加密与非对称加密。HTTPS = HTTP+ 加密 + 认证 + 完整性保护。

HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段

HTTPS的整体过程分为证书验证和数据传输阶段:

① 证书验证阶段:

  • 1)浏览器发起 HTTPS 请求;
  • 2)服务端返回 HTTPS 证书;
  • 3)客户端验证证书是否合法,如果不合法则提示告警。

② 数据传输阶段:

  • 1)当证书验证合法后,在本地生成随机数;
  • 2)通过公钥加密随机数,并把加密后的随机数传输到服务端;
  • 3)服务端通过私钥对随机数进行解密;
  • 4)服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输。

HTTPS加密过程

首先进行https请求的前提条件是首先服务器拥有数字证书签发机构(CA)颁发的数字证书,一般为收费。

1、服务器将携带的公钥向数字证书机构申请证书。

2、数字证书机构用自己的私钥对公钥签名颁发证书,并返回给服务器。

3、服务器将申请携带公钥的证书分发给客服端。

4、客户端验证证书,证书机构通过验证,或者用户接受不受信任的证书(非权威机构颁发的证书)。获取到公钥。到这一步,在证书保证下服务器拥有私钥,客户端拥有公钥,可进行非对称性加密。

5、使用公钥加密报文发送给服务器,其中携带随机串。其中的随机串用户传输数据时进行对称加密

6、服务器使用私钥解密。获取报文信息及随机串。

7、解密后服务器发送握手消息给客户端。

8、客户端接受握手消息,握手结束,双方确定加密算法(使用随机串确定的对称性加密),开始传输。

为什么数据传输是用对称加密的?

首先:非对称加密的加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。

另外:在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密

为什么需要CA机构颁发证书?

防止”中间人“攻击,同时可以为网站提供身份证明。

Http与Https的区别:

  1. HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
  2. HTTP 是不安全的,而 HTTPS 是安全的
  3. HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
  4. 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
  5. HTTP 无法加密,而HTTPS 对传输的数据进行加密
  6. HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书

什么是Http协议无状态协议?怎么解决Http协议无状态协议?

  • 无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息
    • 也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。
  • 可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

HTTP1.0和HTTP1.1的一些区别

HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:

  1. 缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  2. 带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  3. 错误通知的管理在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  4. Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  5. 长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值