HTTPS和HTTP的详解
Posted 三水草肃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPS和HTTP的详解相关的知识,希望对你有一定的参考价值。
HTTPS和HTTP的区别
-
HTTP是超文本传输协议,是一个客户端和服务器端请求和应答的标准,
-
HTTPS: 是以安全为目标的HTTP通道,HTTP下加入SSL/TSL层,HTTPS的安全基础是SSL,它有两个作用:
- 建立一个信息安全通道,来保证数据传输的安全
- 确保网站的真实性
-
HTTPS协议需要到ca申请证书,需要费 用
-
HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性SSL加密传输协议
-
HTTP端口是80,HTTPS端口是443
-
HTTP连接是无状态的,HTTPS协议是由SSL + HTTP 协议构建的可进行加密传输,身份认证的网络协议,比HTTP安全
HTTP头信息解读
HTTP头部包括通用头,请求头,响应头和实体头四个部分,每个头域是由一个域名,冒号:和域值三部分组成
- 通用头部是客户端和服务端都可以使用的头部,可以在客户端,服务端和其它应用程序之间提供一些非常有用的通用功能的Date头部
- 请求头部是请求报文特有的,他们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部
- 响应头部便于客户端提供信息,比如,客户端在哪种类型的服务器进行交互,如Server头部
- 实体头部指的是应对实体主体部分的头部 如Content-type头部
HTTP 通用头部
通用头部包含请求和响应消息都支持的头域,通用头部缓存头部cacle-control,pragma及信息性头部connection,Date,Transfer-Encoding,Update,Via
-
cache-control:指定请求和响应遵循的缓存机制,在请求消息或响应消息中设置cache-control并不会修改另一个消 5息处理过程中的缓存,请求时缓存指令包括no-cache,no-store,max-age,min-fresh,only-if-cached
-
no-cache:指示请求或响应消息不缓存,实际上是可以缓存在本地缓存区中的,只是在于原始服务器进行新鲜度验证之前,缓存不能将其提供给客户端使用
-
no-store:缓存应该尽快从缓存器中删除文档的所有痕迹,因为可能会包含敏感信息
-
max-age:缓存无法返回缓存长于max-age规定秒的文档,若不超过秒浏览器将不会发送对应的请求到服务器,数据右缓存直接返回,超过这一时间段才进一步由服务器决定是返回新数据还是仍由缓存提供,
-
public:指示响应可被任何缓存区缓存,可以用缓存内容回应任何用户
-
private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,
-
pragma:pragma头域用来包含实现特定的指令,最常用的是pragma:no-cache
-
connection:表示是否需要持久连接,如果值为keep-alive 默认进行持久连接,
- close:告诉WEB服务器或者代理服务器,在完成本地请求的响应后,断开连接,不要等待本地连接的后续请求了
- keepalive:告诉服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求了
- keep-Alive:如果浏览器请求保持连接,则该头部表示希望WEB服务器保持连接事件,如果Keep-alive:300. 可以减少服务端TIME-WAIT数量,道理很简单,相较而言,启动keep-alive。同一个连接上传送多个http,提供socket的效率
-
Date头域表示消息发送的时间,服务器响应中要包含这个头部,因为缓存在评估响应的新鲜度时要用到
HTTP 请求头
请求头用于说明是谁或什么在发送请求,服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应,请求头域可能包含下列字段Accept accept-charset accept-encoding accept-language from host if-modified-since if-match if-none-match if-range range referer user-agent
- Accept:告诉web服务器,自己接收什么类型 /表示任何类型 type/*表示该类型下的所有子类型
- Accept-Charset:浏览器告诉服务器自己能接收的字符集
- Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 gzip defate
- Accept-Language:浏览器申明自己接收的语言,语言跟字符集的区别:中文有多种字符集,比如big5,gb2312,gdk
- Authorization:
- If-Match:如果对象ETag没有改变,其实也就是意味了对象也改变了,才执行请求的动作,获取文档
- If-Modified-Since:如果请求的对象在该指定时间之后修改了,才执行请求的动作 反则返回304
- User-Agent:浏览器表示自己的身份,
HTTP 响应头
**响应头向客户端提供一些额外的信息,比如是谁在发送响应,响应者的功能,有助于客户端处理响应,并在将来发起更好的请求。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、**Warning、WWW-Authenticate。
- Age:当代理服务器用自己的实体去响应请求的时候,用该头部表示实体从产生到现在经过多长时间了
- Server:WEB服务器表示自己是什么软件及版本信息
- Accept-Ranges:WEB服务器表示自己是否接收其某个实体的一部分,
- Vary:
HTTP 实体头
**实体头部提供了有关实体及其内容的大量信息,从有关对象类型的信息,能够对资源使用的各种有效的请求方法,总之,实体头部头部包含关于实体原信息,实体头部包括信息头部Allow,Location,内容头部Cintent-Base,Content-Encoding,Content-Language,Content-length,Content-Location,Content-MD5,Content-Range, Content-Type,缓存头部Eatg,Expires,Last-Modified,extension-header **
- Allow: 服务器支持哪些请求方法
- Location:表示客户应当哪里去提取文档,用于将接收端定义到资源的位置,Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect,该方法同时设置代码状态为302
- Content-Base:解析主体中的相对URL时使用的基础URL
- Content-Encoding:web服务器表明自己使用了什么压缩方法,压缩响应中的对象,
- Content-Language:web服务器告诉浏览器理解主题时最适应使用的自然语言
- Content-Length:WEB服务器告诉浏览器自己响应的对象的长度或尺寸
- Content-Location:资源实际处的位置
- Content-Range:
- Content-Type:web服务器告诉浏览器自己响应的对象的类型
- Etag:就是一个对象的标志值,就一个对象而言,
- Expires:web服务器表明该实体将在什么时候过期,对于对其了的对象
- Last-modified:web服务器认为该对象的最后修改对象,比如文件的最后修改时间,动态页面的最后的产生时间
HTTP状态码
- 100: 客户端继续请求,已完成请求则忽略
- 101: 表示服务器应客户端升级协议的请求,正在进行协议切换
- 200 表明请求已经成功,默认情况下200的响应可以被缓存
- 201 表示请求已经被成功处理,并且创建了新的资源,新的资源在应答返回之前已经被创建
- 202 表示目前请求成功,但客户端不需要更新现有的页面
- 301 永久重定向,说明请求的找资源已经被移动到了由Location头部指定的URL上,是固定不会再改变,搜索引擎会根据该响应修改
- 302 临时重定向,重定向状态码表示请求的资源被暂时的移动到了由Location头部指定的URL上,浏览器会重定向到这个URL上,但是搜索引擎不会再次进行更新
- 304 说明无需再次传输请求的内容,也就是说可以使用缓存的内容,
- 400 语法无效,服务器无法理解该请求,客户端不应该在未经修改的情况下重复此请求
- 401 说明由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足
- 403 指的服务器有能力处理该请求,但是拒绝授权访问,进入该状态后,不能再继续进行验证,该访问时永久禁止的,并且与应用逻辑密切相关
- 404 说明服务器禁止了使用当前HTTP方法的请求,需要注意的是get 和 head 两个方法不得被进制,当然也不得返回状态码405
- 500 请求的服务器遇到意外情况并阻止其执行请求
- 501 表示request header里的method或content时不被服务器支持,无法被处理
- 502 表示作为网关或代理角色的服务器,从上游服务器中接收到的响应是无效的
- 503 表示服务器尚未处于可以接收请求的状态,可能因为服务器停机维护或者已经重载
数据地址: https://juejin.cn/post/6844903940832641037
HTTPS连接过程
步骤一:客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本,加密组件列表
步骤二:服务器可以进行SSL通信,会以Server Hello报文作为应答,和客户端一样,在报文中包含SSL版本以及加密组件,服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
步骤三:之后服务器发送Cerificate报文,里面包含公开密码证书
步骤四:最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
步骤五:SSL第一次握手结束之后,客户端以Clinet key exchange 报文作为回应,报文中包含通信加密中使用的一种被称为pre-master- secret的随机密码串,该报文已用步骤3中的公开密钥进行加密
步骤六:接着客户端继续发送change cioherspec报文,该报文会提示服务器,在此保温之后的通信会采用pre-master secret密钥加密
步骤七:客户端发送Finised报文,该报文中包含连接至今全部报文的整体校验值,这次握手协商是否能够成功,要以服务i去是否能够正确解密该文中作为判定标准
步骤八:服务器同样发哦是那个change cipher spec报文
步骤九:服务器同样发送finisedh 报文
步骤十:服务器和客户端和Finished报文交换完毕之后,SSL连接就算建立完成,当然,通信会受到SSL保护,从此处开始进行应用层协议的通信,即发送http请求
步骤十一:应用层协议通信,即发送HTTP响应
以上是关于HTTPS和HTTP的详解的主要内容,如果未能解决你的问题,请参考以下文章