Python网络数据抓取(2):HTTP Headers

简介

接下来,本文会向大家阐述 HTTP 请求中的"请求头"(headers)的概念,并通过实例来帮助大家理解。让本文直接进入主题。

想必大家都知道,在进行 API 调用的过程中,本文实际上是在通过一个"信封"传递信息。可以把这个"信封"想象成一个客户端和服务器之间的交流媒介,客户端是发件人,服务器是收件人。

在这个"信封"里面装的,就是本文要从客户端发送到服务器的数据。但就像本文平时寄信一样,在信封上除了写明收件人的地址,还会有一个退件地址,以防信件无法送达时使用。

这个比喻是为了帮助大家理解请求头(headers)的作用。在网络通信中,请求头就相当于信封上的地址标签,它告诉服务器数据要发送到哪里,同时也提供了一些额外的信息,以便在数据无法正常送达时能够找到正确的处理方式。

为了更好地理解请求头,本文可以将其分为四大类。

  • Request Headers
  • Response Headers
  • Payload Headers
  • Representation Headers

请求头和响应头之间并没有绝对的界限,它们可以相互转换。接下来,本文将深入了解每一种头具体代表的意义。

Request Headers

它就像其他头部一样,是一个键值对,由请求数据的客户端发送。发送它的目的是让服务器理解如何发送响应。它还有助于服务器识别请求的发送者。

以下是一些请求头的示例:

  • Host(主机): www.medium.com
  • User-Agent(用户代理): Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/74.0.3729.169 Safari/537.36 Referer
  • (引荐页): https://medium.com
  • Connection(连接): close(关闭)
  • Accept-Language(接受语言): en-us(英语美国)
  • Accept-Encoding(接受编码): gzip(压缩格式)

需要注意的是,Content-Type 并不是请求头,而是一种表示头。这一点可能会引起混淆,但了解这一点对理解 HTTP 通信非常重要。

通过上述示例,本文可以看到 Host 和 User-Agent 头包含了发起请求的客户端信息。

Accept-Language 头则是用来告诉服务器,客户端能够理解响应内容的语言,例如这里的 en-us 表示英语(美国)。而 Accept-Encoding 头则表明,即使服务器发送的是经过 gzip 压缩的数据,客户端也能够正确解析和理解。

Response Headers

它们就像请求头部一样,只不过传输的方向相反。实际上,这些头部是服务器发送给客户端的。它向客户端解释了如何处理响应。它提供了有关发送的数据的额外信息。

响应头部的示例:

  • Connection: keep-alive
  • Date: Mon, 08 Nov 2022
  • Server: nginx
  • Content-Type: text/html
  • Transfer-Encoding: chunked
  • Etag: W/"0815"

Etag 用于版本控制和缓存。Date 告诉客户端响应从服务器发送到客户端的日期。但是 Content-Type 或 Content-Encoding 是本文稍后将要讨论的表示头部。

Representation Headers

Representation headers 表示已传输数据的类型。从服务器发送到客户端的数据可以是任何格式,比如 JSON、HTML、XML、分块(如果数据量很大)等。服务器还告诉客户端有关内容的范围。

表示头部的示例:

  • Content-Type: text/html
  • Content-Encoding: gzip
  • Content-Length: 3523
  • Content-Range: bytes 50--1000/*
  • Content-Location: /docs/fo.xml

Content-Location 告诉客户端有关资源或数据的备用位置,客户端可以从中检索信息。它可以是存储特定资源的 URL。

除了这些头部之外,还可以有不同的头部,比如 Trailer、Transfer-Encoding、Etag、if-Not-Match、Authorizations 等。

现在,如果您正在编写 API,并且想要定义自己的自定义头部呢?您可以完全做到。就像您定义 API 的请求和响应结构的方式一样,您也可以实现服务器接受的自定义头部,或者您自己定义的自定义头部。

自定义头部的一个示例可能是 Authorization 头部。该头部可以具有任何值。此外,服务器可以使用该值来识别客户端,或者用于任何其他逻辑操作。

本文由mdnice多平台发布

相关推荐
精灵vector1 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习1 小时前
Python入门Day2
开发语言·python
Vertira2 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉2 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗2 小时前
黑马python(二十四)
开发语言·python
晓13132 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr
是小王同学啊~3 小时前
(LangChain)RAG系统链路向量检索器之Retrievers(五)
python·算法·langchain
AIGC包拥它3 小时前
提示技术系列——链式提示
人工智能·python·langchain·prompt
孟陬3 小时前
Python matplotlib 如何**同时**展示正文和 emoji
python
何双新3 小时前
第 1 课:Flask 简介与环境配置(Markdown 教案)
后端·python·flask