对动态短网址使用 301/303/307 重定向
Posted
技术标签:
【中文标题】对动态短网址使用 301/303/307 重定向【英文标题】:Using 301/303/307 redirects for dynamic short urls 【发布时间】:2012-02-19 05:05:33 【问题描述】:我们正在实施一个短网址服务,其中重定向目标每天都会发生变化。这些 url 将由移动设备访问,并且始终是 GET 请求。我试图了解哪个是最适合这项工作的 300 型重定向。
AFAIK 大多数网址缩短服务使用 301 重定向(永久移动)。但是,根据规范,303(查看其他)和 307(临时移动)重定向似乎是为我们的情况设计的......
303/307 是否与 301 一样受到支持?规范说它们只在 HTTP 1.1 中实现——这意味着什么限制? 选择 301 与 303/307 是否存在任何实际缓存或性能影响。 对于 GET 请求,是否有任何理由选择 303 和 307? 是否有任何理由使用 302 重定向? 还有其他需要考虑的事情吗?【问题讨论】:
【参考方案1】:303/307 是否与 301 一样受到支持?规范说它们只在 HTTP 1.1 中实现——这意味着什么限制?
是/无。
选择 301 与 303/307 是否有任何实际的缓存或性能影响。
我不这么认为。
对于 GET 请求,是否有任何理由选择 303 和 307?
303 的语义与 307 不同。如果请求的资源是“其他地方”,则 303 不是正确答案。
是否有任何理由使用 302 重定向?
据我所知,不是真的。它与 307 语义相同,但 UA 可能会将 POST 请求重写为 GET。
还有什么需要考虑的吗?
见http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-18.html#status.3xx
【讨论】:
谢谢。因此,似乎选择 301 还是 307 的唯一实际含义是页面排名是如何转移的——你同意吗? Yarin - 希望他们得到同样的对待。但我怎么知道呢?【参考方案2】:url缩短服务使用301(永久)的原因是:
它不保存目标网址的页面排名。 目标 url 不会改变(一旦你告诉 bit.ly/url1 重定向到 example.com/url1,你就不能修改它来重定向到 example.com/url2)。所有 302、303 和 307 都是临时重定向,根本不做这项工作。除了如果你想改变目标网址,你可以使用 302。例如example.com/contact 重定向到 example.com/temp/contact,但您打算稍后用 example.com/v2/contact 替换后者。
【讨论】:
jcisio- 你的答案不清楚。 “所有 302、303 和 307 都是临时重定向,根本不做这项工作” - 不要做 what 工作?他们每个人都执行重定向,那么您指的是什么job? "Job" 是您所说的 URL 缩短服务。这样的服务不是简单的 URL 重定向,是有限制的。哪些约束?他们在我的回答中。以上是关于对动态短网址使用 301/303/307 重定向的主要内容,如果未能解决你的问题,请参考以下文章
后端面试之系统设计-短网址(Short URL)服务怎么设计?