gpt4 book ai didi

http - 内容协商是否中断?

转载 作者:可可西里 更新时间:2023-11-01 15:27:23 25 4
gpt4 key购买 nike

我最近对网络爬虫很感兴趣,但有一件事对我来说不是很清楚。想象一个简单的爬虫程序,它将获取页面,从中提取链接并将它们排队等待以后以相同的方式进行处理。

当某个链接不会指向另一个页面而是指向某个 Assets 或其他类型的静态文件时,爬虫如何处理这种情况?它怎么会知道?它可能不想下载这种可能很大的二进制数据,甚至不想下载 xml 或 json 文件。内容协商怎么落到这个地步?

当我使用 Accept: text/htmlexample.com/foo.png 发出请求时,我认为内容协商应该在网络服务器端工作如果它不能满足我的要求,请发回 html 响应或 Bad Request 状态给我,没有其他可以接受的,但这不是它在现实生活中的工作方式。它无论如何都会用 Content-Type: image/png 向我发送二进制数据,即使我告诉它我只接受 text/html。为什么网络服务器会这样工作而不强制执行我要求的正确响应?

内容协商的实现是否中断或应用程序有责任正确实现?

真正的爬虫是如何工作的?提前发送 HEAD 请求以检查链接另一端的内容被视为不切实际的资源浪费。

最佳答案

不是“Bad Request”,正确的响应是 406 Not Acceptable。

HTTP 规范声明它应该发回此规范[ 1 ],但大多数实现不这样做。如果你想避免下载你不感兴趣的内容类型,你唯一的选择确实是先做一个 HEAD。由于您可能抓取了这些图片,因此您也可以做出一些明智的猜测,认为它实际上是一张图片(例如,它出现在 <img> 标签中)。

您也可以像往常一样开始请求,一旦您发现正在返回二进制数据,就立即切断 TCP 连接。但我不确定这个想法有多好。

关于http - 内容协商是否中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11450737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com