当面试被问到HTTP以后

遇见问题不要慌,首先回答HTTP是什么有什么特点,然后针对它的特点进行解释当然这是被虐以后的感悟。

1、HTTP是什么。
2、HTTP分为两段,客户端和服务器端。
3、请求和相应的报文格式。
4、HTTP底层采用TCP协议进行传输的。
5、HTTP1.1以后是长连接。
6、HTTP是无状态的。
7、使用cookie来进行状态管理。
8、请求步骤。
9、HTTP和HTTPS。
1、HTTP是什么。
1.1 HTTP概念。

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是基于TCP/IP协议族上应用层的实现,在应用层上实现的协议还有FTP(用于文件的传输),DNS(用于解析域名)等。

1.2 HTTP特点。

简单快速:客户端向服务器端传递请求只需要传入请求方式和路径就可以了。

灵活:可以传输任意类型对象,传输的类型可以用Content-Type来标识。

无连接:一次请求即返回一个资源,但是在HTTP1.1默认为长连接,就是一次请求之后不会理解关闭连接通道。

无状态:对事物没有记忆功能后面会详细讲解。

2、HTTP分为两段,客户端和服务器端。

HTTP协议分为两端,客户端和服务器端。服务器端需要一直保持着正常运行等待客户端的请求,针对客户端的请求回应相应的响应数据。

3、请求和相应的报文格式。

这里解释的是HTTP的第一个特点,简单。简单主要体现在报文格式。快速是因为HTTP协议简单,是的HTTP服务的程序规模小,所以速度快。

3.1 HTTP的请求报文


报文格式简单明了,来看一个实际的请求。

3.2 HTTP的响应报文

在这里插入图片描述
不管是请求的报文还是响应的报文都是用空行来标识请求头结束,来区分请求头和请求体。HTTP可以传输任意类型的数据,通过Content-type来做标识,体现出它的灵活性。

4、HTTP底层采用TCP协议进行传输的。

HTTP底层是通过TCP进行传输的,所以传输信息是可靠的。有机会会进一步分析一下TCP和UDP的区别,以及TCP三次握手机制。

5、HTTP1.1以后是长连接。

在以前的HTTP协议每一次请求只能请求到一个资源然后就关闭连接了,在HTTP1.1之后就采用了长连接形式,请求到资源以后并不会马上关闭连接,可以接着发起请求。

6、HTTP是无状态的。

HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

7、使用cookie来进行状态管理。

在很多页面上都有登录功能,HTTP这种无状态会导致我们每一次进入都要重新登录,给用户的体验很差,此时可以用cookie对状态进行管理,可以在客户端设置cookie,请求的时候把cookie传递给服务器端,服务器拿到这个cookie就能找到对应的用户。

8、请求步骤。

第一步 根据主机和端口建立一个TCP链接。
第二步 将封装好的请求行、请求头、和请求体的报文通过TCP发送给服务器。
第三步 服务器将响应行、响应头和响应体通过TCP发送给客户端。
第四步 释放链接 如果connection模式为close的话则会关闭这个TCP链接,如果connection是keep-alive则这个链接会保存一段时间。

9、HTTP和HTTPS的区别。

HTTPS其实就是 HTTP + SSL。
1、HTTPS需要CA证书。
2、HTTPS是加密传输的。
3、加密双方需要SSL加密认证的。
4、HTTPS的端口号是443。
那么HTTPS是如何做到传输的安全性呢?
主要用到 对称加密(AES、DES)、非对称加密(RES、DSE)、hash散列算法(MD5 SHA1 SHA256)和CA证书。

1、存在问题如何确保从服务器获取的公钥没有篡改。
2、客户端和服务器端如何商定对称加密的key。

如何保证服务器公钥的准确性
服务端首先会将自己的公钥通过CA机构进行加密得到一个license,客户端请求的时候会将这个license发送给客户端,此时客户端通过本地的证书解密合法就可以获得到这个公钥说明这个公钥没有被修改。

客户端和服务器端如何商定对称加密的key
第一步 客户端将自己的 SSL版本、非对称算法、随机数1 发送个服务器端。
第二步 服务器端确定好SSL版本 对称算法 随机数2 证书等发送给客户端。
第三步 客户端校验证书,如果合格进行下一步。
第四步 客户端产生随机数3 并将第一步 第二步的信息做hash算法值传递到服务器端。
第五步 服务器端 拿到随机数,也将第一步和第二步的数据进行摘要得到hash值,判断两者是否一致(一致说明数据没有篡改),并那随机数1、2、3生成一个key作为对称加密的key。
第六步 将第一步、第二步、第四步的值进行进行摘要生成值传递给客户端。
第七步 客户端收到服务器端的值,并且将第一步、第二步、第四步的数据进行摘要,比较值是否一致,如果一致也那随机数1、随机数2、随机数3生成对称加密的key。

### HTTP协议常见面问题及解答 #### 1. HTTP握手的过程是什么? HTTP握手是建立在TCP连接之上的,具体包括以下几个阶段: - **建立TCP连接**:客户端向服务器发起三次握手以建立可靠的TCP连接。 - **发送HTTP请求**:一旦TCP连接成功建立,客户端通过该连接发送HTTP请求消息给服务器。 - **接收HTTP响应**:服务器处理收到的请求后返回相应的HTTP响应消息给客户端。 - **关闭TCP连接**:当双方完成数据交互后,通常会断开TCP连接。 这些步骤确保了客户端与服务器之间能有效地进行通信并交换所需的数据[^1]。 #### 2. HTTP/1.0 和 HTTP/1.1 的主要区别有哪些? 相比于HTTP/1.0, HTTP/1.1引入了一些重要的改进特性: - 支持持久连接(Persistent Connections),即在一个TCP连接上可以传送多个HTTP请求和应答; - 添加了`Host`头字段用于支持虚拟主机(Virtual Hosting)功能; - 提供分块编码(Chunked Transfer Encoding)机制允许动态长度的内容传输; - 更加完善的缓存控制(Cache-Control)指令集以及条件GET方法(If-Modified-Since / If-None-Match)来优化资源获取效率; 上述变化显著提高了Web应用性能和服务质量。 #### 3. 如何理解WebSocket协议与HTTP之间的关系? 虽然两者都是基于TCP的应用层协议,但是它们有着不同的设计目标和技术特点。WebSocket是在原有HTTP基础上发展起来的一种全双工通讯协议,在初次握手时遵循标准HTTP格式,之后则切换至更高效的二进制帧结构来进行双向实时通信。因此可以说WebSocket是对传统HTTP单次请求回应模式的有效补充和发展延伸。 ```python import websocket def on_message(ws, message): print(f"Received: {message}") ws = websocket.WebSocketApp("wss://example.com/socket", on_message=on_message) ws.run_forever() ``` #### 4. 当浏览器输入URL按下回车键后会发生什么? 整个流程大致如下所示: - DNS解析域名成IP地址; - 建立TCP/IP连接到指定端口,默认情况下HTTP服务监听80端口而HTTPS则是443端口; - 发送HTTP GET 请求携带必要的头部信息如User-Agent等; - 接收来自服务器的一系列响应报文直至结束标志符到达为止; - 渲染HTML文档树形结构同时加载外部样式表、脚本文件等内容片段; - 执行JavaScript代码触发DOM事件更新视图界面显示效果。 此过程涉及到了网络编程中的诸多概念和技术要点,对于深入理解和掌握计算机科学基础知识具有重要意义[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值