作者回复: 我接触的领域里options用的比较少,可能有点孤陋寡闻了。
作者回复: 总结的非常好。
问题里的“请求头如何设计”,意思是说相关的curd参数应该放在什么地方,比如用query参数或者是字段,只是一个提示,不是要必须如何如何做。
作者回复: 就是个使用的习惯和约定,就像是红绿灯,不是强制要求你必须遵守,但大家都按照这样做沟通起来顺畅。
要理解协议的含义,要求你遵守,但不强制。
作者回复: 请求方法的设计思想非常好,动词可以表示各种操作,所以非常适合RESTful。
作者回复: options请求会在allow字段里列出可以对资源实施的操作方法,比如有的资源只支持get,有的只支持post/delete。
所以有的时候回先发一个options,来确定应该如何操作资源。
不过这个方法用的很少,其实没太大用处,因为即使资源不支持某种方法,直接返回一个405或者其他的状态码就可以了。
作者回复: 在RESTful设计的时候,要考虑动作对服务器内部状态的影响。
这个比较理论,一般不太需要关心。
作者回复: 慢慢来。
作者回复: 任何请求报文都可以带请求体,与方法无关,老的工具可能对协议支持的不好。
后面你理解的对,请求方法最终如何处理还是要依赖于服务器,如果愿意,服务器也可以用get来上传数据,用post获取数据,现在的get/post都是依据协议标准来执行,所以是get获取post上传。
作者回复: 是的,你理解的很对。
协议就是一个要求通信双方都遵守的约定,当然也可以不遵守。
作者回复: 不客气。
作者回复: 这块我基本没用过,它也不是http标准里面的,抱歉了。
作者回复: 测试用的URI“10-2”不支持存储数据,所以post的数据只能在当次请求生效。
另外发现这两测试uri有小bug,已经修复,请及时git pull更新。
作者回复: 下一讲里面的url编码就会谈到。
uri里面有些字符是不允许出现的,需要编码和解码,而+正好就被解码成了空格。
你刚才也说了,会用到encodeURI这样的函数。
作者回复: 幂等是指客户端操作对服务器的状态没有产生改变,虽然报文内容变了,但服务器还是没有变化。
可以再对比一下delete和post。
作者回复: 我看Nginx源码,是不支持options的。
put的幂等是RFC定义的,当然你要实现出非幂等的功能也是可以的。
作者回复: 前面的对,后面的不对,请求行后面必须是HTTP/1.1(或者其他版本号)
作者回复: 按照http协议,空白行就是为了分隔header和body,因为http是纯文本的协议。
不知道面试官还能有什么新的解释,也许是故弄玄虚。
遇到这样的人可以及时请教,不能让他话只说一半。
作者回复: 当然可以了,只是这样不符合客户端的预期,但不按规矩出牌也拦不住,客户端只能“默默承受”。
作者回复: 没有具体的现场环境,不好解决问题,我觉得可以换一个其他的环境,用虚拟机安装一个Windows或者linux。