http协议的特性
①http协议是建立在TCP/IP协议之上应用层协议,默认端口为80,8080
②http协议的的特点是数据交互时才连接,其余时间都处于断开状态。
http协议的请求
http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分:请求行、请求头、请求内容
理解get和post两种请求方法的区别——GET(完整请求一个资源)、POST(提交表单)
GET 请求:
当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号‘?’代表URL的结尾与请求参数的开始,传递参数长度受限制。
例如,/index.jsp?id=100&op=bind。通过GET方式传递的数据直接放在地址中,所以GET方式的请求一般不包含“请求内容”部分,请求数据以地址的形式表现在请求行。地址中‘?’之后的部分就是通过GET发送的请求数据,各个数据之间用‘&’符号隔开。显然这种方式不适合传送私密数据。另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。如果数据是英文字母/数字,原样发送;如果是空格,转换为‘+’;如果是中文/其他字符,则直接把字符串用BASE64加密,得出:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
POST请求
允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中(URL不带参数)。POST方式请求行中不包含数据字符串,这些数据保存在“请求内容”部分,各数据之间也是使用‘&’符号隔开。POST方式大多用于页面的表单中。因为POST也能完成GET的功能,因此多数人在设计表单的时候一律都使用POST方式,其实这是一个误区。GET方式也有自己的特点和优势,我们应该根据不同的情况来选择是使用GET还是使用POST。
请求行
请求行分为三个部分:请求方法、请求地址URL和HTTP协议版本,它们之间用空格分割。例如,GET /index.html HTTP/1.1
URL
请求头
浏览器向服务器发送一些状态数据,标识数据等等
由“信息名:+信息值”组成一对,每行一对,信息名和信息值之间使用冒号分隔。
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据。
请求数据
是代理端向服务器发送的请求数据
POST方式有请求数据,就是把GET方式的URL中的参数作为请求数据。所以POST方法中请求行的URL是不带参数的
POST和GET的区别
- 参数位置(url可见性):
get,url参数可见; post,url参数不可见
当不携带参数的时候,两者最大的区别为第一行方法名不同:
POST /uri HTTP/1.1
GET /uri HTTP/1.1
当携带参数的时候,我们都知道 GET 请求是放在 url 中,POST 则放在 body 中 :
GET 方法简约版报文
GET /index.html?name=qiming.c&age=22 HTTP/1.1
Host: localhost
POST 方法简约版报文
POST /index.html HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length:25
name=qiming.c&age=22
一般post会比get多两个请求头:Content-Length和Content-Type
- 数据传输上:
get,通过拼接url进行传递参数;
post,通过body体(请求内容)传输参数
- 缓存性:
get请求是可以缓存的
post请求不可以缓存
- 后退页面的反应
get请求页面后退时,不产生影响
post请求页面后退时,会重新提交请求
- 传输数据的大小
get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。
- 安全性
这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。
只有使用 HTTPS 才能加密安全
本质区别:
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 OK(返回数据)。
http协议的响应
响应包括:响应行、响应头、响应体(响应数据)
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
“响应体”
响应行
状态行由3部分组成,分别为:协议版本、状态码、状态消息。其中协议版本与请求报文一致,状态消息是对状态码的简单描述。
典型的:
1xx:消息 Continue
2xx:成功 OK
3xx:请求被重定向
4xx:浏览器端错误
5xx:服务器端错误
典型:
500 服务器内部错误
404 请求的页面没有找到
403 没有权限
200 请求成功
响应头
Content-Type: text/html 内容类型,告知浏览器接下来发送的响应主体数据是什么格式
Content-Length: 响应主体数据的长度
Date:当前的时间
Server:服务器名称
Set-Cookie:设置与页面关联的Cookie
响应体
①响应头之后紧跟着一个空行,然后接响应体。
②响应体就是Web服务器发送到客户端的实际内容。
注意:每行,包括相应行和响应头,都需要一个 \r\n结尾(需要换行)
https
简介:
http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。
https协议是在http和tcp之间多添加了一层,进行身份验证和数据加密。
密码学基础
明文: 明文指的是未被加密过的原始数据。
密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。
对称加密:
对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密。
常见的对称加密算法有DES、RC5。
加密过程如下:明文 + 加密算法 + 私钥 ===> 密文
解密过程如下: 密文 + 解密算法 + 私钥 ===> 明文
对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
非对称加密
非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。 私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
被私钥加密过的密文只能被公钥解密,过程如下:
明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:RSA等(调库完成)