什么是http协议
- http超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议。常基于TCP/IP协议传输数据,互联网上应用最广泛的一种最为广泛的网络协议,所有的www文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接受HTML页面的方法。
- 现在常用的http的版本有:
- HTTP/1.1(1997年) 内容:持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码。在2015年之前使用最广泛
- HTTP/2(2015年) 内容:多路复用、服务器推送、头信息压缩、二进制协议(逐渐覆盖市场)
- 多路复用指的是通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多路并行而不是依赖建立多个TCP连接。
HTTP之请求消息Request/响应消息Response
- 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行、请求头部(首部行)、空行(CRLF)和请求数据(主体)四个部分组成。
- 一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。HTTP响应也由四个部分组成,分别是:状态行、消息报头(首部行)、空行和响应正文(实体主体)。
http状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
HTTP工作原理
- 客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。 - 发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。 - 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。 - 释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求; - 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
GET和POST的区别
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
什么是https协议
- Https是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立安全信道,加密数据包、HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。(TLS是传输层加密协议,前身是SSL协议)
- HTTPS协议的加密范围也比较有限,在黑客攻击,拒绝服务器攻击,服务器劫持等方面几乎都起不到作用
- SSL整数的信用链体系并不安全。
HTTP与HTTPS区别
-
HHTP特点
1、无状态:协议对客户端没有状态存储,对事物处理没有“记忆能力”。eg:访问一个网站需要反复进行登录操作。
2、无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。eg:比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量
3、基于请求和响应:基本的特性,由客户端发起请求,服务端响应
4、通信使用明文,请求和响应不会对通信方进行通信,无法保护数据的完整性 -
HTTPS特点
1、内容加密:采用混合加密技术,中间者无法直接查看明文内容
2、验证身份:通过证书认证客户端访问的是自己的服务器
3、保护数据完整性:防止传输的内容被中间人冒充或者篡改
4、发送方事后不能否认所发送过的报文 -
区别
1、HTTPS连接缓存不如HTTP高效,流量成本高
2、HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本
3、HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。
TCP/IP四层模型
TCP三次握手与四次挥手
TCP三次握手
- 三次握手:为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误
客户端发出的第一个请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以至于延误到连接释放以后的某个时间才到达服务端。本来这已经一个早已失效的报文段,但是服务端收到了这个已经失效的连接请求报文段后,就误认为是客户端再次发出的一个新的连接请求,于是向客户端发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要服务端发出确认,新的连接就建立了。由于客户端并没有发出建立连接的请求,因此不会理睬服务端的确认,也不会向服务端发送数据。但是服务端却以为新的运输连接已经建立,并一直等待客户端发送数据。所以没有采用“三次握手”,这种情况下的很多资源就白白浪费掉。
TCP四次挥手
- TCP是全双工模式,当客户端发出FIN报文段时,只是表示客户端已经没有数据要发送了,客户端告诉服务端,它的数据以及全部发送完毕了。但是,这个时候客户端还是可以接受来自服务端的数据;当服务端返回ACK报文段时,表示它已经知道客户端没有数据发送了,但是服务端还是可以发送数据给客户端的;当服务端也发送FIN报文段时,这个时候就表示服务端也没有数据要发送了,就会告诉客户端,我也没有数据要发送了,如果收到客户端确认报文段,之后彼此就会愉快的中断这次TCP连接。