1.1 HTTP基本原理

1. URL

URL是Uniform Resource Locator的缩写,意思是统一资源定位符,它是互联网上标准的资源地址,用于定位互联网上的资源,例如网页、图片、视频等等。在浏览器地址栏中输入URL,可以让浏览器找到并显示相应的网页。URL的基本格式如下:
scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]
其中中括号里面的内容为非必要部分

下面介绍各部分代表的含义及作用:

  • scheme:协议。常用的协议有http、https、ftp等,另外scheme也常被称为protocol。
  • username、password:用户名和密码。有些URL需要提供用户名和密码才能访问,这时候把用户名和密码放在hostname前面则可以直接访问。
  • hostname:主机地址。可以为域名或者IP地址。
  • port:端口。这是服务器设定的服务端口。如https://8.8.8.8:2345这个URL的端口为2345。有些URL没有端口信息,使用默认端口。http协议的默认端口为80,https协议的默认端口为443。
  • path:路径。指的是网络资源在服务器中的指定位置。如https://baidu.com/favicon.ico中的path就是favicon.ico。
  • parameters:参数。用来指定访问某个资源时的附加信息。
  • query:查询。用于查询某种资源,若查询多个资源,则用&隔开。如https://baidu.com/s?wd=python&ie=utf-8,其中query部分为wd=python&ie=utf-8,这里指定了wd的值为python,ie的值为utf-8。
  • fragment:片段。对资源描述的补充说明,可以理解为资源内部的书签。目前主要有两个应用,一是用作单页面路由,比如前端框架Vue,React都可以用它来做路由管理,二是用作HTML描点,可以用它控制一个页面打开时自动下滑滚到某个特定位置。

2、HTTP和HTTPS

在爬虫中,我们通常抓取的页面是基于http或https协议的。

HTTP全称为Hypertext Transfer Protocol,中文名为超文本传输协议。其作用是把超文本数据从网络传输到本地浏览器。

HTTPS全称是Hypertext Transfer Protocol Secure Socket Layer,是以安全为通道的http通道,可以理解为http的安全版。
(ps:HTTPS的安全基础是SSL,通过该协议传输的内容都是通过SSL加密的)

3、HTTP请求过程

在浏览器地址栏输入一个URL,按下回车之后便可以访问对应的网页内容。实际上,这个过程是浏览器先向所在网站的服务器发送一个请求,网站服务器收到请求后对其进行处理和解析,然后返回对应的响应,在传回浏览器。由于响应里包含页面源代码等内容,浏览器再对其进行解析,相应的网页便呈现出来了。
在这里插入图片描述

为直观说明上述过程,下面用Chrome浏览器开发者模式下的Network监听组件来做一下演示。Network监听组件可以在访问当前请求的网页时,显示产生的所有网络请求和响应。

打开Chrome浏览器,访问www.baidu.com(百度),鼠标右键选择“检查”菜单(或快捷键F12),打开浏览器开发者工具。
在这里插入图片描述

切换到Network面板
在这里插入图片描述

点击刷新
在这里插入图片描述

此时Network面板下出现了很多条目,每一个条目就代表一次发送请求和接收响应的过程。
在这里插入图片描述
我们首先观察第一个网络请求,即www.baidu.com,其中各列含义如下:

扫描二维码关注公众号,回复: 17262833 查看本文章
  • Name请求的名称。一般取URL的最后一部分内容座位请求名称。
  • Status响应状态码。通过状态码,我们可以判断我们发送的请求是否得到了正常的响应。(此处为200,表示正常,其他响应状态码后续介绍)
  • Type请求的文档类型。此处为document,代表我们请求的是一个HTML文档,内容是一些HTML代码。
  • Initiator请求源。用于标记请求是由哪个对象或进程发起的。
  • Size从服务器下载的文件或请求的资源的大小。(from cache表示资源是从缓存中取得的)
  • Time从发起请求到获得响应消耗的总时间
  • Waterfall网络请求的可视化瀑布流

点击请求名称,即可进入详情页面
在这里插入图片描述

  • General部分:

Request URL:请求的URL。
Request Method:请求的方法。
Status Code:响应状态码。
Remote Address:远程服务器的地址和端口。
Referrer Policy:Referrer判别策略。

  • Response Headers表示响应头,响应头是响应的一部分。

  • Request Headers表示请求头**,服务器会根据请求头里的信息判断请求是否合法,进而做出相应的响应。

4、请求

请求由客户端发往服务器,分为四部分内容:请求方法(Request Method)、请求网址(Request URL)、请求头(Request Headers)、请求体(Request Body),下面一一进行介绍。

请求方法:
用于标识客户端请求服务端的方式,常见的请求方法有两种:GET和POST。当我们在浏览器输入URL并回车后,便发起了一个GRT请求,而POST请求大多数在我们提交表单时发起(比如我们填写账号密码点击登录时)。GET请求中的参数会包含在URL里面,数据可以在URL内看见,POST请求则是以表单传输,不会体现在URL中。

请求网址:
唯一确定客户端想请求的资源。

请求头:
用来说明服务器要使用的附加信息。请求头是请求的重要组成部分,再写爬虫程序时,通常要设定请求头。比较重要的信息有Cookie、Referer、User-Agent等。

