(一)HTTP协议 :请求与响应

news2025/1/29 6:22:44

前言

爬虫需要基础知识,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.coloradmin.cn/o/2283692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

未初始化数据恢复全攻略

没有初始化概述 在日常使用电脑、硬盘、U盘等存储设备时&#xff0c;我们可能会遇到“没有初始化”的提示。这一情况通常发生在存储设备突然无法被系统正常识别或访问时&#xff0c;系统往往要求我们先进行初始化操作。然而&#xff0c;初始化操作意味着对存储设备进行格式化&…

学习数据结构(1)算法复杂度

1.数据结构和算法 &#xff08;1&#xff09;数据结构是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合 &#xff08;2&#xff09;算法就是定义良好的计算过程&#xff0c;取一个或一组的值为输入&#xff0c;并产生出一个或一组…

Github 2025-01-25Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-01-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Vue项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型…

免费GPU算力,不花钱部署DeepSeek-R1

在人工智能和大模型技术飞速发展的今天&#xff0c;越来越多的开发者和研究者希望能够亲自体验和微调大模型&#xff0c;以便更好地理解和应用这些先进的技术。然而&#xff0c;高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是&#xff0c;腾讯云Cloud Studio提供了免…

積分方程與簡單的泛函分析7.希爾伯特-施密特定理

1)def函數叫作"由核生成的(有源的)" 定义: 设 是定义在区域上的核函数。 对于函数,若存在函数使得, 则称函数是“由核生成的(有源的)”。 这里的直观理解是: 函数的“来源”可以通过核函数 与另一个函数的积分运算得到。 在积分方程理论中,这种表述常…

2025年PHP面试宝典,技术总结。

面试是进入职场的第一道坎&#xff0c;因为我本身学校太一般的问题在面试中遇到了各种不爽&#xff0c;和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师&#xff0c;主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点&#xff0…

追剧记单词之:国色芳华与单词速记

●wretched adj. 恶劣的&#xff1b;悲惨的&#xff1b;不幸的&#xff1b;难过的 &#xff08;不幸的&#xff09;胜意出生于一个&#xff08;恶劣的&#xff09;家庭环境&#xff0c;嫁给王擎后依然过着&#xff08;悲惨的&#xff09;生活&#xff0c;她死后&#xff0c;牡丹…

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

Pycaret自动机器学习框架使用流程及项目实战案例详解 1 Pycaret介绍2 安装及版本需求3 Pycaret自动机器学习框架使用流程3.1 Setup3.2 Compare Models3.3 Analyze Model3.4 Prediction3.5 Save Model4 多分类项目实战案例详解4.1 ✅ Setup4.2 ✅ Compare Models4.3 ✅ Experime…

ICSE‘25 LLM Assistance for Memory Safety

不知道从什么时候开始&#xff0c;各大技术社区&#xff0c;技术群聊流行着 “用Rust重写!” &#xff0c;放一张图(笑死… 这不, 随着大模型技术的流行&#xff0c;大家都在探索如何让大模型自动完成仓库级别(全程序)的代码重构&#xff0c;代码变换&#xff08;Refactor&…

基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API

前言&#xff1a; 本片博客只讲述了操作的大致流程&#xff0c;具体实现步骤并不标准&#xff0c;请以参考为准。 本文前提&#xff1a;熟悉使用webSocket 如果大家还不了解什么是WebSocket&#xff0c;可以参考我的这篇博客&#xff1a; rWebSocket 详解&#xff1a;全双工…

大数运算之C语言实现

一、 前言 在我们代码编程过程中&#xff0c;我们经常需要处理各种规模的数值。从日常工作中的一些简单算术在到科学研究中的复杂计算&#xff0c;数字无处不在。然而&#xff0c;当数值变的异常庞大时&#xff0c;就需要用到大数运算来进行实现。本文我们将介绍大数运算的基本…

Java导出通过Word模板导出docx文件并通过QQ邮箱发送

一、创建Word模板 {{company}}{{Date}}服务器运行情况报告一、服务器&#xff1a;总告警次数&#xff1a;{{ServerTotal}} 服务器IP:{{IPA}}&#xff0c;总共告警次数:{{ServerATotal}} 服务器IP:{{IPB}}&#xff0c;总共告警次数:{{ServerBTotal}} 服务器IP:{{IPC}}&#x…

Linux系统编程:进程状态和进程优先级/nice

目录 一,相对于OS的进程状态 1.1运行状态 1.2阻塞状态 1.3挂起状态 二,并发执行与进程切换 2.1,CPU并发执行 2.2进程切换 三,Linux内核管理进程状态的方法 3.1查看进程状态 3.2R状态 3.3S状态 3.4D状态 3.5T状态 3.6X状态 3.7Z状态 3.8孤儿进程 四,进程优先级 …

0 基础学运维:解锁 K8s 云计算运维工程师成长密码

前言&#xff1a;作为一个过来人&#xff0c;我曾站在技术的门槛之外&#xff0c;连电脑运行内存和内存空间都傻傻分不清&#xff0c;完完全全的零基础。但如今&#xff0c;我已成长为一名资深的k8s云计算运维工程师。回顾这段历程&#xff0c;我深知踏上这条技术之路的艰辛与不…

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash&#xff0c;选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成&#xff1a; 接下来设置…

【全栈】SprintBoot+vue3迷你商城(9)

【全栈】SprintBootvue3迷你商城&#xff08;9&#xff09; 往期的文章都在这里啦&#xff0c;大家有兴趣可以看一下 后端部分&#xff1a; 【全栈】SprintBootvue3迷你商城&#xff08;1&#xff09; 【全栈】SprintBootvue3迷你商城&#xff08;2&#xff09; 【全栈】Spr…

省市区三级联动

引言 在网页中&#xff0c;经常会遇到需要用户选择地区的场景&#xff0c;如注册表单、地址填写等。为了提供更好的用户体验&#xff0c;我们可以实现一个三级联动的地区选择器&#xff0c;让用户依次选择省份、城市和地区。 效果展示&#xff1a; 只有先选择省份后才可以选择…

Fullcalendar @fullcalendar/react 样式错乱丢失问题和导致页面卡顿崩溃问题

问题描述&#xff1a; 我使用 fullcalendar的react版本时&#xff0c;出现了一个诡异的问题&#xff0c;当我切换到 一个iframe页面时&#xff08;整个页面是一个iframe嵌入的&#xff09;&#xff0c;再切换回来日历的样式丢失了&#xff01;不仅丢失了样式还导致页面崩溃了&…

dm8在Linux环境安装精简步骤说明(2024年12月更新版dm8)

dm8在Linux环境安装详细步骤 - - 2025年1月之后dm8 环境介绍1 修改操作系统资源限制2 操作系统创建用户3 操作系统配置4 数据库安装5 初始化数据库6 实例参数优化7 登录数据库配置归档与备份8 配置审计9 创建用户10 屏蔽关键字与数据库兼容模式11 jdbc连接串配置12 更多达梦数据…

S4 HANA更改Tax base Amount的字段控制

本文主要介绍在S4 HANA OP中Tax base Amount的字段控制相关设置。具体请参照如下内容&#xff1a; 1. 更改Tax base Amount的字段控制 以上配置用于控制FB60/FB65/FB70/FB75/MIRO的页签“Tax”界面是否可以修改“Tax base Amount”&#xff0c; 如果勾选Change 表示可以修改T…