浅析HTTP协议与HTTPS协议

1.HTTP

(1).简介

HTTP协议(HyperText Transfer Protocol:超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。默认端口为80;
是用于从www服务器传输超文本到本地浏览器的传送协议,它可以使浏览器更加高效,使网络传输减少;
它是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等;

(2).特点

1.支持客户端/服务器模式(C/S)

2.简单快速
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
每种方法规定了客户与服务器联系的类型不同。

3.灵活
HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4.无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,立即断开连接。采用这种方式可以节省传输时间。 

5.无状态
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
另一方面,在服务器不需要先前信息时它的应答就较快。 

6.多次HTTP请求
在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,
例如,CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源。现在的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。

7.基于TCP协议
HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节底层是基于TCP实现的。
现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。

(3).工作原理
在这里插入图片描述

HTTP由请求和响应构成,是一个标准的客户端/服务器模型(C/S)。HTTP协议永远都是客户端发起请求,服务器回送响应。
客户机与服务器建立连接后,发送一个请求给服务器,服务器接收到请求后,给予相应的响应信息,随后便关闭tcp连接。
服务器可能同时接收多个请求,这是就会产生多个session,每个session分别处理各自的请求。

(4).工作过程

一次HTTP操作称为一个事务,其工作整个过程如下:

1.地址解析

如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm
从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,
解析得到的结果如下:
     协议名:http
     主机名:localhost.com
     端口:8080
     对象路径:/index.htm
在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。

2.封装HTTP请求数据包

把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

3.封装成TCP包,建立TCP连接

在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,
该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。
HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,
因此,首先要建立TCP连接,一般TCP连接的端口号是80。

4.客户机发送请求命令

建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URI:Uniform Resource Identifier)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

5.服务器响应

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

6.服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,如果浏览器或者服务器在其头信息加入:   Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

7.客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。
客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

(5).HTTP请求报文与响应报文格式

请求报文:

HTTP请求报文包括:请求行 请求头部 空行 请求数据

在这里插入图片描述

1.请求行:包含请求方法、URL、HTTP协议版本字段,它们用空格分隔。例如: GET /index.html HTTP/1.1
2.请求头部:由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息;
  典型的请求头部有:
		User-Agent:产生请求的浏览器类型
		Accept:客户端可识别的内容类型列表
		Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
3.空行
  最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
4.请求数据
  请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

响应报文:

HTTP响应报文包括:状态行 消息报头 空行 响应正文 

在这里插入图片描述

1.状态行:包含HTTP版本、状态码、状态码的描述文本
2.消息报头,用来说明客户端要使用的一些附加信息
3.空行,消息报头后面的空行是必须的
4.响应正文,服务器返回给客户端的文本信息

(6).常用的HTTP请求方法

GET:       请求指定的页面信息,并返回实体主体
POST:      向指定资源提交数据进行处理请求,例如提交表单或者上传文件
HEAD:      类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
PUT:       从客户端向服务器传送的数据取代指定的文档的内容
DELETE:    请求服务器删除指定的页面
OPTIONS:   允许客户端查看服务器的性能

Get和Post的区别:

Get用于获取查询/信息,Post方法用于资源的更新。
1.get提交的数据放在url之后,以?分割url和传输数据,post方法把提交的数据放在HTTP包的Body中。
2.get提交的数据大小有限制,post方法提交的数据无限制。
3.get方法涉及安全问题。

(7).常用的HTTP状态码及其描述文本

200 OK:            表示客户端请求成功;
400 Bad Request:   表示客户端请求有语法错误,不能被服务器所理解;
401 Unauthonzed:   表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;
403 Forbidden:     表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
404 Not Found:     表示请求的资源不存在,例如,输入了错误的URL;
500 Internal Server Error:   表示服务器内部错误,无法完成请求;
503 Service Unavailable:     表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

HTTP长连接和短连接:

短连接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束中断连接。
长连接:用以保持连接特性,当一个网页打开完成,客户端和服务器的连接不会关闭,再次访问时会继续使用已建立的连接。
2.HTTPS

(1).简介

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer:超文本传输安全协议),是以安全为目标的HTTP通道,
简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。默认端口为443;
SSL:安全套接层,主要用于web的安全传输协议。通过证书认证来确保客户端和网站服务器之间的通信数据是加密安全的。

