我正在考虑安装 Deno,安装指南指示为 Mac/Linux Shell 发出此命令:
curl -fsSL https://deno.land/x/install/install.sh | sh
为了避免盲目执行 shell 命令,我访问了该网址在我的浏览器中,以为它会显示原始文本供我查看。令我惊讶的是,它获取了一个 HTML 页面,其中显示了安装文件以及许多其他 HTML 装饰。
当我访问curl
该 URL 时,它会下载安装文件。当我在 Chrome 中浏览它时,我得到的是 HTML。
我打开了-v
(详细)甚至将我的设置--user-agent
为 Chromium 字符串(下面缩写),并运行以下命令,但curl
似乎总是返回文本,我不知道为什么。服务器如何知道返回 HTML 而不是原始文本?我只是想了解一下,以便自己学习。有人能解释一下吗?
curl -Lv --user-agent "Mozilla/5.0 ..." https://deno.land/x/install/install.sh
答案1
正如@squillman 在评论中提到的,我的浏览器的默认accept
标题是 text/html,因此我在浏览器的响应中得到了 HTML。
curl
没有设置accept
这样的默认标头。并且可能该特定服务器收到的任何未明确使用accept
text/html 的请求都会得到纯文本作为返回。
我做了一些实验来证明。
让浏览器获取原始文本(Javascript)
fetch("https://deno.land/x/[email protected]/install.sh", {
"headers": {
//this "accept" header will request HTML
"accept": "text/html",
"cache-control": "max-age=0",
}
})
.then((response) => response.text())
.then((data) => console.log(data));
如果您注释掉accept
该获取中的标题,您将获得原始文本。
让 CURL 获取 HTML
curl -Lv -H 'accept: text/html' https://deno.land/x/install/install.sh
accept
从 curl 命令中删除标头将返回原始文本