简介:html
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。web
HTTP是一个属于应用层的面向对象的协议,因为其简捷、快速的方式,适用于分布式超媒体信息系统。算法
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,若是攻击者截取了Web浏览器和网站服务器之间的传输报文,就能够直接读懂其中的信息,所以,HTTP协议不适合传输一些敏感信息,好比:信用卡号、密码等支付信息。浏览器
它的发展是万维网协会(World Wide Web Consortium)和Internet工做小组IETF(Internet Engineering Task Force)合做的结果,缓存
(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。安全
RFC 2616定义了今天广泛使用的一个版本——HTTP 1.1。服务器
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。网络
它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,数据结构
以及哪部份内容首先显示(如文本先于图形)等。架构
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
http请求由三部分组成,分别是:请求行、消息报头、请求正文
在TCP/IP协议栈中的位置:
HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了咱们常说的HTTPS。
默认HTTP的端口号为80,HTTPS的端口号为443。
HTTP协议永远都是客户端发起请求,服务器回送响应。
这样就限制了使用HTTP协议,没法实如今客户端没有发起请求的时候,服务器将消息推送给客户端。
HTTP协议是一个无状态的协议,同一个客户端的此次请求和上次请求是没有对应关系
HTTP协议的主要特色可归纳以下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。
3.灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无链接:无链接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时它的应答就较快。
一次HTTP操做称为一个事务,其工做过程可分为四步:
1.首先客户机与服务器须要创建链接。只要单击某个超级连接,HTTP的工做开始。
2.创建链接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3.服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4.客户端接收服务器所返回的信息经过浏览器显示在用户的显示屏上,而后客户机与服务器断开链接。
若是在以上过程当中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来讲,这些过程是由HTTP本身完成的,用户只要用鼠标点击,等待信息显示就能够了。
请求行是由 请求方式、请求资源、请求协议组成;
请求方式主要有GET和POST两种;
除了表单提交,其余都是GET请求;
一共有八种请求方式:
请求方式 | 做用 |
get | 用于请求某个资源,理论上不修改服务器的状态 |
post | 表单提交 |
head | 只返回get请求后相应的头,而不用吧相应体(HTML)返回 |
trace | 显示服务器端接收的信息,用于调试 |
put | 将包含的信息放在URL中 |
delete | 指明要删除某个URL对应的资源 |
options | 列出HTTP方法列表 |
connect | 创建隧道 |
幂等:一次请求和屡次请求的结果是同样的;
在请求方式中,知足幂等的有:HEAD、GET、PUT;其他的都不是幂等;
请求资源是要请求返回的web资源;
请求协议如今通常使用HTTP/1.1,之前使用HTTP/1.0
注意:HTTP/1.1和HTTP/1.0的区别
HTTP是基于TCP/IP之上的,HTTP/1.0是指链接web服务器后只容许一次HTTP请求;HTTP/1.1是指链接web服务器后容许屡次HTTP请求;
请求头是由不少Map组成;
Host | 客户机向服务器发送请求的主机名 |
Accept | 客户机支持的数据类型 |
Accept-Language | 客户机支持的语言 Tips:在访问www.google.com 时服务器会解析出客户机支持的语言,而后发回此语言的网页; |
Accept-Charset | 客户机支持的编码 |
Accept-Encoding | 客户机的压缩格式 |
Referer | 客户机访问此资源的来源;好比从1.html中的超连接请求2.html,则请求2.html时会发送Referer: 1.html 用途:防盗链 避免从未知网站连接此网站,盗用资源 |
User-Agent | 客户机的软件环境 |
Connection | 客户机发送此链接后的链接状态时继续链接仍是断开 |
Date | 客户机发送的时间 |
注意:请求头和实际内容中间须要加上空行;
100-199 | 服务器成功接收客户请求,不过须要让客户机继续发送请求完成整个请求过程 |
200-299 | 200 成功处理 |
300-399 | 302 : 找别人,在响应头中须要有location属性; 30四、307:找缓存,即缓存中存在页面 |
400-499 | 403:存在页面,可是用户没有权限访问; 404:无此页面 |
500-599 | 500 : 服务器内部错误 |
Server | 服务器信息 |
Content-Length | 响应内容的长度 |
Content-Encoding | 服务器内容的压缩格式 |
Content-Type | 服务器内容的格式,好比text/html ; image/jpeg |
location | 用于状态码为302,表示别人的地址 |
Content-disposition | 下载返回的数据 |
Transfer-Encoding | 以块传输仍是以字节传输 |
Date | 时间 |
refresh | 定时刷新或重定向 |
Last-Modified | 最后改变的时间 |
Expires | -1或0 表示无缓存 |
ETag | 每一个web资源都有一个标示符,只要web资源内容改动,标示符就会改变; |
一、客户端发起HTTPS请求
这个没什么好说的,就是用户在浏览器里输入一个https网址,而后链接到server的443端口。
二、服务端的配置
采用HTTPS协议的服务器必需要有一套数字证书,能够本身制做,也能够向组织申请,区别就是本身颁发的证书须要客户端验证经过,才能够继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。
这套证书其实就是一对公钥和私钥,若是对公钥和私钥不太理解,能够想象成一把钥匙和一个锁头,只是全世界只有你一我的有这把钥匙,你能够把锁头给别人,别人能够用这个锁把重要的东西锁起来,而后发给你,由于只有你一我的有这把钥匙,因此只有你才能看到被这把锁锁起来的东西。
三、传送证书
这个证书其实就是公钥,只是包含了不少信息,如证书的颁发机构,过时时间等等。
四、客户端解析证书
这部分工做是有客户端的TLS来完成的,首先会验证公钥是否有效,好比颁发机构,过时时间等等,若是发现异常,则会弹出一个警告框,提示证书存在问题。
若是证书没有问题,那么就生成一个随机值,而后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,否则看不到被锁住的内容。
五、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端获得这个随机值,之后客户端和服务端的通讯就能够经过这个随机值来进行加密解密了。
六、服务段解密信息
服务端用私钥解密后,获得了客户端传过来的随机值(私钥),而后把内容经过该值进行对称加密,所谓对称加密就是,将信息和私钥经过某种算法混合在一块儿,这样除非知道私钥,否则没法获取内容,而正好客户端和服务端都知道这个私钥,因此只要加密算法够彪悍,私钥够复杂,数据就够安全。
七、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,能够在客户端被还原。
八、客户端解密信息
客户端用以前生成的私钥解密服务段传过来的信息,因而获取了解密后的内容,整个过程第三方即便监听到了数据,也一筹莫展。
正是因为HTTPS很是的安全,攻击者没法从中找到下手的地方,从站长的角度来讲,HTTPS的优势有如下2点:
一、SEO方面
谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
二、安全性
尽管HTTPS并不是绝对安全,掌握根证书的机构、掌握加密算法的组织一样能够进行中间人形式的攻击,但HTTPS还是现行架构下最安全的解决方案,主要有如下几个好处:
(1)、使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程当中不被窃取、改变,确保数据的完整性。
(3)、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增长了中间人攻击的成本。
HTTPS的缺点
虽说HTTPS有很大的优点,但其相对来讲,仍是有些不足之处的,具体来讲,有如下2点:
一、SEO方面
据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增长10%到20%的耗电,此外,HTTPS协议还会影响缓存,增长数据开销和功耗,甚至已有安全措施也会受到影响也会所以而受到影响。
并且HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么做用。
最关键的,SSL证书的信用链体系并不安全,特别是在某些国家能够控制CA根证书的状况下,中间人攻击同样可行。
二、经济方面
(1)、SSL证书须要钱,功能越强大的证书费用越高,我的网站、小网站没有必要通常不会用。
(2)、SSL证书一般须要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展能够部分解决这个问题,可是比较麻烦,并且要求浏览器、操做系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
(3)、HTTPS链接缓存不如HTTP高效,大流量网站如非必要也不会采用,流量成本过高。
(4)、HTTPS链接服务器端资源占用高不少,支持访客稍多的网站须要投入更大的成本,若是所有采用HTTPS,基于大部分计算资源闲置的假设的VPS的平均成本会上去。
(5)、HTTPS协议握手阶段比较费时,对网站的相应速度有负面影响,如非必要,没有理由牺牲用户体验。
一、SSL的做用
(1)、认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)、加密数据以防止数据中途被窃取;
(3)、维护数据的完整性,确保数据在传输过程当中不被改变。
而SSL证书指的是在SSL通讯中验证通讯双方身份的数字文件,通常分为服务器证书和客户端证书,咱们一般说的SSL证书主要指服务器证书,SSL证书由受信任的数字证书颁发机构CA(如VeriSign,GlobalSign,WoSign等),在验证服务器身份后颁发,具备服务器身份验证和数据传输加密功能,分为扩展验证型(EV)SSL证书、组织验证型(OV)SSL证书、和域名验证型(DV)SSL证书。
二、SSL证书申请的3个主要步骤
对于SSL证书的申请,主要有如下3个步骤:
(1)、制做CSR文件
所谓CSR就是由申请人制做的Certificate Secure Request证书请求文件,制做过程当中,系统会产生2个密钥,一个是公钥就是这个CSR文件;另一个是私钥,存放在服务器上。
要制做CSR文件,申请人能够参考WEB SERVER的文档,通常APACHE等,使用OPENSSL命令行来生成KEY+CSR2个文件,Tomcat,JBoss,Resin等使用KEYTOOL来生成JKS和CSR文件,IIS经过向导创建一个挂起的请求和一个CSR文件。
(2)、CA认证
将CSR提交给CA,CA通常有2种认证方式:
①、域名认证:通常经过对管理员邮箱认证的方式,这种方式认证速度快,可是签发的证书中没有企业的名称。
②、企业文档认证:须要提供企业的营业执照,通常须要3-5个工做日。
也有须要同时认证以上2种方式的证书,叫EV证书,这种证书可使IE7以上的浏览器地址栏变成绿色,因此认证也最严格。
(3)、证书的安装
在收到CA的证书后,能够将证书部署上服务器,通常APACHE文件直接将KEY+CER复制到文件上,而后修改HTTPD.CONF文件;TOMCAT等,须要将CA签发的证书CER文件导入JKS文件后,复制上服务器,而后修改SERVER.XML;IIS须要处理挂起的请求,将CER文件导入。
HTTP与HTTPS有什么区别?
HTTP协议传输的数据都是未加密的,也就是明文的,所以使用HTTP协议传输隐私信息很是不安全,为了保证这些隐私数据能加密传输,因而网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
简单来讲,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要以下:
一、https协议须要到ca申请证书,通常免费证书较少,于是须要必定费用。
二、http是超文本传输协议,信息是明文传输,https则是具备安全性的ssl加密传输协议。
三、http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。
四、http的链接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。