(2).两种基本的加密算法类型

HTTPS使用两种加密方式的混合加密
1.对称加密
密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES,RC5,3DES等;
对称加密主要问题是共享秘钥,除你的计算机(客户端)知道另外一台计算机(服务器)的私钥秘钥,否则无法对通信流进行加密解密。解决这个问题的方案非对称秘钥。
2.非对称加密
使用两个秘钥:公共秘钥和私有秘钥。私有秘钥由一方密码保存(一般是服务器保存),另一方任何人都可以获得公共秘钥。
这种密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
1.对称密钥加密方式的优缺点:
  优点:处理速度快
  缺点:但是容易被第三方盗取

2.非对称密钥加密方式的优缺点:
  优点:更加安全,不容易被盗取
  缺点:处理效率相比对称密钥加密要慢,如果在通信时用这种方式加密,效率很低

(3).工作原理
在这里插入图片描述

1.浏览器(客户端)向服务器的443端口发起请求,请求携带了浏览器支持的加密算法和哈希算法;
2.服务器收到请求后,选择浏览器支持的加密算法和哈希算法;
3.服务器将数字证书返回给浏览器,这里的数字证书可以是向某个可靠机构申请的,也可以是自制的。证书里面包含的服务器信息有:域名,申请证书的公司,公钥
4.浏览器进入数字证书认证环节,这一部分是浏览器内置的TLS完成的:
	   4.1 首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。
	       如果查到了对应的机构,则取出该机构颁发的公钥;
	   4.2 用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性。
	       签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。
	       这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了;
	   4.3 浏览器生成一个随机数R,并使用网站公钥对R进行加密;
5.浏览器将加密的R传送给服务器;
6.服务器用自己的私钥解密得到R;
7.服务器以R为密钥使用了对称加密算法加密网页内容并传输给浏览器;
8.浏览器以R为密钥使用之前约定好的解密算法获取网页内容;

(4).优点

1.客户端产生的密钥只有客户端和服务器端能得到;
2.加密的数据只有客户端和服务器端才能得到明文;
3.客户端到服务端的通信是安全的;
3.答疑解惑

1.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证书

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

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

3.URI和URL的区别

URL 和 URN 是 URI 的子集

在这里插入图片描述
(1).统一资源标识符URI

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

Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个URI来定位的
URI一般由三部组成:
    ①访问资源的命名机制
    ②存放资源的主机名
    ③资源自身的名称,由路径表示,着重强调于资源。

(2).统一资源定位器URL

URL(uniform resource locator:统一资源定位器)它是一种具体的URI
即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成:
    ①协议(或称为服务方式)
    ②存有该资源的主机IP地址(有时也包括端口号)
    ③主机资源的具体地址(如目录和文件名等)

(3).统一资源命名符URN

URN(uniform resource name:统一资源命名符)是通过名字来标识资源,比如mailto:java-net@java.sun.com。

URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。
笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。

4.URL的组成

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:

1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认的80端口
4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,
  如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。
  文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。
  参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
简单的来说,URL 由 协议/模式 ,域名/IP地址 ,端口号(可以不加),路径,文件名 组成;
例如: http://172.25.66.1:8080/bbs/index.html/

5.HTTP请求方法中GET和POST的区别

1.GET提交:请求的数据会附在URL之后,即在请求行中;POST提交:把提交的数据放置在是HTTP包的请求数据中。
  因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
2.GET:特定浏览器和服务器对URL长度有限制;POST:由于不是通过URL传值,理论上数据不受限。
3.POST的安全性要比GET的安全性高;比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存,
  当其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码。

6.HTTP协议的三大缺点

HTTP协议由于是明文传送,所以存在三大风险:

1.被窃听的风险:第三方可以截获并查看你的内容
2.被篡改的危险:第三方可以截获并修改你的内容
3.被冒充的风险:第三方可以伪装成通信方与你通信

7.HTTPS是怎么解决HTTP协议的三大缺点的?

防监听:采用对称加密对数据进行加密,采用非对称加密对对称加密的密钥进行加密
防伪装:通信双方携带证书,证书有第三方颁发,很难伪造
防篡改:采用摘要算法(MD5或是SHA-1),同样的数据由同样的摘要,而只要有一点不同的数据,它的摘要往往不同,只要数据做了篡改,就会被感知到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值