安全(HTTP 方法)
如果 HTTP 方法不改变服务器的状态,则该方法是安全的。换句话说,如果方法导致只读操作,则它是安全的。一些常见的 HTTP 方法是安全的:GET、HEAD 或 OPTIONS。所有安全方法也都是幂等的,但并非所有幂等方法都是安全的。例如,PUT 和 DELETE 都是幂等的,但却是不安全的。
即使安全方法具有只读语义,服务器仍可以更改其状态:例如,它们可以记录或保留统计信息。这里重要的是,通过调用安全方法,客户端本身不会请求任何服务器更改,因此不会给服务器造成不必要的负载或负担。浏览器可以调用安全方法,而不必担心会对服务器造成任何损害;这使它们能够无风险地执行预取等活动。网络爬虫也依赖于调用安全方法。
安全方法不必只提供静态文件;服务器可以动态生成安全方法的响应,只要生成脚本保证安全即可:它不应触发外部效应,例如在电子商务网站中触发订单。
服务器上的应用程序有责任正确实现安全语义,Web 服务器本身(无论是 Apache、Nginx 还是 IIS)无法自行强制执行。特别是,应用程序不应允许 GET 请求更改其状态。
调用安全方法,不改变服务器状态
http
GET /pageX.html HTTP/1.1
调用非安全方法,可能会改变服务器状态
http
POST /pageX.html HTTP/1.1
调用幂等但非安全的方法
http
DELETE /idX/delete HTTP/1.1