做者:xiaoyuhtml
微信公众号:Python数据科学web
知乎:zhuanlan.zhihu.com/pypcfx算法
在学习爬虫的过程当中,相信你们对HTTP
这个词已经不陌生了,它好像从未离开过咱们的视线。被迫所需,咱们每次都要使用开发者工具去查看请求头
,响应头
,以及头中的各个字段
,使用别人封装好的模块填入信息,敲几行代码就解决了。面对简单的爬取任务,咱们也许根本不用管它是什么,但可能等咱们真正遇到问题的时候,却无从下手。浏览器
认识并深入理解HTTP对于爬虫的实现过程是很是有帮助的。为了更好的让你们理解爬虫中的HTTP,博主将分为两篇对HTTP进行讲述,<基础篇>
和 <高阶篇>
。本篇为基础篇,将从如下几个部分进行阐述。缓存
引自百度百科的权威回答:安全
超文本传输协议
(HTTP,HyperText Transfer Protocol)
是互联网上应用最为普遍的一种网络协议。全部WWW文件都必须遵照这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
1960年美国人TedNelson构思了一种经过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。TedNelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工做小组(InternetEngineering Task Force )共同合做研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。服务器
HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传输协议。
它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。微信
HTTP采用了浏览器/服务器这种请求/响应
模型,浏览器永远是HTTP请求的发起者,服务器为响应者。网络
这样在浏览器客户端没有发起请求的状况下,服务器是不能主动推送消息给客户端的。架构
HTTP是一个应用层协议
,是咱们想从服务器端获取信息的最直观的请求。好比,在爬虫中使用的<urllib模块>
,<requests模块>
等都是封装了HTTP协议,做为一个HTTP客户端
实现了博文,图片,视频等信息源的下载。
可是HTTP也不是直接就能够用的,它的请求是创建在一些底层协议的基础上完成的。如TCP/IP协议栈
中,HTTP须要TCP的三次握手链接成功后才能向服务器发起请求。固然,若是是HTTPS
的话,还须要TSL
和SSL
安全层。
既然HTTP协议
须要创建在其它底层协议基础上,咱们来看看一个完整的HTTP请求是什么样的。
当咱们点击一个连接或者输入一个连接的时候,整个HTTP的请求过程就开始了,而后通过如下步骤获得最后的信息,咱们这里简单介绍一下前四个步骤,旨在了解HTTP。
DNS缓存
,若是没有就会向DNS服务器
(互联网提供商)发起域名解析,以获取IP地址
。TCP的3次握手
链接,默认端口号80
。请求行、请求头部、请求主体
。200
)和请求的HTML代码。 上面的步骤<3>
和<4>
能够简单的示意以下,更方便你们理解。其中,请求和响应都包含特定格式的信息,具体咱们接下来会继续解读。响应HTTP请求会返回响应状态码
,根据状态码能够知道返回信息的状态。状态码规定以下:
1xx: 信息响应类,表示接收到请求而且继续处理
100——必须继续发出请求
101——要求服务器根据请求转换HTTP协议版本
2xx: 处理成功响应类,表示动做被成功接收、理解和接受 200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不肯定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
3xx: 重定向响应类,为了完成指定的动做,必须接受进一步处理
300——请求的资源可在多处获得
301——删除请求数据
302——在其余地址发现了请求数据
303——建议客户访问其余URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址获得
306——前一版本HTTP中使用的代码,现行版本中再也不使用
307——申明请求的资源临时性删除
4xx: 客户端错误,客户请求包含语法错误或者是不能正确执行
400——错误请求,如语法错误
401——未受权
402——保留有效ChargeTo头响应
403——禁止访问
404——没有发现文件、查询或URl
405——在Request-Line字段定义的方法不容许
406——根据发送的Accept,请求资源不可访问
407——用户必须首先在代理服务器上获得受权
408——客户端没有在指定的时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器再也不有此资源且无进一步地址
411——服务器拒绝用户定义的Content-Length
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器容许的大小
414——请求的资源URL长于服务器容许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不知足请求Expect头字段指定的指望值,若是是代理服务器,多是下一级服务器不能知足请求长。
5xx: 服务端错误,服务器不能正确执行一个正确的请求
500——内部服务器错误
501——未实现
502——网关错误
相信你已经对HTTP的请求过程有了大体的了解了,下面咱们来详细介绍HTTP请求的报文信息
。 报文内容包含请求行、请求头部、请求主体
。
下面咱们来看一下经过开发者工具请求www.baidu.com/网址截取下来的HTTP请求报文内容,对比一下上面的标准格式。
咱们发现请求报文的格式与上面基本一致,正式咱们想要的。那么,接下来咱们将要逐个的介绍以上各个信息。
<GET>
是HTTP的请求方式之一,HTTP/1.1协议中共定义了8种方法与服务器交互,有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,其中比较经常使用的是**和**方法了。
GET请求方法后URL(这里是/)和版本1.1,别忘了空格
。
HTTP的头域包括通用头
、请求头
、响应头
和实体头
四部分。由于在爬虫过程当中,咱们常常会提交headers
请求头信息用于假装,因此咱们这里对请求头着重讲解一下。
请求头是请求报文特有的,它向服务器提交了一些额外的信息,例如经过Accept字段信息,咱们客户端能够告诉服务器咱们接受一些什么类型的数据。而咱们其实能够把这些字段信息就当成**<键值对>**对待。
下面咱们看看这些字段都表明了什么意思?
Accept
内容:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
含义:告诉浏览器咱们接受MIME的类型
Accept-Encoding
内容:gzip, deflate, br
含义:若是有这个字段,则表明客户端支持压缩将内容编码,去掉后会支持任意编码。
注意:爬虫时通常不要把它加上,博主最开始就是不懂全都复制过来,结果由于这个就是很差使卡住好长时间。
Accept-Lanague
内容:zh-CN,zh;q=0.9
含义:告诉服务器可以接受的语言,没有则表明任何语言
Connection
内容:keep-alive
含义:告诉服务器须要持久有效的链接状态(HTTP1.1默认会进行持久链接)
Host
内容:www.baidu.com
含义:客户端指定本身想访问的web服务器域名/IP地址和端口号
Cache-control
内容:max-age=0 含义:(引自百度百科)
Cache-Control 是最重要的规则。这个字段用于指定全部缓存机制在整个请求/响应链中必须服从的指令。这些指令指定用于阻止缓存对请求或响应形成不利干扰的行为。这些指令一般覆盖默认缓存算法。缓存指令是单向的,即请求中存在一个指令并不意味着响应中将存在同一个指令。
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。
可是HTTP请求和响应的Cache-Control是不彻底同样的。 常见的请求Cache-Control
取值有<no-cache>, <no-store>, <max-age>, <max-stale>, <min-fresh>, <only-if-cached>
。
响应的Cache-Control取值有<public>, <private>, <no-cache>, <no- store>, <no-transform>, <must-revalidate>, <proxy-revalidate>, <max-age>
。
咱们这里主要介绍请求时的常见Cache-Control取值。
<1>max-age<=0 本例中使用max-age=0
,表示每次请求会访问服务器,经过Last-Modified
来判断文件是否被修改,若是被修改,返回状态码200并获得最新文件,不然将返回304状态码并读取缓存文件。
<2>max-age>0 表示会直接从浏览器提取缓存。
<3>no-cache 表示不会在浏览器缓存进行提取,而是强制的向服务器发出请求,这样能够保证客户端可以收到最权威的回应。
<4>no-store 全部内容都不会被缓存到缓存或Internet临时文件中。
Upgrade-Insecure-Requests
内容:1
含义:表示浏览器/爬虫能够处理HTTPS协议,并能自动升级请求从HTTP到HTTPS。
User-Agent
内容:Mozilla/5.0 (Windows NT 6.1; WOW64) ..Safari/537.36
含义:(这个是爬虫中最经常使用了)用于假装成浏览器身份请求网页。它的意思天然就是表示浏览器的身份,说明是用的哪一种浏览器进行的操做。
Cookies
含义:(这个也是爬虫中很重要的了,一般用于模拟登陆) Cookies是用于维持服务端的会话状态,由服务器端写入,而后在后续请求中,供服务器读取使用。
以上就是本例中出现的全部字段信息内容。固然,还有其它一些经常使用字段信息,这里也一块儿说明一下。
Referer
含义:(这个也是爬虫经常使用到的,防盗链
) 客户端经过当前URL表明的页面出发访问咱们请求的页面。爬虫中,通常咱们只要把它设置成请求的网页连接就行了。
Accept-Charset
含义:(这个也是爬虫经常使用到的) 表示浏览器可接受的字符集,能够是utf-8
,gbk
等
If-Modified-Since
内容:Thu, 10 Apr 2008 09:14:42 GMT 含义:请求的内容在指定日期之后一旦被修改就被返回对象内容,不然返回“Not Modified”
Pragma
含义:
Pragma头域用来包含实现特定的指令,最经常使用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
Range
:含义:告诉浏览器本身想取对象的哪一个部分。例如,Range: bytes=1173546
本篇内容介绍了HTTP的基本概念,主要包含了如下几点:
什么是HTTP
HTTP的模型、做用和定位
一个完整的HTTP请求过程
HTTP请求头信息
HTTP请求头经常使用字段信息
下篇将会分享一些HTTP的高级内容,包括以下内容:
微信公众号:Python数据科学