4.5.1. GET
4.5.1. GET
GET 是 HTTP 中最常用的 method. 它被定义为既 safe 又 idempotent, 这意味着 GET request 不应对 server state 产生副作用, 并且多个相同 GET request 应与单个 request 具有相同效果.
特别是, application 需要意识到除 user 显式 request 之外, GET request 还可能以各种方式生成:
-
Prefetching: user agent 可以在 user 显式请求 URL 之前获取它, 以改善感知性能.
-
Crawling: search engine 和类似工具会 crawl URL 以便为其建立索引.
-
Monitoring: 各种工具可能定期获取 URL, 以检查变化或可用性.
因此, 使用 GET 的 application MUST NOT 使用它触发 server state 变化. 如果 application 需要改变 state, 它 SHOULD 使用其他 method, 例如 POST.
也就是说, GET 可以有不影响 resource state 的副作用, 例如 logging.
最后, 注意 URL 的 query component 经常用于携带 identifying information. 虽然这是常见且有用的实践, 但它有若干缺点:
-
带 query string 的 GET request 相比不带 query string 的 request 更不容易被缓存.
-
Query string 在 browser history 和 log 中可见.
-
某些 proxy 和 server 可能限制 URL 长度.
使用带 query string 的 GET 的 application 需要意识到这些问题.