附加信息 说明
Accept 指定客户端可以接收哪些类型的信息
Accept-Encoding 指定客户端可接受的内容编码
Accept-Language 指定客户端可接受的语言类型
Cookie 网站为辨别用户,进行会话跟踪而存储在用户本地的数据。其主要功能是维持当前会话。例如,用户输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态,之后每次刷新或请求该站点的其他页面,都会发现处于登陆状态,这就也是Cookie的作用。Cookie里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会将请求头中加上Cookie并发送给服务器,服务器通过Cookie进行识别是我们自己,并且查询出当前状态是登录状态,所以返回的结果是登录之后的网页内容。
Host 指定了客户端正在连接的服务器的主机名和端口号。通常,Host头部字段的内容是网站的域名或IP地址。
Referer 标识请求是从哪个页面发过来的,服务器可拿到这一信息并做相应的处理,如做来源统计,防盗链处理等。
User-Agent 简称UA,可以使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息。爬虫时加上此信息可以伪装成浏览器,如果不加则很容易被识别出来。
Content-Type 也叫互联网媒体类型(Internet Media Type)或MIME类型,用来表示具体请求中的媒体类型信息,如text/html代表HTML格式、image/gif代表GIF图片、application/json代表JSON类型。

请求体:
请求体一般承载的内容是POST请求中的表单数据,多余GET请求,请求体为空。

下表为Content-Type和POST提交数据方式的关系:

Content-Type POST提交数据的方式
application/x-www-form-urlencoded 表单数据
multipart/form-data 表单文件上传
application/json 序列化JOSN数据
text/xml XML数据

爬虫程序中,构造POST请求需要使用正确的Content-Type,并了解设置各种请求库的各个参数时使用的都是那种Content-Type,否则可能导致POST提交后无法得到正常的响应。

5、响应

由服务器返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)、响应体(Response Body)。下面分别进行介绍。

响应状态码:
表示服务器的响应状态,下表为常见的错误状态吗即错误原因:

状态码 说明 详情
100 继续 请求者应当继续提出请求。服务器已接受部分请求,正在等待其余请求
101 切换协议 请求者已要求服务器切换协议,服务器已确认并准备切换
200 成功 服务器已成功处理请求
201 已创建 请求成功并且服务器已创建了新的资源
202 已接收 服务器已接收请求但尚未处理
203 非授权信息 服务器已成功处理了请求,但返回的信息可能来自另一个源
204 无内容 服务器成功处理了请求,但没返回任何内容
205 重置内容 服务器成功处理了请求,但内容被重置
206 部分内容 服务器成功处理了部分内容
300 多种选择 针对请求,服务器可执行多种操作
301 永久移动 请求的网页已永久移动到新位置,即永久重定向
302 暂时移动 请求的网页暂时跳转到其他页面,即暂时重定向
303 查看其他位置 如果原来的请求是POST,重定向目标文档应该通过GET提取
304 未修改 此次请求返回的网页未修改,继续使用上次的资源
305 使用代理 请求者应该使用代理访问该网页
307 临时重定向 临时从其他位置响应请求的资源
400 错误请求 服务器无法解析该请求
401 未授权 请求没有进行身份验证或验证未通过
403 禁止访问 服务器拒绝该请求
404 未找到 服务器找不到请求的网页
405 方法禁用 服务器禁用了请求中的指定方法
406 不接收 无法使用请求的内容响应请求的网页
407 需要代理授权 请求者需要使用代理授权
408 请求超时 服务器请求超时
409 冲突 服务器在完成请求时发生冲突
410 已删除 请求的资源已永久删除
411 需要有效长度 服务器不接收不含有效内容长度标头字段的请求
412 未满足前提条件 服务器未满足请求者在请求中设置的某一个前提条件
413 请求实体过大 请求实体过大,超出服务器的处理能力
414 请求的URI过长 请求的网址过长,服务器无法处理
415 不支持类型 请求格式不被请求页面支持
416 请求范围不符 页面无法提供请求的范围
417 未满足期望值 服务器未满足期望请求标头字段的请求
500 服务器内部错误 服务器内部遇到错误,无法完成请求
501 未实现 服务器不具备完成请求的能力
502 错误网关 服务器作为网关或代理,接收到上游服务器的无效响应
503 服务不可用 服务器目前无法使用
504 网关超时 服务器作为网关或代理,没有及时从上游服务器接收到请求
505 HTTP版本不支持 服务器不支持请求中使用的HTTP协议版本

响应头:

包含了服务器对请求的应答信息。下表说明一些常用的响应头信息:

附加信息 说明
Date 标识响应产生的时间
Last-Modidied 指定资源的最后修改时间
Content-Encoding 指定响应内容的编码
Server 包含服务器的信息,包括名称、版本号等
Content-Type 文档类型,指定返回的数据是什么类型
Set-Cookie 设置Cookie。用于告诉浏览器需要将此内容放在Cookie中,下次请求将Cookie携带上
Expires 指定响应的过期时间,可以让代理服务器或浏览器将加载的内容更新到缓存中。当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载、缩短加载时间的目的

响应体:

存储响应正文数据。我们做爬虫请求网页时,要解析的内容就是响应体。
我们可通过Response查看网页源代码,也就是响应体的内容。
在这里插入图片描述

我们在做爬虫时,主要通过响应体得到网页的源代码、JSON数据等,并从中提取我们需要的内容。

猜你喜欢

转载自blog.csdn.net/weixin_75094128/article/details/131367442