当前位置: 首页 > article >正文

爬虫基础(一)HTTP协议 :请求与响应

前言

爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。

今天的HTTP协议,会有助于我们更好的了解网络。

一、什么是HTTP协议

(1)定义

HTTP(超文本传输协议,HyperText Transfer Protocol)是用于在网络上进行数据通信的协议,尤其是用于网页的传输。

简单来说,就是专门把超文本数据从网络上传输到本地浏览器上的一个协议

我们也经常见它,比如网站前面的前缀:

当然,上图有些不太正确,但 HTTPS 其实是HTTP的升级版,二者其实差不太多。

(2)HTTPS

那么HTTPS到底有什么不同呢?

HTTPS的全称是Hypertext Transfer Protocol Secure。相较于HTTP多了一个Secure

所以我们应该知道,哪里升级了。

简单来说,就是在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性

Tips:HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。(了解即可

(3)URI和URL

还有些专业术语,诸如URI和URL :

  • URI(统一资源标识符):用于标识资源的字符串。
  • URL(统一资源定位符):一种特定类型的URI,用于定位资源并提供如何访问这些资源的信息。
  • URN:统一资源名称

顾名思义,URI让我们可以唯一标识一个资源。URL则让我们可以去定位一个资源。

比如一个网址https://www.example.com

我们可以把这整个链接叫做URI,因为这个网址标识了一个资源。

而这个链接,也叫做URL,因为这个网址的链接也同样定位了一个资源。

那他们怎么区分呢? 

URI包括了URL,因为URI=URL和URN

比如,一本书的编号111,这个编号就是URN。

所以该编号也可以叫做URI,因为它同样标识了一个资源,但是它不能叫做URL了,因为该编号并没有定位这个资源,我们只知道它叫什么,却不知道去哪里可以找到他。

二、HTTP请求过程

(1)请求过程

我们在网页最上面的导航栏上输入网址,按下回车,然后出现一个新网页。

这个过程就是浏览器向某网站发送了一个请求,然后网站进行处理,最后网站回馈一个响应,浏览器解析后展现出来。

(2)相关名词介绍

(注:以下名词了解即可) 

为了更好的说明该过程,我们可以鼠标右键检查功能来具体显示一下请求和响应:

然后切换到Network面板,再刷新一下网页:

即可看到很多行的东西,每一行就代表一次  请求-响应  过程

我们仔细观察这个界面的各列:

其中,各列含义如下

  • Name:请求界面的名称
  • Status:响应状态码,通过状态码显示,可以判定响应是否正常。
  • Type:请求文档的类型。
  • Initiator:请求源,用来标记是哪个对象或进程发起的请求。
  • Size:请求资源大小(如果是缓存中提取的资源,该列显示from cache)
  • Time:从发起请求到获得响应所花总时间。
  • Waterfall:网络请求可视化瀑布流。
  • (有时会有Protocol:请求协议类型,http1.1代表HTTP1.1版本,h2代表HTTP2.0版本)

若单击某列,则会显示更详细的信息:

在General部分:

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

以上名词可能有些说的不太清楚,现在我们具体来看一看各部分,到底是干什么的

三、请求部分

请求,即Request。

由用户发往服务器的信息。包括四大部分:请求方法、请求网址、请求头、请求体。 

(1)请求方法

请求方法,客户端请求服务器时的方式

常见的有两种:GET请求、POST请求

比如:

GET请求

请求获取指定资源,如请求页面返回内容

当我们在浏览器最上面输入网址并按下回车,这就是发起了GET请求。

POST请求:

向指定资源提交数据,通常用于表单提交或者上传文件。

当我们登陆网站,输入账号密码后,点击提交后,这就是发起了POST请求。

那么二者有什么具体区别呢?

  1. GET请求的参数包括在URL,POST请求的数据包括在请求体中。
    所以如果打开某网站某板块某界面的某图片后,这时我们会在上面的网址中看到该图片的路径,这就是GET请求该图片的参数
  2. GET请求提交数据最大1024字节,POST请求没有限制。

所以综上,当我们提交账号密码时,最好选择POST,否则GET会将密码显示在网址中暴露哦~


当然除此之外,还有很多请求,不过并不常用,汇总如下:

  • GET:请求获取指定资源。GET 请求不应包含请求体,且一般用于获取数据。
  • POST:向指定资源提交数据,通常用于表单提交或者上传文件。POST 请求可以包含请求体,用于传送数据。
  • PUT:向指定资源上传数据,通常用于更新资源的状态。PUT 请求一般是幂等的,即多次相同的请求会得到相同的结果。
  • DELETE:请求删除指定资源。
  • PATCH:部分更新指定资源的数据。与 PUT 的区别是,PATCH 只更新资源的一部分,而 PUT 会替换整个资源。
  • HEAD:类似 GET 请求,但只获取响应的头部信息,不返回实际的资源数据。
  • OPTIONS:请求服务器,询问支持哪些 HTTP 方法。常用于跨域请求中的预检请求。

(2)请求网址

网址格式如下:

协议://主机名:端口号/路径?查询字符串#片段标识符

说明:

  • 协议(Scheme):指定访问资源所使用的协议。常见的协议包括:
    http 或 https(超文本传输协议)、
    ftp(文件传输协议)、
    mailto(用于电子邮件地址)、
    file(本地文件)
  • 主机名(Host):指定资源所在的服务器的域名或 IP 地址。
    通常为一个域名,如 www.example.com
    或者是 IP 地址,如 192.168.1.1
  • 端口号(Port)(可写可不写):指定服务器的端口,通常省略。
    默认情况下:http 默认端口为 80、https 默认端口为 443。
    如果指定了非默认端口,则需要在主机名后加上端口号,用冒号分隔,如 www.example.com:8080
  • 路径(Path):指定请求资源在服务器上的位置。
    例如,/products/123 表示访问 /products/123 这个路径的资源。
  • 查询字符串(Query)(可写可不写):以 ? 开头,包含一个或多个键值对,用于传递参数。
    例如,?id=123&name=abc,查询字符串由参数名和值组成,多个参数用 & 分隔。
  • 片段标识符(Fragment)(可写可不写):以 # 开头,指向文档中的一个特定位置。
    用于指定页面内的某个部分。例如,#section2 指向页面的第二个部分。

举个例子:

https://www.example.com:8080/products/123?id=456&color=red#review

解释: 

  • 协议:https
  • 主机名:www.example.com
  • 端口号:8080
  • 路径:/products/123
  • 查询字符串:?id=456&color=red
  • 片段标识符:#review

(3)请求头

请求头是 HTTP 请求中的一部分,它包含了关于客户端、请求以及数据的附加信息。

客户端通过它向服务器传递元数据,帮助服务器理解请求的内容、用户的偏好、客户端环境等。

举个例子:

请求头就像你在向别人请求东西时提供的一些附加信息

假设你在网上买东西,除了告诉商家你想买的产品,还会提供一些其他信息,比如:

你用的是什么设备(是手机还是电脑)

你能接受的商品类型(比如希望商品图片清晰,或者只想看某种品牌的商品)

这些附加信息就像是请求头里的内容,它们帮助商家(服务器)了解你具体的需求,确保你能收到最合适的产品。

所以你要访问一个网页,你的请求头可能包含以下信息:

(注:了解即可) 

1. Host

  • 指定请求的服务器域名或 IP 地址。从 HTTP/1.1 版本开始,这是必需的头部字段。

  • 示例:Host: www.example.com

2. User-Agent

  • 简称UA。表示发送请求的客户端软件类型(如浏览器、操作系统等)。爬虫时加上此部分可以伪装成浏览器。

  • 示例:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

3. Accept

  • 指定客户端能够处理的响应内容类型。通常用于指定请求的数据格式

  • 示例:Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp,*/*;q=0.8

4. Accept-Language

  • 告诉服务器客户端能够理解的语言。例如,可以告诉服务器希望获取中文或英文的内容。

  • 示例:Accept-Language: en-US,en;q=0.5

5. Content-Type

  • 仅在请求体中有数据时使用,指定请求体的媒体类型。例如,表单提交时,数据的格式是 application/x-www-form-urlencoded,上传文件时是 multipart/form-data

  • 示例:Content-Type: application/json

6. Authorization

  • 用于身份验证,携带认证信息,如令牌或基本认证信息。常用于需要用户验证的资源。

  • 示例:Authorization: Bearer <token>

  • 客户端向服务器发送的 Cookie 信息,服务器根据该信息识别用户状态(如登录状态)。

  • 示例:Cookie: sessionid=abc123; user=JohnDoe

8. Accept-Encoding

  • 告诉服务器客户端支持的编码方式,通常用于压缩响应体。

  • 示例:Accept-Encoding: gzip, deflate, br

9. Connection

  • 表示是否保持持久连接,决定在请求完成后是否保持与服务器的连接。

  • 示例:Connection: keep-alive

10. Referer

  • 表示来自哪个 URL 的请求,通常用于了解用户访问的来源页面。

  • 示例:Referer: https://www.example.com/previous-page

(4)请求体

请求体是 HTTP 请求中的一部分,主要用于携带客户端发送给服务器的实际数据内容。

可以理解为你在向服务器请求某项服务时,所附带的具体信息或者数据

举个例子:

如果你填写了一个网上表单,提交了你的个人信息(比如名字、地址、电子邮件等),这些信息就是通过请求体发送到服务器的。

(Tips:对于请求体来说,一般是POST请求的表单数据,对于GET请求,请求体为空)


对于请求头请求体的区别?

  • 请求头
    包含一些附加信息(比如浏览器类型、请求语言、是否有登录状态等)
    帮助服务器理解如何处理请求。
  • 请求体
    包含实际的数据内容,是请求的核心部分
    比如你提交的表单数据、上传的文件等。

四、响应部分

响应,即Response。

由服务器给用户的信息。包括三部分:响应状态码、响应头、响应体。

(1)响应状态码

就像前文所说,这就是根据给出的数字,来判定响应是否正常。

比如,200表示正常、404表示找不到等,都是常见状态码。

下面汇总了常见的状态码及错误原因:

1. 1xx:信息性状态码

这些状态码表示请求已被接收,正在继续处理。

  • 100 Continue:表示客户端可以继续发送请求的其余部分(通常用于大文件上传时,客户端先发送请求头,服务器返回 100 状态码,客户端再发送请求体)。

2. 2xx:成功状态码

这些状态码表示请求已成功被处理。

  • 200 OK:请求成功,服务器返回请求的资源。

  • 201 Created:请求成功,服务器创建了新的资源(通常用于 POST 请求)。

  • 204 No Content:请求成功,但服务器没有返回任何内容(常见于删除操作)。

3. 3xx:重定向状态码

这些状态码表示请求需要进一步的操作才能完成(通常是页面重定向)。

  • 301 Moved Permanently:请求的资源已被永久移到新的位置,响应中会带有新的 URL。

  • 302 Found:请求的资源临时移动到其他位置,客户端会按照新 URL 继续请求。

  • 304 Not Modified:资源未修改,客户端可以使用缓存的副本。

4. 4xx:客户端错误状态码

这些状态码表示请求有错误,客户端需要修正请求后再试。

  • 400 Bad Request:请求无效,服务器无法理解请求。

  • 401 Unauthorized:请求未授权,通常需要提供身份验证(如登录)。

  • 403 Forbidden:服务器拒绝请求,即使用户已认证。

  • 404 Not Found:请求的资源不存在或无法找到。

  • 405 Method Not Allowed:请求方法不被允许(例如,服务器只允许 GET 请求,但客户端使用了 POST 请求)。

5. 5xx:服务器错误状态码

这些状态码表示服务器未能完成有效请求,通常是服务器本身的问题。

  • 500 Internal Server Error:服务器遇到错误,无法完成请求。

  • 502 Bad Gateway:服务器作为网关或代理时,收到来自上游服务器的无效响应。

  • 503 Service Unavailable:服务器暂时无法处理请求,通常是因为服务器超负荷或正在维护。

  • 504 Gateway Timeout:服务器作为网关或代理时,未能在规定时间内从上游服务器获取响应。

(2)响应头

响应头是服务器在响应客户端请求时,附加在响应消息中的一些信息。

这些信息主要用于描述服务器的处理结果、返回的数据类型、缓存策略等。

可以理解为服务器对客户端请求的“回馈”信息,告诉客户端服务器的状态、资源类型等。

下面为常用响应头:

  1. Content-Type:指定响应体的内容类型(即数据的格式)。例如:

    • Content-Type: text/html:返回的是 HTML 内容。
    • Content-Type: application/json:返回的是 JSON 格式数据。
    • Content-Type: image/png:返回的是 PNG 图片。
  2. Content-Length:表示响应体的大小,以字节为单位

  3. Date:返回响应的时间戳,表示服务器响应的日期和时间

  4. Server:表示服务器的类型和版本

  5. Set-Cookie:服务器向客户端发送的 cookie,用于保存客户端的状态信息。

(3)响应体

响应体是服务器在响应客户端请求时,返回给客户端的实际数据内容。

举个例子:

比如你请求一个网页时,响应体就是返回的 HTML 内容;你请求某个数据接口时,响应体就是返回的 JSON 数据。

如下图所示:

当我们打开Preview中,看到的蓝框内的内容,就是响应体。

在爬虫时,我们要做的,就是解析它!!!

它的常见内容有:

  1. HTML 页面:如果你请求一个网页,响应体通常是该网页的 HTML 内容。
    例如,浏览器向服务器请求 https://example.com,服务器返回一个 HTML 页面,响应体就是网页的 HTML 代码。

  2. JSON 数据:在许多现代 Web 应用中,通常使用 JSON 格式。
    例如,发送一个 GET 请求到一个数据接口,返回的响应体是 JSON 数据:
    { "name": "John Doe", "age": 30 }

  3. 图片或文件:如果请求的是一个文件(如图片、视频等),响应体包含文件的内容。
    例如,浏览器请求一个 PNG 图片,服务器返回响应体,其中包含该图片的二进制数据。

  4. 文本内容:如果请求的是纯文本数据,响应体可能直接是一些文本内容。


http://www.kler.cn/a/524955.html

相关文章:

  • Prompt提示词完整案例:让chatGPT成为“书单推荐”的高手
  • 在Putty创建php文件
  • C++并发编程指南02
  • 批量卸载fnm中已经安装的所有版本
  • Excel - Binary和Text两种Compare方法
  • Flutter_学习记录_基本组件的使用记录
  • 剑指 Offer II 007. 数组中和为 0 的三个数
  • 每日一题洛谷P1307 [NOIP2011 普及组] 数字反转c++
  • GitHub Actions定时任务配置完全指南:从Cron语法到实战示例
  • 基于Go语言的三甲医院人机与智能体协同环境系统(上.文章部分)
  • JVM01_概述、跨平台原理、分类、三大商业虚拟机
  • 未来无线技术的发展方向
  • Python 切片(Slicing):列表、元组与字符串的高效操作
  • Python爬虫获取item_fee-获得淘宝商品快递费用接口
  • 通过Ngrok实现内网穿透助力远程开发
  • 25【数组的理解】
  • Vue 3 中的 watch:监视数据的变化
  • lambda 表达式:Python中的极简艺术
  • 微服务入门(go)
  • Ceph:关于Ceph 中 RADOS 块设备快照克隆管理的一些笔记整理(12)
  • 基于单片机的车载传感器数据处理系统
  • matlab提取滚动轴承故障特征
  • 2025数学建模美赛|赛题翻译|D题
  • 【每日一A】2015NOIP真题 (二分+贪心) python
  • 第24篇 基于ARM A9处理器用汇编语言实现中断<六>
  • sqlzoo答案5-SUM and COUNT