请求方法和响应码
-
http标准请求方法
-
GET:获取资源,可以理解为读取或者下载数据;
-
HEAD:获取资源的元信息;HEAD方法与GET方法类似,也是请求从服务器获取资源,服务器的处理机制也是一样的,但服务器不会返 回请求的实体数据,只会传回响应头,也就是资源的“元信息”。
-
POST:向资源提交数据,相当于写入或上传数据;
-
PUT:类似POST;多用于更新数据
-
DELETE:删除资源;
-
CONNECT:建立特殊的连接隧道;
-
OPTIONS:列出可对资源实行的方法;
-
TRACE:追踪请求-响应的传输路径。
-
安全与幂等
-
在HTTP协议里,所谓的“安全”是指请求方法不会“破坏”服务器上的资源,即不会对服务器上的资源造 成实质的修改。
-
、所谓的“幂等 幂等”实际上是一个数学用语,被借用到了HTTP协议里,意思是多次执行相同的操作,结果也都 是相同的,即多次“幂”后结果“相等”。
-
响应码
-
1××:提示信息,表示目前是协议处理的中间状态,还需要后续的操作;
-
2××:成功,报文已经收到并被正确处理;
-
“200 OK”是最常见的成功状态码,表示一切正常,服务器如客户端所期望的那样返回了处理结果,如果 是非HEAD请求,通常在响应头后都会有body数据。
-
“204 No Content”是另一个很常见的成功状态码,它的含义与“200 OK”基本相同,但响应头后没有 body数据。所以对于Web服务器来说,正确地区分200和204是很必要的。
-
“206 Partial Content ”是HTTP分块下载或断点续传的基础,在客户端发送“范围请求”、要求获取资源的 部分数据时出现,它与200一样,也是服务器成功处理了请求,但body里的数据不是资源的全部,而是其中 的一部分,状态码206通常还会伴随着头字段“Content-Range Content-Range”
-
3××:重定向,资源位置发生变动,需要客户端重新发送请求;
-
“301 Moved Permanently ”俗称“永久重定向”,含义是此次请求的资源已经不存在了,需要改用改用新 的URI再次访问。
-
与它类似的是“302 Found 302 Found”,曾经的描述短语是“Moved Temporarily ”,俗称“临时重定向”,意思是 请求的资源还在,但需要暂时用另一个URI来访问。
-
虽然301和302的效果差不多,但是应用场景还是有很大区别,特别是浏览器缓存,302浏览器不会做缓存优化
-
“304 Not Modified ” 是一个比较有意思的状态码,它用于If-Modified-Since等条件请求,表示资源未修改,用于缓存控制。它不具有通常的跳转含义,但可以理解成“重定向已到缓存的文件”(即“缓存重定
-
向”)
-
4××:客户端错误,请求报文有误,服务器无法处理;
-
“400 Bad Request ”是一个通用的错误码,表示请求报文有错误,但具体是数据格式错误、缺少请求头还 是URI超长它没有明确说,只是一个笼统的错误,客户端看到400只会是“一头雾水”“不知所措”。所 以,在开发Web应用时应当尽量避免给客户端返回400,而是要用其他更有明确含义的状态码。
-
“403 Forbidden ”实际上不是客户端的请求出错,而是表示服务器禁止访问资源。原因可能多种多样,例 如信息敏感、法律禁止等,如果服务器友好一点,可以在body里详细说明拒绝请求的原因,不过现实中通 常都是直接给一个“闭门羹”。
-
“404 Not Found ”可能是我们最常看见也是最不愿意看到的一个状态码,它的原意是资源在本服务器上未 找到,所以无法提供给客户端。但现在已经被“用滥了”,只要服务器“不高兴”就可以给出个404,而我 们也无从得知后面到底是真的未找到,还是有什么别的原因,某种程度上它比403还要令人讨厌。
-
405 Method Not Allowed:不允许使用某些方法操作资源,例如不允许POST只能GET;
-
406 Not Acceptable:资源无法满足客户端请求的条件,例如请求中文但只有英文;
-
408 Request Timeout:请求超时,服务器等待了过长的时间;
-
409 Conflict:多个请求发生了冲突,可以理解为多线程并发时的竞态;
-
413 Request Entity Too Large:请求报文里的body太大;
-
414 Request-URI Too Long:请求行里的URI太大;
-
429 Too Many Requests:客户端发送了太多的请求,通常是由于服务器的限连策略;
-
431 Request Header Fields Too Large:请求头某个字段或总体太大;
-
5××:服务器错误,服务器在处理请求时内部发生了错误。
-
“500 Internal Server Error ”与400类似,也是一个通用的错误码,服务器究竟发生了什么错误我们是不知 道的。不过对于服务器来说这应该算是好事,通常不应该把服务器内部的详细信息,例如出错的函数调用栈 告诉外界。虽然不利于调试,但能够防止黑客的窥探或者分析。
-
“501 Not Implemented ”表示客户端请求的功能还不支持,这个错误码比500要“温和”一些,和“即将 开业,敬请期待”的意思差不多,不过具体什么时候“开业”就不好说了。
-
“502 Bad Gateway ”通常是服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后
-
“503 Service Unavailable ”表示服务器当前很忙,暂时无法响应服务,我们上网时有时候遇到的“网络服 务正忙,请稍后重试”的提示信息就是状态码503。报文里通常还会有一个“Retry-After“字段,表示多久后再尝试重连接
-
一般交互的都是json格式,会内部再定义一个code和msg,然后定义一个参数错误code,在 msg中提示错误具体原因。
浪波激泥