【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安全通信线路)+ 认证 + 完整性保护。
【python爬虫】常见面试题之http协议问题总结的更多相关文章
- python爬虫常见面试题(二)
前言 之所以在这里写下python爬虫常见面试题及解答,一是用作笔记,方便日后回忆:二是给自己一个和大家交流的机会,互相学习.进步,希望不正之处大家能给予指正:三是我也是互联网寒潮下岗的那批人之一,为 ...
- python爬虫常见面试题(一)
前言 之所以在这里写下python爬虫常见面试题及解答,一是用作笔记,方便日后回忆:二是给自己一个和大家交流的机会,互相学习.进步,希望不正之处大家能给予指正:三是我也是互联网寒潮下岗的那批人之一,为 ...
- 整理的最全 python常见面试题(基本必考)
整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...
- 整理的最全 python常见面试题
整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...
- HTTP、TCP、IP协议常见面试题
前言:在看面试题之前,先了解一下基本定义. HTTP.TCP.IP协议基本定义 HTTP: (HyperText Transport Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数 ...
- iOS常见面试题汇总
iOS常见面试题汇总 1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 i ...
- 【javascript常见面试题】常见前端面试题及答案
转自:http://www.cnblogs.com/syfwhu/p/4434132.html 前言 本文是在GitHub上看到一个大牛总结的前端常见面试题,很多问题问的都很好,很经典.很有代表性.上 ...
- redis知识点及常见面试题
redis知识点及常见面试题 参考: https://zm8.sm-tc.cn/?src=l4uLj4zF0NCIiIjRnJGdk5CYjNGckJLQrIqNiZaJnpOWjIvQno2Llpy ...
- 【转载】JAVA常见面试题及解答(精华)
JAVA常见面试题及解答(精华) 1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: ...
随机推荐
- HDU3652 B-number(数位DP)题解
思路: 这里的状态分为3种,无13和末尾的1,无13且末尾为1,有13,然后DFS 等我搞清楚数位DP就来更新Orz 代码: #include<iostream> #include< ...
- 【第九章】 springboot + mybatis + 多数据源 (AOP实现)
在第八章 springboot + mybatis + 多数据源代码的基础上,做两点修改 1.ShopDao package com.xxx.firstboot.dao; import org.spr ...
- Educational Codeforces Round 56 (Rated for Div. 2)
涨rating啦.. 不过话说为什么有这么多数据结构题啊,难道是中国人出的? A - Dice Rolling 傻逼题,可以用一个三加一堆二或者用一堆二,那就直接.. #include<cstd ...
- Couldn't find an AF_INET address for
vim ~/.bashrc #输入内容 export ROS_HOSTNAME=你的hostname export ROS_MASTER_URI=http://(目标主机的IP):11311 expo ...
- MarkChanges: Jmeter
1. 20180627 调整启动的内存set HEAP=-Xms1024m -Xmx1024m2. 20180627 调整输出格式为xml #jmeter.save.saveservice.outpu ...
- MVC动态二级域名解析
动态二级域名的实现: 应用场景:目前产品要实现block功能,因为工作需要实现二级域名:www.{CompanyUrl}.xxx.com 假设产品主域名入口为:www.xxx.com 公司员工管理:w ...
- viewpager实现画廊(一屏多个Fragment)效果
本文主要介绍如何利用ViewPager实现Gallery的画廊效果,即一屏显示多个Fragment. 效果图如下: 在 使用Gallery的时候大家会发现有几个问题(1). 无法控制每次滑动只滑动一页 ...
- Codeforces 556D - Case of Fugitive
556D - Case of Fugitive 思路:将桥长度放进二叉搜索树中(multiset),相邻两岛距离按上限排序,然后二分查找桥长度匹配并删除. 代码: #include<bits/s ...
- Python 爬虫-正则表达式
2017-07-27 13:52:08 一.正则表达式的概念 (1)正则表达式是用来简洁表达一组字符串的表达式,最主要应用在字符串匹配中. 正则表达式是用来简洁表达一组字符串的表达式 正则表达式是一 ...
- js中如何访问对象和数组
js中如何访问对象和数组 一.总结 一句话总结:js访问对象点和中括号,访问数组的话就是中括号 对象 . [] 数组 [] 1.js访问对象的两种方式? . [] 可以使用下面两种方式访问对象的属性和 ...