【python爬虫】常见面试题之http协议问题总结

简介

 

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

 

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

 

在TCP/IP协议栈中的位置

 

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

        

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

 

HTTP的请求响应模型

 

HTTP协议永远都是客户端发起请求,服务器回送响应。

      

这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

 

http协议的主要特点

 

(1)无状态

http协议无状态协议。无状态是指协议对于事物处理没有记忆能力。缺少记忆,意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次传送的数据量比较大。

 

HTTP协议的无状态是指服务器的协议层无需为不同的请求之间建立相关关系,它特指的是协议层。但这并不代表建立在HTTP协议之上的应用程序就无法维持状态。应用层可以通过会话session来跟踪用户请求之间的关联性,服务器会为每一个会话对象绑定一个唯一的会话ID,浏览器可以将会话ID记录在本地缓存LocalStroage或者Cookie,在后续的请求带上这个会话ID,服务器就可以为每个请求找到之前的会话状态。

 

(2)长连接

HTTP早期版本中每个请求都会发起一个连接,一个网页除了html还有其他静态资源以及诸多的API调用,如果每个请求都一个连接,这是非常浪费服务器资源的,同时也让客户端的访问速度慢了不少。

HTTP1.0之后引入了Keep-Alive持久连接,HTTP1.1之后默认为持久连接。它使得HTTP的一个连接可以连续服务多个请求,有效节省了资源,增加了客户端的访问速度。

但是,持久连接也不是一直连接,毕竟每个连接都会占用服务器资源,如果打开网页的人太多,那服务器的资源也会紧张,所以一般服务器会配置一个KeepAlive Timeout参数和KeepAlive Requests参数限制单个连接持续时长和最多服务的请求次数。

 

HTTP常见的状态码有哪些

 

200:请求被正常处理

301:永久重定向

302:临时重定向

304:资源被浏览器缓存了,不需要请求服务器(打开经常访问的网站)

400:用于参数验证,一般是少参数了或者参数错误

403:资源禁止访问,IP被列入黑名单了

404:服务器无法找到对应的资源

500:服务器内部错误

502:后端服务挂掉或者服务器压力过大,nginx接到的请求无法及时传递给后端的服务处理,这个时候就会出现502错误。

 

HTTP的缺点和HTTPS

 

HTTP的缺点:

(1)通信使用明文不加密,内容可能会被窃听

(2)不验明对方身份,可能遇到伪装

(3)无法验证报文完整性,可能遭到篡改

HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+ 认证 + 完整性保护。

posted @ 2019-01-29 17:10  天意凉  阅读(1187)  评论(0编辑  收藏  举报