分布式系列四: HTTP及HTTPS协议
分布式系列四: HTTP及HTTPS协议
非常全面的一篇HTTP的文章: 关于HTTP协议,一篇就够了
还有一个帮助理解HTTPS的文章: 也许,这样理解HTTPS更容易 本文的一些描述摘自这篇文章
HTTP协议
Http(HyperText Transfer Protocol 超文本传输协议)协议定义了客户端和服务器端信息传输的标准. 是基于TCP协议上的一种网络协议.
由于其简捷、快速的方式,适用于分布式超媒体信息系统.
特点
- 简单快速: 只需要传输请求方法和路径;
- 灵活: MEMI可以指定传输对象的类型, Content-Type标记
- 无连接
- 无状态
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-5fde41 q=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要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。
下面是网络上找的一张图,原文点这里
参照上图可以更方便理解整个过程:
逆推的流程如下:
- 客户端/服务器最终使用对称加密算法生成的密钥D通信
- D由客户端生成(三次随机数加密生成,此时生成第三个随机数), 并通过服务端的非对称公钥P加密传输给服务端
- 公钥P从服务端的传递给客户端的证书中获得, 证书的内容包括: CA机构,证书本身的数字签名,公钥,签名算法
- 证书是三方CA机构提供给服务端的, 证书通过CA的私钥CAS进行加密
- 客户端会保存一份CA的根证书, 其中有CA的公钥CAP
- 接第三步, 客户端使用CAP验证证书合法性,并得到解密后的公钥P
- 服务端收到客户端请求并生成随机数(第二个随机数),发送给客户端
- 客户端发起请求, 内容包括生成的随机数(第一个随机数),加密算法
分布式系列四: HTTP及HTTPS协议的更多相关文章
- Linux服务之nginx服务篇四(配置https协议访问)
一.配置nginx支持https协议访问 编译安装nginx的时候需要添加相应的模块--with-http_ssl_module和--with-http_gzip_static_module(可通过/ ...
- 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享
一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...
- Charles PC端和手机端抓取HTTP和HTTPS协议请求、HTTPS通用抓包规则
一:HTTP和HTTPS的区别 HTTP是超文本传输协议,被用在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,因此HTTP协议不适合传输一些敏感信息, ...
- 分布式理论系列(三)ZAB 协议
分布式理论系列(三)ZAB 协议 在学习了 Paxos 后,接下来学习 Paxos 在开源软件 Zookeeper 中的应用. 一.Zookeeper Zookeeper 致力于提供一个高性能.高可用 ...
- LoadRunner系列之—-04 录制基于https协议的脚本
实际性能测试过程中,有些需录制脚本的页面或接口是基于https协议的,按原来方法录制脚本,录完了脚本是空的.为解决这个问题,第一步了解https协议的具体实现,这块网上资料很多,可参考页面下方参考资料 ...
- cas系列(三)--HTTP和HTTPS、SSL
(这段时间打算做单点登录,因此研究了一些cas资料并作为一个系列记录下来,一来可能会帮助一些人,二来对我自己所学知识也是一个巩固.) 本文转自異次元藍客点击打开链接 1. HTTPS HTTPS(全 ...
- 一篇文章为你深度解析HTTPS 协议
一.前言 微信小程序如期发布,开发者在接入微信小程序过程中,会遇到以下问题: 小程序要求必须通过 HTTPS 完成与服务端通信,若开发者选择自行搭建 HTTPS 服务,那需要自行 SSL 证书申请.部 ...
- 转:HTTPS 协议
作者简介:罗成 腾讯云资深研发工程师 一.微信小程序接入的困境 农历新年将至,微信小程序也如期发布,开发者在接入微信小程序过程中,会遇到以下问题: 小程序要求必须通过 HTTPS 完成与服务端通信,若 ...
- 分布式系列六: WebService简介
WebSerice盛行的时代已经过去, 这里只是简单介绍下其基本概念, 并用JDK自带的API实现一个简单的服务. WebSerice的概念 WebService是一种跨平台和跨语言的远程调用(RPC ...
随机推荐
- 011_python常用查询
一.获取指定日期的后(前)一(n)天 # coding=utf-8 import datetime #获取今天日期(年-月-日) today = datetime.date.today() #< ...
- Django视图(views)
1.FBV (基于函数的视图) 实例 url.py url(r'^add_publicer/',views.add_publicer) def add_publicer(request): if re ...
- React-关于react的思考
声明式开发 减少dom操作,减少代码量 可以与其他框架并存 组件化开发 单向数据流 视图层框架 大型项目需要与其他数据层框架一起使用 函数式编程 方便自动化测试
- VS2010安装MVC4记录
想学MVC4,但自己电脑上是VS2010,所以在网上查询怎样安装MVC4,总结下给大家. VS2010默认安装的是MVC2,安装MVC4必须先装 SP1,然后安装MVC4. VS2010 SP1 (1 ...
- photoshop快速把新照片制作成老照片教学
原图 步骤1 在photoshop中找开需要处理的图片,Ctrl+J复制图片,得到图片1. 步骤2 单击图层面板底部的创建新的填充或调整图层图标,添加色调/饱和度调整图层.调整它的饱合度和明度. 步骤 ...
- 证明与计算(4): 完美散列函数(Perfect Hash function)
原文:wiki: 完美散列函数 假设,写一个SQL语句解析器,词法分析对SQL语句解析,把语句分成了多个token,一般这个时候会需要查询这个token是否是一个关键字token. 例如keyword ...
- 定位z-index
1.z-index數值大的元素覆蓋數值小的元素,z-index需要在標明定位方式的元素有效: 3.父元素和子元素 ,如果父元素的index有效,子元素覆蓋父元素:但父元素的z-index失效(未設置定 ...
- Android Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency
错误内容: Error:Execution failed for task ':app:preDebugAndroidTestBuild'.> Conflict with dependency ...
- 洛谷 P3327 【[SDOI2015]约数个数和】
前置芝士 关于这个题,你必须知道一个这样奇奇怪怪的式子啊QAQ \[d(i*j)= \sum_{x|i} \sum_{y|j}[gcd(x,y)=1] \] 留坑,先感性理解:后面那个gcd是为了去重 ...
- Day041--CSS, 盒模型, 浮动
内容回顾 表单标签 input type text 普通的文本 password 密码 radio 单选 默认选中添加checked 互斥的效果 给radio标签添加 相同的name checkbo ...