通过curl 来对比http状态码301和302

928 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

概述

curl

使用命令行工具发送请求,一个 HTTP 请求客户端(实际上它也可以做 FTP/SCP/TELNET 协议的事情)。可类比于浏览器中的 fetch

curl 不加参数直接发送get请求

  • --head
    • --head 发送 HEAD 请求
  • --include
    • 打印request Header reponse Body
curl https://jsonplaceholder.typicode.com/todos/1 -i

image.png

  • --request
    • 指定请求方法,如 POST 等。
  • --verbose
    • 查看发送报文及 TLS handshake 的详细信息
  • --location
    • --location,追踪重定向。
# 重定向两次后请求到数据
curl --location http://zhihu.com

# 可使用 --head,查看到三次响应
curl --head --location http://zhihu.com

浏览器请求:http://zhihu.com 会重定向至:https://www.zhihu.com/signin?next=%2F 说明肯定发生了重定向

直接curl http://zhihu.com 返回301 也说明发生了重定向 我们详细看下执行curl --head --location http://zhihu.com发生了什么

第一次响应永久重定向 301 重定向至 https://www.zhihu.com image.png

第二次响应暂时重定向302 重定向至 https://www.zhihu.com/signin?next=%2F image.png 第三次响应 200 成功 image.png

301 & 302

这里我们看到了请求 http://zhihu.com 返回301 永久重定向

301 301 Moved Permanently 说明请求的资源已经被移动到了由 Location 头部指定的 url 上,是固定的不会再改变。搜索引擎会根据该响应修正。

请求https://www.zhihu.com 返回302 临时重定向

HTTP 302 Found 重定向状态码表明请求的资源被暂时的移动到了由该 HTTP 响应的响应头 Location 指定的 URL 上。浏览器会重定向到这个 URL,但是搜索引擎不会对该资源的链接进行更新

适用场景

301适合永久重定向

301比较常用的场景是使用域名跳转。

302用来做临时跳转

比如未登陆的用户访问用户中心重定向到登录页面。

访问404页面会重新定向到首页。