OPTIONS: 用来询问服务器支持哪些方法。
HTTP1.1 规范要求,必须包含 HOST 头部,服务器通过 Allow 头关返回服务器支持的方法, 一般包体为空。常规方法有 GET,POST,HEAD,TRACE,OPTIONS,默认情况下 IIS 不支持 PUT,DELETE。
CLISP 实现如下:
(defun http-options (url)
(let ((host nil)(rel-url nil))
(let* ((s (+ 3 (search "://" url)))
(e (search "/" url :start2 s)))
(setf host (subseq url s e)
rel-url (subseq url e)))
(cli-init)
(http-write (format nil "OPTIONS ~a HTTP/1.1" rel-url))
(http-write (format nil "Host: ~a" host))
(http-write "Accept: *")
(http-write +newline+ nil)
(when *conn*
(http-stream-mode nil)
(let* ((tmp-list (loop for x = (http-read-line)
while (and x (plusp (length x)))
collect x))
(content-length (get-content-length tmp-list)))
(http-stream-mode t)
;读取返回内容
(format nil
"~{~a~%~}~a~%"
tmp-list
(decode-bytes (loop for i from 0 to (1- content-length) for x = (http-read-byte) while x collect x)
*html-charset*))))))
执行结果截图: