分布式系列四: HTTP及HTTPS协议

非常全面的一篇HTTP的文章: 关于HTTP协议,一篇就够了

还有一个帮助理解HTTPS的文章: 也许,这样理解HTTPS更容易 本文的一些描述摘自这篇文章

HTTP协议

Http(HyperText Transfer Protocol 超文本传输协议)协议定义了客户端和服务器端信息传输的标准. 是基于TCP协议上的一种网络协议.

由于其简捷、快速的方式,适用于分布式超媒体信息系统.

特点

  1. 简单快速: 只需要传输请求方法和路径;
  2. 灵活: MEMI可以指定传输对象的类型, Content-Type标记
  3. 无连接
  4. 无状态

URI(Uniform Resource Identifiers)和URL(Uniform Resource Locator)

URL: 统一资源定位符, 网络上资源的唯一标识. 长得类似这个样子 sheme://host.com:port/path/index.html?query-string=val#anchor
包含协议,域名主机地址,端口,虚拟路径,资源文件,请求参数,锚点

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

在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。
在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。
相反的是,URL类可以打开一个到达资源的流。

MIME(Multipurpose Internet Mail Extensions)

最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
MIME意为多功能Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。

方法

  • get
  • post
  • delete
  • put
  • head

报文(Request和Response)

  • 起始行(状态行)
  • 头部字段
  • 主体

一个Request的报文示例如下:

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: https://www.baidu.com/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: BIDUPSID=670A04B660AAF2716D3120BEAF946A11; BAIDUID=2454D4....
RA-Ver: 3.0.8
RA-Sid: CA623F7A-20150914-060054-2b9722-5fde41q=xkxk

一个Response的报文示例如下:

HTTP/1.1 200 OK
Date: Tue, 18 Sep 2018 07:38:57 GMT
Server: suggestion.baidu.zbb.df
Content-Length: 129
Content-Type: text/javascript; charset=UTF-8
Cache-Control: private
Expires: Tue, 18 Sep 2018 08:38:57 GMT
Content-Encoding: gzip
Proxy-Connection: Keep-alive["http baow",["http 报文格式","http 报文","http 报文 长度","http报文结构","http 报文 文件","http 报文拦截","http 报文体乱码","http报文解析","http 报文大小","http 报文定义"]]

状态码

  • 1xx 提示信息
  • 2xx 成功
  • 3xx 重定向
  • 4xx 客户端错误
  • 5xx 服务端错误

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)

  • SSL/TLS
  • 对称加密和非对称加密

    对称加密是一个密钥能同时对内容进行加解密;
    非对称加密是需要生成一对公私钥, 私钥加密的内容公钥可以解密, 但公钥加密的内容只能是私钥进行解密. 所有私钥一般存储在服务端.

HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

下面是网络上找的一张图,原文点这里

参照上图可以更方便理解整个过程:

逆推的流程如下:

  1. 客户端/服务器最终使用对称加密算法生成的密钥D通信
  2. D由客户端生成(三次随机数加密生成,此时生成第三个随机数), 并通过服务端的非对称公钥P加密传输给服务端
  3. 公钥P从服务端的传递给客户端的证书中获得, 证书的内容包括: CA机构,证书本身的数字签名,公钥,签名算法
  4. 证书是三方CA机构提供给服务端的, 证书通过CA的私钥CAS进行加密
  5. 客户端会保存一份CA的根证书, 其中有CA的公钥CAP
  6. 接第三步, 客户端使用CAP验证证书合法性,并得到解密后的公钥P
  7. 服务端收到客户端请求并生成随机数(第二个随机数),发送给客户端
  8. 客户端发起请求, 内容包括生成的随机数(第一个随机数),加密算法

转载于:https://www.cnblogs.com/walkinhalo/p/9669340.html

分布式系列四: HTTP及HTTPS协议相关推荐

  1. 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果  二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现- ...

  2. 网络安全系列-四十五: DNS协议详细讲解

    本文针对DNS相关的概念.协议报文结构 及如何抓取DNS报文进行介绍,让你理解DNS协议.DNS的查询方式及报文结构. DNS介绍 DNS是一套分布式的域名服务系统.每个DNS服务器上都存放着大量的机 ...

  3. freeswitch系列四 通过实例学习sip协议的注册、呼叫、挂断流程

    1. 概述 本文通过tcpdump对真实环境里的软电话的注册.呼叫.挂断流程进行抓包,通过真实的例子学习SIP协议.本文主要包括以下方面: A. 详解软电话的注册时的SIP包和流程图 B. 详解软电话 ...

  4. 计算机网络协议(四)——HTTP、HTTPS、P2P协议

    底层网络知识详解:最常用的应用层 概述 一.HTTP协议 1.1.HTTP 1.1 1.2.HTTP 2.0 1.3 QUIC协议 二.HTTPS协议 三.P2P协议 概述 这个专栏的计算机网络协议, ...

  5. Spring Cloud Alibaba系列四:集成 seata 实现分布式事务

    文章目录 Spring Cloud Alibaba系列四:集成 seata 实现分布式事务 前言 Seata 是什么? Seata 术语 安装 seata 1.创建 seata 数据库,并添加对应的表 ...

  6. .NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

    前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉,小伙伴们都等得想取关 ...

  7. 一篇文章为你深度解析HTTPS 协议

    一.前言 微信小程序如期发布,开发者在接入微信小程序过程中,会遇到以下问题: 小程序要求必须通过 HTTPS 完成与服务端通信,若开发者选择自行搭建 HTTPS 服务,那需要自行 SSL 证书申请.部 ...

  8. 应用层协议:HTTP与HTTPS协议详解、二者的区别

    http协议详解 1.HTTP协议:超文本传输协议 是一种分布式.合作式.多媒体信息系统服务,面向应用层的协议.是一种通用的,不分状态的协议.是一种请求/应答协议. 1.1.HTTP/1.0和HTTP ...

  9. 网络(9)-HTTPS协议

    一.HTTPS的概念 HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础 ...

最新文章

  1. 简述Field,Attribute,Property的区别
  2. python使用什么注释语句和运算-Python中的注释符有哪几种?( )
  3. [MySQL] MySQL的自己主动化安装部署
  4. (chap5 web服务器) 数据转发之“网关和隧道”
  5. Ansible批量管理与维护
  6. 关于lvalue and rvalue
  7. linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...
  8. 串口之GetCommTimeouts、SetCommTimeouts函数详解
  9. zafu 1461 (DP)
  10. Spring的Bean属性依赖注入
  11. 判断服务器是虚拟机还是物理机方式
  12. 一个很方便使用十六进制的颜色值的宏
  13. Spinner的简单实用
  14. DEA博弈交叉效率matlab,基于博弈交叉效率DEA模型的服务模块化创新绩效测量—以江西省文化创意产业为例...
  15. 5个AIDA64激活密钥
  16. 黑苹果(Hackintosh)驱动Intel HD 4600
  17. 计算机页面格式和编排,论文开题格式
  18. 《三体3:死神永生》读后感
  19. 那些让我印象深刻的五个bug
  20. HTML用画布画哆啦A梦,前端小项目:使用canvas绘画哆啦A梦

热门文章

  1. SAP成都研究院廖婧:SAP C4C社交媒体集成概述
  2. SAP CRM 产品主数据和附件(Attachment)的模型关系
  3. SAPGUI里实现自定义的语法检查
  4. python如何删除代码_Python如何删除除字母和数字之外的所有字符?(代码示例)
  5. oracledatabase11gr2怎么打开_win10 安装oracle 11gR2_database(内附下载地址)
  6. oracle4.0,OracleTM Application Server 4.0简 介
  7. 禁用内存清理_win10电脑开机内存占用高达80%以上如何解决
  8. key位置 win10生成的ssh_Git实现ssh免密登录
  9. java byte转换成string_Java byte []到/从String转换
  10. html调用deeplink,如何优雅地从浏览器打开本地应用deeplink