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

简介: 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 头部。该头部可以具有任何值。此外,服务器可以使用该值来识别客户端,或者用于任何其他逻辑操作。

相关文章
|
5天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】循环神经网络(RNN)与LSTM详解
【4月更文挑战第30天】本文探讨了处理序列数据的关键模型——循环神经网络(RNN)及其优化版长短期记忆网络(LSTM)。RNN利用循环结构处理序列依赖,但遭遇梯度消失/爆炸问题。LSTM通过门控机制解决了这一问题,有效捕捉长距离依赖。在Python中,可使用深度学习框架如PyTorch实现LSTM。示例代码展示了如何定义和初始化一个简单的LSTM网络结构,强调了RNN和LSTM在序列任务中的应用价值。
|
5天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】卷积神经网络(CNN)的原理与应用
【4月更文挑战第30天】本文介绍了卷积神经网络(CNN)的基本原理和结构组成,包括卷积层、激活函数、池化层和全连接层。CNN在图像识别等领域表现出色,其层次结构能逐步提取特征。在Python中,可利用TensorFlow或PyTorch构建CNN模型,示例代码展示了使用TensorFlow Keras API创建简单CNN的过程。CNN作为强大深度学习模型,未来仍有广阔发展空间。
|
5天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
6天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
11 0
|
6天前
|
机器学习/深度学习 PyTorch 算法框架/工具
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
|
6天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
7天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver
|
7天前
|
网络协议 小程序 数据库
轻松学会Python网络编程,搭建属于自己的聊天室
轻松学会Python网络编程,搭建属于自己的聊天室
|
7天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
17 0
|
7天前
|
机器学习/深度学习 数据可视化 数据挖掘
Python电力负荷:ARIMA、LSTM神经网络时间序列预测分析
Python电力负荷:ARIMA、LSTM神经网络时间序列预测分析
23 5