计算机网络常见问题(2)—— 应用层:HTTP和HTTPS

HTTP和HTTPS有什么区别?

  1. 端口不同:HTTP使用的是80端口,HTTPS使用443端口;
  2. HTTP(超文本传输协议)信息是明文传输,HTTPS运行在SSL(Secure Socket Layer)之上,添加了加密和认证机制,更加安全;
  3. HTTPS由于加密解密会带来更大的CPU和内存开销;
  4. HTTPS通信需要证书,一般需要向证书颁发机构(CA)购买
Https的连接过程?
  1. 客户端向服务器发送请求,同时发送客户端支持的一套加密规则(包括对称加密、非对称加密、摘要算法);
  2. 服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥(用于非对称加密),以及证书的颁发机构等信息(证书中的私钥只能用于服务器端进行解密);
  3. 客户端验证服务器的合法性,包括:证书是否过期,CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配;
  4. 如果证书受信任,或者用户接收了不受信任的证书,浏览器会生成一个随机**(用于对称算法),并用服务器提供的公钥加密(采用非对称算法对**加密);使用Hash算法对握手消息进行摘要计算,并对摘要使用之前产生的**加密(对称算法);将加密后的随机**和摘要一起发送给服务器;
  5. 服务器使用自己的私钥解密,得到对称加密的**,用这个**解密出Hash摘要值,并验证握手消息是否一致;如果一致,服务器使用对称加密的**加密握手消息发给浏览器;
  6. 浏览器解密并验证摘要,若一致,则握手结束。之后的数据传送都使用对称加密的**进行加密

总结:非对称加密算法用于在握手过程中加密生成的密码;对称加密算法用于对真正传输的数据进行加密;HASH算法用于验证数据的完整性。

输入 www.baidu.com,怎么变成 https://www.baidu.com 的,怎么确定用HTTP还是HTTPS?

你访问的网站是如何自动切换到 HTTPS 的?

一种是原始的302跳转,服务器把所有的HTTp流量跳转到HTTPS。但这样有一个漏洞,就是中间人可能在第一次访问站点的时候就劫持。
解决方法是引入HSTS机制,用户浏览器在访问站点的时候强制使用HTTPS。

什么是对称加密、非对称加密?区别是什么?
  • 对称加密:加密和解密采用相同的**。如:DES、RC2、RC4
  • 非对称加密:需要两个**:公钥和私钥。如果用公钥加密,需要用私钥才能解密。如:RSA
  • 区别:对称加密速度更快,通常用于大量数据的加密;非对称加密安全性更高(不需要传送私钥)
数字签名、报文摘要的原理
  • 发送者A用私钥进行签名,接收者B用公钥验证签名。因为除A外没有人有私钥,所以B相信签名是来自A。A不可抵赖,B也不能伪造报文。
  • 摘要算法:MD5、SHA

GET与POST的区别?

  1. GET是幂等的,即读取同一个资源,总是得到相同的数据,POST不是幂等的;
  2. GET一般用于从服务器获取资源,而POST有可能改变服务器上的资源;
  3. 请求形式上:GET请求的数据附在URL之后,在HTTP请求头中;POST请求的数据在请求体中;
  4. 安全性:GET请求可被缓存、收藏、保留到历史记录,且其请求数据明文出现在URL中。POST的参数不会被保存,安全性相对较高;
  5. GET只允许ASCII字符,POST对数据类型没有要求,也允许二进制数据;
  6. GET的长度有限制(操作系统或者浏览器),而POST数据大小无限制

Session与Cookie的区别?

Session是服务器端保持状态的方案,Cookie是客户端保持状态的方案

Cookie保存在客户端本地,客户端请求服务器时会将Cookie一起提交;Session保存在服务端,通过检索Sessionid查看状态。保存Sessionid的方式可以采用Cookie,如果禁用了Cookie,可以使用URL重写机制(把会话ID保存在URL中)。

从输入网址到获得页面的过程 (越详细越好)?

  1. 浏览器查询 DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
  2. 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
  3. TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
  4. 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
  5. 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;
  6. 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

HTTP请求有哪些常见状态码?

  1. 2xx状态码:操作成功。200 OK
  2. 3xx状态码:重定向。301 永久重定向;302暂时重定向
  3. 4xx状态码:客户端错误。400 Bad Request;401 Unauthorized;403 Forbidden;404 Not Found;
  4. 5xx状态码:服务端错误。500服务器内部错误;501服务不可用

计算机网络体系结构

计算机网络常见问题(2)—— 应用层:HTTP和HTTPS

  • Physical, Data Link, Network, Transport, Application
  • 应用层:常见协议:
    • FTP(21端口):文件传输协议
    • SSH(22端口):远程登陆
    • TELNET(23端口):远程登录
    • SMTP(25端口):发送邮件
    • POP3(110端口):接收邮件
    • HTTP(80端口):超文本传输协议
    • DNS(53端口):运行在UDP上,域名解析服务
  • 传输层:TCP/UDP
  • 网络层:IP、ARP、NAT、RIP…
路由器、交换机位于哪一层?
  • 路由器网络层,根据IP地址进行寻址;
  • 交换机数据链路层,根据MAC地址进行寻址