• 软件测试常见网络相关面试题


    什么是HTTP

    超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。-- 摘自维基百科

    超文本:

    ​ 超文本指不单单是文本,还可以传输图片、音频、视频、文字或者图片上的超链接;

    传输:

    ​ 将超文本(数据包)从一端发送给另一端的过程,通常将发送数据包的一端称为 请求方,接收数据包的一端称为 应答方

    协议:

    ​ 协议是指网络中传递、管理信息的一些规范。即计算机之间相互通信所需要共同遵守的规则。

    HTTP 协议传输内容是明文传输的,没有进行任何加密;

    HTTP 协议是无状态协议,即会话过程中不会记忆会话的双方;

    HTTP 与 HTTPS 的区别

    HTTPS 就是在 HTTP 协议的基础上增加了 SSL/TLS 加密协议。

    为什么需要加 SSL/TLS

    因为 HTTP 是明文传输内容,容易造成所传输的数据被监听(因为会经过多个物理设备节点)或被篡改(中间人攻击

    SSL/TLS 加密的原理:

    HTTPS 解密流程图(来源网络)
    HTTPS 解密流程图(来源网络)
    1. 客户端发起一个请求给服务端;
    2. 服务端生成一对非对称的公钥(pubkey)和私钥(privatekey),然后把公钥附加到一个 CA数字证书 上返回给客户端;
    3. 客户端校验该证书是否合法(通过浏览器内置的厂商根证书等手段校验),然后从证书中提取出公钥(pubkey);
    4. 客户端生成一个随机数(key),然后使用公钥(pubkey)对这个随机数进行加密后发送给服务端;
    5. 服务端利用私钥(privatekey)对收到的随机数密文进行解密得到 key ;
    6. 后续客户端和服务端传输数据使用该 key 进行加密后再传输;

    HTTP 与 HTTPS 的区别:

    1. HTTP 使用的默认端口是 80,HTTPS 使用的是 443;
    2. HTTP 传输数据是明文的,不安全。HTTPS 是加密后传输的(采用非对称加密和对称加密结合的形式);
    3. HTTP 的地址以 http:// 开头,HTTPS 以 https:// 开头;

    GET 与 POST 的区别

    1. get 方法一般用于发起获取资源请求;
    2. post 方法一般用作表单提交,即将数据推送给服务端;
    3. get 方法请求的参数是拼接在 URL 后的,这对用户来说是可见的,容易被窃取也不太安全;
    4. post 方法请求的参数放置在请求体 body 中,用户不可直接查看;
    5. URL 一般有长度限制,所以 get 请求传递的参数不能过多,而 post 没有要求;
    6. get 请求会被浏览器主动缓存(cache),而 post 需要手动设置;
    7. post 在发起请求时,会发送两个 TCP 数据包,第一个先发送 header,等服务端响应 100 的时候,再发送 data;

    Cookie 与 Session 的区别

    1. Cookie 数据存放在客户端, Session 数据存放在服务器上;
    2. Cookie 由于存放在本地,容易被人分析本地的值后进行 Cookie 欺骗;
    3. 单个 Cookie 保存的数据不能超过 4K,浏览器一般有 Cookie 数量限制(浏览器还可以设置禁用 Cookie),Session 没有对存储的数据量进行限制;
    4. 两者的生命周期不一样,浏览器关闭后 Session 就会消失,而 Cookie 会继续存在本地直到过期;

    TCP

    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。-- 摘自维基百科

    TCP 通过三次握手和四次挥手来控制连接的建立和断开。

    三次握手:

    三次握手示意图(来源网络)
    三次握手示意图(来源网络)
    1. 客户端发送一个 SYN(seq=x) 报文给服务器,然后进入 SYN_SEND 状态;
    2. 服务器收到 SYN 报文后,回应一个 SYN(seq=y) ACK(ack=x+1) 报文,然后进入 SYN_RECV 状态;
    3. 客户端收到服务器的 SYN 报文后,再回应一个 ACK(ack=y+1),如此就成功建立连接,并开始传输数据;

    四次挥手:

    四次挥手示意图(来源网络)
    四次挥手示意图(来源网络)

    TCP 连接的断开需要发送4个包,可以由连接的任意一方先发起,以下假设客户端先发起断开。

    1. 客户端发送一个 FIN 包给到服务器,表明自己的数据已经发送完毕,想要断开连接了,客户端进入 FIN_WAIT_1 状态;
    2. 服务器收到客户端的 FIN 包后,发送一个确认包给客户端,表明自己接受了关闭连接的请求,但是有可能还有些数据没有全部发送完,服务器进入 CLOSE_WAIT 状态,客户端收到回复后进入 FIN_WAIT_2 状态;
    3. 服务器准备好了关闭连接,想客户端发送结束连接请求,服务器进入 LAST_ACK 状态;
    4. 客户端收到服务器的关闭请求,发送一个确认包给服务器并进入 TIME_WAIT 状态,服务器收到这个确认包后,关闭连接并进入 CLOSE 状态。

    TCP 的连接为什么是3次握手,为什么不是更多或更少?

    ​ 因为最少要经过3次连接才能确认双方都可正常接收和发送数据,多于3次则无必要。

  • 相关阅读:
    九度OJ 1154:Jungle Roads(丛林路径) (最小生成树)
    九度OJ 1153:括号匹配问题 (DP)
    九度OJ 1152:点菜问题 (01背包、DP)
    九度OJ 1151:位操作练习 (位操作)
    数论——素数算法
    wubi安装ubuntu-12.04.3
    快速FQ
    linux下的软硬链接区别
    死锁问题总结
    windows下用XShell远程ubuntu时连接失败
  • 原文地址:https://www.cnblogs.com/tester-xt/p/12892957.html
Copyright © 2020-2023  润新知