http、https、密码学基础、GET和POST区别

http协议相关:

http协议的特性: http协议是建立在TCP/IP协议之上应用层协议,默认端口为80或者8080。http协议的的特点是无状态,无连接(并不是真的没有连接,而是在请求数据的时候有连接,在数据回来的时候就断开连接,不想tcp那样是一个长连接)

http协议的请求:

利用抓包工具httpwatch可以获取报文,http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分:请求行、请求头、请求体

  • 请求行: 第一行,包含三个信息:请求方式,url,http协议版本对应下面的:GET /books/?sex=man&name=Professional HTTP/1.1
  • 比如下面的GET请求(GET请求和POST请求是http进行通讯的两种不同的方式),在get请求参数如果包含&符号在发送请求时就会被当做参数的分隔符处理,比如请求参数:var url= "xxxx?name=" + "aaa&bbb" 期望的请求参数应该是name = aaa&bbb实际的请求参数会变成 name = aaabbb= 处理方法: 在拼接参数的时候,使用 encodeURIComponent() 进行手动转义。var url= "xxxx?name=" + encodeURIComponent("aaa&bbb")。下面代码是发送http请求后能够获得的数据,
 GET /books/?sex=man&name=Professional HTTP/1.1   //GET是请求方式、/books/?sex=man&name=Professional是url就是进行请求的网址、第三个是http协议的版本Host: www.example.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Connection: Keep-Alive
  • 下面是POST请求:
POST / HTTP/1.1                  //POST是请求方式Host: www.example.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Content-Type: application/x-www-form-urlencodedContent-Length: 40Connection: Keep-Alivesex=man&name=Professional
  • GET请求和POST请求的区别: url可见性:get,参数url可见;post,url参数不可见。 数据传输上:get,通过拼接url进行传递参数;post,通过body体传输参数。 缓存性:get请求是可以缓存的,post请求不可以缓存。 后退页面的反应:get请求页面后退时,不产生影响,post请求页面后退时,会重新提交请求。 传输数据的大小:get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大),post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。 安全性:这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。
    本质区别: GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(200是状态码,服务器返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

  • 请求头: 浏览器向服务器发送一些状态数据,标识数据等等。一个信息一行,包括信息名:信息值 按行分隔,注意: 请求头信息,需要使用一个空行结束!

User-Agent: firefox//表示发送请求的浏览器(请求代理端)是firefox
Host: shop.100.com//表示请求的主机域名(基于域名的虚拟主机就是靠这个头判断的)
Cookie:name=itcast//浏览器携带的cookie数据。
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
  • 请求主体: 请求代理端向服务器端,发送的请求数据!典型的就是POST形式发送的表单数据!get请求,没有请求主体部分!get数据是在请求行中的url上进行传递的!

http协议的响应:
响应包括:响应行、响应头、响应体。注意: 每行,包括相应行和响应头,都需要一个 \r\n结尾

HTTP/1.1 200 0K
Date: Tue,19 Nov 2013 03:08:55 GMT
Server: Apache/2. 2.22 (Win32) PHP/5.3. 13
X- -Powered -By: PHP/5. 3.13
Content-Length: 16
Content- Type: text/html
  • 响应行: 响应行包括:协议版本、状态码、状态消息。典型的状态码:1xx:消息、2xx:成功、3xx:请求被重定向、4xx:浏览器端错误、5xx:服务器端错误。比如:500 服务器内部错误、404 请求的页面没有找到、403 没有权限、200 请求成功。
  • 响应头: Content-Type: text/html 内容类型,告知浏览器接下来发送的响应主体数据是什么格式!Content-Length: 响应主体数据的长度!Date: 响应的时间。GMT时间!
  • 响应主体: 主要的响应数据,在浏览器的主体区域显示的数据都是相应主体!

https协议:
http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。https协议是在http和tcp之间多添加了一层,进行身份验证和数据加密。

  • HTTPS 原理:
  • ① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器
    ② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;
    ③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器。
    ④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥(参考 DH密钥交换算法);
    ⑤ 客户端将所有握手消息的 MAC 值发送给服务器 ;
    ⑥ 服务器将所有握手消息的 MAC 值发送给客户端

密码学基础:

  • 明文: 明文指的是未被加密过的原始数据。
  • 密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
  • 密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。
  • 对称加密:对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
    其加密过程如下:明文 + 加密算法 + 私钥 => 密文
    解密过程如下: 密文 + 解密算法 + 私钥 => 明文
  • 对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。 其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
  • 非对称加密:非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
  • 被公钥加密过的密文只能被私钥解密, 过程如下:
    明文 + 加密算法 + 公钥 => 密文
    密文 + 解密算法 + 私钥 => 明文
    被私钥加密过的密文只能被公钥解密,过程如下:
    明文 + 加密算法 + 私钥 => 密文
    密文 + 解密算法 + 公钥 => 明文
  • 由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。 非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。 在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。

参考博文:http

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache 配置文件内使用 8080 端口_【SpringBoot 框架】- SpringBoot 配置文件

一、SpringBoot配置文件类型SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话 ,就可以自己编写配置文件进行相应配置,起步依赖spring-boot-starter-parent 中,有配置文件的引入…

Linux中while循环的用法笔记

Shell中可以采用while循环来实现需要进行循环的操作。 语法结构如下: while exp do command done 执行过程:while将测试exp的返回值,如果返回值为true则执行循环体的命令,返回值为false则不执行循环。循环完成后会进入下一次循环之…

IOS9.0 导航栏状态栏

状态栏高度20px 竖屏是导航栏高度44px 横屏时导航栏高度32px 获取当前屏幕状态:UIApplication.sharedApplication().statusBarOrientation转载于:https://www.cnblogs.com/iOSboyYang/p/5328886.html

libcurl库的安装和使用

libcurl简介: libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。li…

android 微信缩小通话界面_安卓如何做出微信那样的界面仿微信“我”的界面2/5...

本系列目标通过安卓编程仿写微信“我”的界面,让大家也能做出类似微信界面.效果图如下:本文目标做出支付部分(其他部分在后续文章中逐步分享).效果图如下:实现方案通过截图工具或者下载一张微信支付照片,放到工程的src/main/res/drawable目录下,命名为pay.png;同样获取一张向右…

Shell脚本中函数的定义和调用笔记

Shell脚本函数的作用主要是把一些可以通用的功能封装起来、避免脚本中出现大量重复的脚本代码,同时可以大大增强脚本的可读性、和可维护性。Shell函数定义的语法格式:function FUNCTION_NAME(){command1command2command3}也可以省略function 关键字FUNCT…

opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境

接着上一节人工智能翔云平台介绍: 人工智能OCR识别: OCR 是英文Optical Character Recognition的缩写,意思是光学字符识别,也可简单地称为文字识别,是文字自动输入的一种方法。它通过 扫描 和摄像等光学输入方式获取纸…

apache 设置禁止访问某些文件或目录

【apache配置禁止访问】1. 禁止访问某些文件/目录增加Files选项来控制&#xff0c;比如要不允许访问 .inc 扩展名的文件&#xff0c;保护php类库&#xff1a;<Files ~ "\.inc$">Order allow,denyDeny from all</Files>禁止访问某些指定的目录&#xff1a…

Shell脚本中函数返回值的用法笔记

函数的返回值又可以称为函数的退出状态&#xff0c;实际上可以理解为一种通信方式。Shell脚本中函数可以使用返回值的方式把调用的结果信息反馈给调用者。便于调用者可以根据反馈的结果做相应处理。说明&#xff1a;函数的返回值主要使用 return 关键字来处理。这和很多编程语言…

python 怎么取对数_概率矩阵分解(PMF)及MovieLens上的Python代码

首先对Probabilistic Matrix Factorization这篇论文的核心公式进行讲解和推导&#xff1b;然后用Python代码在Movielens数据集上进行测试实验。一、 背景知识文中作者提到&#xff0c;传统的协同过滤算法有两个不足&#xff1a;1).不能很好地处理规模非常大的数据&#xff1b;2…

JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)

