HTTP和HTTPS协议

一.HTTP协议

1.概述

HTTP协议指的是超文本传输协议。超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

2.原理

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程: 
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。

Web服务器,浏览器,代理服务器 的工作原理:

当我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。 原理是怎样的呢?
——实际上我们输入URL后,我们的浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页。
 
代理服务器:

我们的Request 有可能是经过了代理服务器,最后才到达Web服务器的。

过程如下图所示:

 

 

 
3.特点:

http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.

HTTP协议的主要特点可概括如下:

1).支持客户/服务器模式。

2).简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

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

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

随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,Keep-Alive 被提出用来解决这效率低的问题。Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。市场上的大部分Web 服务器,包括 iPlanet、IIS 和 Apache,都支持 HTTP Keep-Alive。

5).无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答会比较快。客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是Session。

4.打开一个网页需要浏览器发送很多次Request

1). 当你在浏览器输入URL http://www.cnblogs.com 的时候,浏览器发送一个Request去获取 http://www.cnblogs.com 的html.  服务器把Response发送回给浏览器.

2). 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。

3). 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。

4). 等所有的文件都下载成功后。 网页就被显示出来了。

二、HTTPS协议

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

 

三、常用请求方式:get、post

get请求:向服务器获取资源。

例如:https://www.baidu.com/s?ie=utf-8&fr=bks0000&wd=QQ%E9%82%AE%E7%AE%B1%E7%99%BB%E5%BD%95

是把请求参数放在地址后面,?后面就是请求的参数

post请求:一般是用来更新信息的。

Post和Get请求的区别:

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

1.get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。post请求是把请求的数据放在请求体中。但是这种做法也不时绝对的,大部分人的做法也是按照上面的说法来的,但是也可以在get请求加上 request body,给 post请求带上 URL 参数。

2. get请求提交的url中的数据最多只能是1024字节,这个限制是浏览器或者服务器给添加的,http协议并没有对url长度进行限制,目的是为了保证服务器和浏览器能够正常运行,防止有人恶意发送请求。post请求则没有大小限制。。

3.post请求相对于get请求更安全。因为get请求传递的参数会显示在url中,用户在访问的时候浏览器会缓存网页,这样别人在查看浏览器浏览记录的时候会获取私人信息,post请求不会被用户看到,所以安全性高。

4.get方式需要使用Request.QueryString来取得变量的值,而post方式通过Request.Form来获取变量的值。

 

 

posted @ 2020-08-29 21:29  金大头爱生活爱学习  阅读(392)  评论(0)    收藏  举报