http和https

Posted studying~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http和https相关的知识,希望对你有一定的参考价值。

一、http协议的特性

HTTP协议:超文本传输协议,是基于TCP的应用层协议,它规定了浏览器和服务器通信的规则
特点:
1、支持C/S架构
2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径 ,常用方法:GET、POST
3、无连接:每次连接只能处理一个请求
4、无状态:连接之间无论数据传输失败都不会重传
5、默认端口为80 or 8080

二、http协议的请求

http协议的报文传输的是ASCII码,主要主要分为三部分:
请求行、请求头、请求体

请求行:第一行,包含三个信息:请求方式,url,http协议版本;

请求头

  • 浏览器向服务器发送一些状态数据,标识数据等等;
  • 一个信息一行,包括信息名:信息值 ,按行来分隔;

请求主体

  • 请求代理端向服务器端,发送的请求数据;
  • 典型的就是POST形式发送的表单数据,具体看下方POST请求的请求体
  • get请求,没有请求主体!get数据是在请求行中的url上进行传递的!

GET 请求

 /*	第一行为请求行	*/
 GET /books/?sex=man&name=Professional HTTP/1.1     
 /*	以下全是请求头	*/
 Host: www.example.com
 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
 Gecko/20050225 Firefox/1.0.1
 Connection: Keep-Alive														

POST 请求

 /*	第一行为请求行	*/
 POST / HTTP/1.1
 /*	以下内容是请求头	*/
 Host: www.example.com
 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
 Gecko/20050225 Firefox/1.0.1
 Content-Type: application/x-www-form-urlencoded
 Content-Length: 40
 Connection: Keep-Alive
 /*	以下内容是请求体	*/
 sex=man&name=Professional 

两种请求方法的区别
1、url可见性:

get,参数url可见;

post,url参数不可见

2、数据传输上:

get,通过拼接url进行传递参数;

post,通过请求体传输参数

3、缓存性:

get请求是可以缓存的

post请求不可以缓存

4、后退页面的反应

get请求页面后退时,不产生影响

post请求页面后退时,会重新提交请求

5、传输数据的大小

get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)

post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。

6、安全性

这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。

本质区别:

GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

三、http协议的响应

响应包括:第一行,响应行、响应头、响应体

/*	以下一行是响应行	*/
HTTP/1.1 200
/*	以下内容是响应头	*/
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
/*	响应主体作为数据传回浏览器,显示页面	*/

响应行:第一行包括协议版本、状态码、状态消息

典型的状态码

  • 500 服务器内部错误
  • 404 请求的页面没有找到
  • 403 没有权限
  • 200 请求成功

响应主体:主要的响应数据,在浏览器的主体区域显示的数据都是相应主体!
(简单理解就是服务器传回的数据,即网页的html源代码)

响应头:

  • Content-Type: text/html 内容类型,告知浏览器接下来发送的响应主体数据是什么格式!
  • Content-Length: 响应主体数据的长度!
  • Date: 服务器响应的时间。

注意,每行,包括响应行和响应头,都需要一个 \\r\\n结尾

四、 https的简介

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

密码学基础
明文: 明文指的是“未被加密”过的原始数据,比如你敲过的代码。
密文:明文通过加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。

对称加密:对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
其加密过程如下:明文 + 加密算法 + 私钥 => 密文
解密过程如下: 密文 + 解密算法 + 私钥 => 明文

对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。

非对称加密:非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
被私钥加密过的密文只能被公钥解密,过程如下:
明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文

由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。

转载博文:https://www.cnblogs.com/xietianjiao/p/13260021.html

以上是关于http和https的主要内容,如果未能解决你的问题,请参考以下文章

HTTPS知识点总结

实体和编码

HTTP图解3-HTTP报文内的HTTP信息

(chap 3 Http报文内的http信息) 编码提升传输速率

读《图解HTTP》有感-(确保WEB安全的HTTPS)

http https相关