运行第一个JAVA程序&#xff1a; 这里使用的开发环境是eclipse&#xff0c;新建一个java工程&#xff0c;然后可以看到src这个是存放java代码的地方&#xff0c;然后在src文件右击新建一个class&#xff08;类&#xff09;&#xff0c;然后可以看到下图&#xff0c;同样和C语言…

unity中如何解决镜头穿透模型?

设置相机的Near clip plane,调小一点,但是不要给负数就行。 转载于:https://www.cnblogs.com/ZeroMurder/p/5331174.html

Shell脚本中函数位置参数的用法笔记

位置参数主要是用于调用函数的时候有时候需要传递参数&#xff0c;有很大的比例都是需要调用函数的时候动态传递参数&#xff0c;从而实现相应的功能。比如我想要计算两个数的和&#xff0c;可以通过函数是实现&#xff0c;需要定义两个参数作为计算的值。这样的计算两个数的函…

生鲜配送小程序源码_生鲜社区团购配送系统小程序源码搭建平台模式

生鲜配送系统开发&#xff0c;找【金生157威6875店2419同号】生鲜配送模式开发&#xff0c;生鲜配送软件开发&#xff0c;生鲜配送APP开发&#xff0c;生鲜配送平台开发平台&#xff0c;生鲜配送系统源码开发平台&#xff0c;生鲜配送系统平台&#xff0c;生鲜配送系统定制开发…

软件开发的早期为何要进行可行性研究?该从哪几个方面研究目标系统的可行性?...

因为并非任何问题都有简单明显的解决办法&#xff0c;很多问题不可能在预定的系统规模或者时间期限内解决。如果问题没有可行的解决方案&#xff0c;那么花费在这工程上的任何时间人力经费等资源都是浪费。。 一般来说&#xff0c;至少应该从如下3个方面研究其可行性&#xff1…

继承的概念和实现 、 super关键字 、 Object常见方法、抽象类、接口、模板方法模式、成员内部类、匿名内部类

这篇博客将会涉及到&#xff1a; 继承的概念和实现super关键字方法重写—OverrideObject常见方法 继承的概念&#xff1a; 生活中&#xff0c;继承的概念随处可见&#xff0c;继承需要符合的关系&#xff1a;is-a&#xff1b;父类更通用、子类更特殊更具体。就比如说&#x…