计算机网络相关

http与https

http

http状态码

1
2
3
4
5
1xx: 指示信息,表示请求已接受,继续处理。
2xx: 成功,表示请求已被成功接收、理解、接受。
3xx: 重定向,要完成请求必须进行更近一步的操作。
4xx: 客户端错误,请求有语法错误或无法请求。
5xx: 服务器错误,服务器未能实现合法的请求。
1
2
3
4
5
6
7
200 OK // 客户端请求成功
400 Bad Reqquest // 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized // 请求未授权
403 Forbidden // 服务器收到请求,但决绝提供服务
404 Not Found // 请求资源不存在
500 Internal Sever Error // 服务器发生不可预期的错误
503 Server Unvaliable // 服务器不能处理客户端请求,一段时间后可能回复正常

什么是协议

两台计算机之间进行通信必须遵守的规则。

URL

统一资源定位符,标志网络上某一个资源的位置。

请求消息组成(request)

  • 请求行
1
2
3
4
5
6
7
GET http://www.cnblogs.com/ HTTP/1.1
||
method uri http -v
method:请求方法
uri:要求访问的资源对象
http-v: http版本
  • 消息报头
1
2
3
4
5
6
7
8
9
10
Host: www.someschool.edu // 被请求资源的主机和端口号,通常从HTTP的URL中提取出来
Connection: close // 连接状态
User-agent: Mozilla/5.0 // 浏览器版本和名称
Accept: text/html // 浏览器可以接受的媒体类型,这里指可以接受html文档
Accept-language: fr // 客户端接受的语言类型
Accept-Encoding: gzip // 浏览器可以接受的编码方式
cache-control: no-cache // 指定遵循的缓存机制,no-cache表示所有内容都不会被缓存
cookie: // 存放在cookie中的相应内容
Content-Length: 60 // 发送个服务器的数据长度
Content-Type: application/x-www-form-urlencoded
  • 空行
  • 请求正文

get请求没有请求正文

响应消息组成(response)

  • 响应行
1
2
3
HTTP/1.1 200 ok
HTTP版本 + 状态码 + 状态消息
  • 响应头
1
2
3
4
5
6
7
8
Connection: close // 连接状态
Date: Tue, 09 Aug 2011 15:44:04 GMT // 消息生成的具体时间
Server: Apache/2.2.3(CentOS) // 服务器名称
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT // 最近一次修改时间
Conten-Length: 6821 // 响应消息长度
Expires: Date:Sat,11 Feb 2012 11:35:14 GMT // 缓存过期时间
Content-Type: text/html
Set-Cookie: sc=4c31223a;path=/;domain=.acookie.taobao.com // 用于把cookie发送给浏览器
  • 空行
  • 响应正文

https

加密算法

对称加密:加密和解密使用相同的加密算法,加密秘钥可以从解密秘钥中推算出来,解密秘钥也可以从加密秘钥中推算出来。在大多数堆成加密中,加密秘钥和解密密钥相同,所以也叫作单密钥算法。加密和解密使用同一个密钥。

非对称加密:需要两个密钥,一个是公开的,一个是私有的。加密解密使用不同的密钥。

摘要算法:数字摘要采用单项hash函数将需要加密的明文摘要成一串固定长度的密文。这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。“数字摘要“是https能确保数据完整性和防篡改的根本原因。

数字签名:是非对称密钥加解密和数字摘要算法的一种应用,发送者将明文通过hash函数来生成摘要信息,再用私钥进行加密生成数字签名,将这个数字签名和原文一起发送给服务器。服务器将接收到的数字签名利用发送者提供的公钥进行解密,得到一个摘要信息,再将收到的原文利用hash函数生成摘要,与前一个摘要进行比较。如果两个摘要相同,那么收到的信息是完整的,发送过程中没有被修改。

明文 -> hash函数 -> 摘要信息 -> 私钥加密 -> 数字签名

数字签名的作用:

1、能确定信息是由正确的发送者签名发送出来的,因为被人冒充不了发送者的签名。

2、确定消息的完整性。

SSL/TLS

SSL:用以保障数据在网络上安全传输。利用数据加密技术,可以保证数据在网络上传输不会被截取。

SSL/TLS作用:

1、认证用户和服务器,确保数据发送到正确的客户机和服务器;

2、加密数据以防止数据中途被窃取;

3、维护数据的完整性,确保数据在传输过程中不被修改。

https机制流程

(1)客户端请求建立连接;

(2)服务器将SSL证书发送给客户端。

(3)客户端首先对证书的所有者和有效期限等信息进行校验,浏览器在操作系统中查找内置的可信任的证书发布机构CA。与服务器证书的发布者CA进行比较,用于校验证书是否由合法机构发布。如果不合法,就报错。如果合法,就从操作系统中取出证书颁发者CA的公钥,然后对证书中的签名进行解密。浏览器再使用相同的hash算法对服务器发送的证书进行hash计算。与解密后的信息进行比较。如果一致,则SSL证书合法。

(4)然后客户端利用公钥对采用对称加密这一信息,以及对称加密算法和对称加密秘钥进行加密后传给服务器。

(5)服务器收到信息后采用私钥解密,提取出对称加密算法和对称秘钥后,回复客户端。

(6)然后它们就遵守指定的对称加密算法进行信息传输。

http和https的区别

1、http传输是明文传输,无法验证客户端和服务器的身份,是不安全的,很容易遭到攻击。但https中所有传输信息都经过对称加密,SSL本身使用非对称加密,可以有效地防止攻击。

2、http协议运行在TCP上,https运行在TLS/SSL上,TLS/SSL运行在TCP上。

3、http的默认端口为80,https的默认端口为443。

TCP三次握手四次握手

握手:

1、客户端发送SYN数据包给服务器,请求连接。

2、服务器收到SYN数据包后,回传SYN/ACK数据包,以表示已经收到了请求。

3、客户端发送ACK,以表示握手结束。

挥手:

1、客户端发送FIN数据包给服务器,请求断开连接。

2、服务器收到FIN数据包,回复ACK数据包给客户端。

3、当服务器数据传输结束后,传送FIN数据包给客户端,表示可以断开连接了。

4、客户端回复ACK数据包,告诉服务器已经知道可以断开了。

AJAX工作原理

通过创建XmlHttpRequest对象向服务器发送异步请求,从服务器获取数据,然后使用js来操作DOM更新页面的数据。