Accept-Encoding

格式

1
Accept-Encoding  = "Accept-Encoding" ":"
                      1#( codings [ ";" "q" "=" qvalue ] )
codings          = ( content-coding | "*" )
1
Accept-Encoding: compress, gzip
Accept-Encoding:
Accept-Encoding: *
Accept-Encoding: compress;q=0.5, gzip;q=1.0
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

规则

  • 如果设置了一个编码方案,那么表明该方案是客户端可以接受的,除非设置了;q=0
  • 特殊的*标记表示客户端可以接受所有的编码方案
  • 如果设置了多个编码方案,那么q值最高的方案成为首选方案
  • 纵使没有设置indentify类型,indentify类型依然会被认为是客接受的,除非设置了indentify;q=0或者\;q=0*。如果没有设置Accept-Encoding,那么默认为indentify。

选项

indentity

总是可以被接受的encoding类型,Accept-Encoding默认选项。

compress

compress是一个相当古老的 unix 档案压缩指令,压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档,必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例,一般人多已改用 gzip 为档案压缩工具。

deflate

deflate是最基础的算法,gzip在deflate的raw data前增加了10个字节的gzheader,尾部添加了8个字节的校验字节(可选crc32 和adler32)和长度标识字节。deflate是一种压缩算法,是huffman编码的一种加强。gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分。

gzip

GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的.

在nginx中配置gzip

参考资料

Accept

格式

1
Accept         = "Accept" ":"
                    #( media-range [ accept-params ] )
media-range    = ( "*/*"
                    | ( type "/" "*" )
                    | ( type "/" subtype )
                    ) *( ";" parameter )
accept-params  = ";" "q" "=" qvalue *( accept-extension )
accept-extension = ";" token [ "=" ( token | quoted-string ) ]
  • Accept可以接受多种类型值,多个类型值之间用逗号隔开。
  • q用于表示客户端对于某种类型的渴望程度,q的范围为0到1,q的值越高表示客户端越渴望得到这种类型的返回。q和类型值之间用分号隔开。默认值是1。小数位数不超过3位。
1
Accept: text/plain;q=0.5,text/xml;q=0.8,text/html

以上内容表示:客户端非常希望服务器端传回html格式的内容;如果没有,xml格式也可以接受;实在连xml都没有,txt格式也可以接受。

常用类型

文件类型 Accept内容 描述
*.* / 不限制类型
*.html text/html HTML格式
image/* 所有图片
*.gif image/gif Graphic Interchange Format
*.jp2 image/jp2 JPEG-2000
*.jpe image/jpeg JPEG
*.jpeg image/jpeg JPEG
*.jpg image/jpeg JPEG
*.css text/css Cascading Style Sheets
*.js text/javascript, application/javascript JavaScript
*.json application/json JavaScript Object Notation
*.xml text/xml, application/xml Extensible Markup Language
*.txt text/plain Plain Text

全部类型

文件类型 Accept内容 描述
*.3gpp audio/3gpp, video/3gpp 3GPP Audio/Video
*.ac3 audio/ac3 AC3 Audio
*.asf allpication/vnd.ms-asf Advanced Streaming Format
*.au audio/basic AU Audio
*.css text/css Cascading Style Sheets
*.csv text/csv Comma Separated Values
*.doc application/msword MS Word Document
*.dot application/msword MS Word Template
*.dtd application/xml-dtd Document Type Definition
*.dwg image/vnd.dwg AutoCAD Drawing Database
*.dxf image/vnd.dxf AutoCAD Drawing Interchange Format
*.gif image/gif Graphic Interchange Format
*.htm text/html HyperText Markup Language
*.html text/html HyperText Markup Language
*.jp2 image/jp2 JPEG-2000
*.jpe image/jpeg JPEG
*.jpeg image/jpeg JPEG
*.jpg image/jpeg JPEG
*.js text/javascript, application/javascript JavaScript
*.json application/json JavaScript Object Notation
*.mp2 audio/mpeg, video/mpeg MPEG Audio/Video Stream, Layer II
*.mp3 audio/mpeg MPEG Audio Stream, Layer III
*.mp4 audio/mp4, video/mp4 MPEG-4 Audio/Video
*.mpeg video/mpeg MPEG Video Stream, Layer II
*.mpg video/mpeg MPEG Video Stream, Layer II
*.mpp application/vnd.ms-project MS Project Project
*.ogg application/ogg, audio/ogg Ogg Vorbis
*.pdf application/pdf Portable Document Format
*.png image/png Portable Network Graphics
*.pot application/vnd.ms-powerpoint MS PowerPoint Template
*.pps application/vnd.ms-powerpoint MS PowerPoint Slideshow
*.ppt application/vnd.ms-powerpoint MS PowerPoint Presentation
*.rtf application/rtf, text/rtf Rich Text Format
*.svf image/vnd.svf Simple Vector Format
*.tif image/tiff Tagged Image Format File
*.tiff image/tiff Tagged Image Format File
*.txt text/plain Plain Text
*.wdb application/vnd.ms-works MS Works Database
*.wps application/vnd.ms-works Works Text Document
*.xhtml application/xhtml+xml Extensible HyperText Markup Language
*.xlc application/vnd.ms-excel MS Excel Chart
*.xlm application/vnd.ms-excel MS Excel Macro
*.xls application/vnd.ms-excel MS Excel Spreadsheet
*.xlt application/vnd.ms-excel MS Excel Template
*.xlw application/vnd.ms-excel MS Excel Workspace
*.xml text/xml, application/xml Extensible Markup Language
*.zip aplication/zip Compressed Archive

参考资料

HTTP报头字段列表

简述

  • HTTP报头分为通用报头、请求报头、响应报头和实体报头。
  • 请求方的HTTP报头结构:通用报头、请求报头和实体报头。
  • 响应方的HTTP报头结构:通用报头、响应报头和实体报头。

请求头

  • Accept

    1
    Accept: text/plain

    能够接受的回应内容类型。更多类型

  • Accept-Charset

    1
    Accept-Charset: utf-8

    能够接受的字符集。

  • Accept-Encoding

    1
    Accept-Encoding: gzip,deflate

    能够支持的编码方式。默认是identity

  • Accept-Language

    1
    Accept-Language: zh-cn

    能够接受的自然语言。

  • Accept-Datetime

    1
    Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT

    能够接受的按照时间来表示的版本。

  • Authorization

    1
    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

    用于超文本传输协议的认证的认证信息。

  • Cache-Control

    1
    Cache-Control: no-cache

    用来指定在这次的请求/回复链中的所有缓存机制都必须遵守的指令。

  • Connection

    1
    Connection: keep-alive <br> Connection: Upgrade

    该浏览器想要优先使用的连接类型

  • Cookie

    1
    Cookie: Version=1; name=test1;

    之前由服务器通过 Set-Cookie 发送的一个超文本传输协议 Cookie 。

  • Content-Length

    1
    Content-Length: 348

    以八位字节数组(8位的字节)表示的请求体的长度。

  • Content-MD5

    1
    Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

    请求体的内容的二进制 MD5 散列值,以 Base64 编码的结果。

  • Content-Type

    1
    Content-Type: application/x-www-form-urlencoded

    请求体的多媒体类型(用于POST和PUT请求中)

  • Date

    1
    Date: Tue, 15 Nov 1994 08:12:31 GMT

    发送该消息的日期和时间(按照 RFC 7231 中定义的”超文本传输协议日期”格式来发送) 。

  • Expect

    1
    Expect: 100-continue

    表明客户端要求服务器做出特定的行为。

  • From

    1
    From: user@example.com

    发起此请求的用户的邮件地址。

  • Host

    1
    Host: coderq.github.io

    服务器的域名(用于虚拟主机 ),以及服务器所监听的 传输控制协议端口号。如果所请求的端口是对应的服务的标准端口,则端口号可被省略。

  • If-Match

    1
    If-Match: "737060cd8c284d8af7ad3082f209582d"

    仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要作用时,用作像 PUT 这样的方法中,仅当从用户上次更新某个资源以来,该资源未被修改的情况下,才更新该资源。

  • If-Modified-Since

    1
    If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

    允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified )。

  • If-None-Match

    1
    If-None-Match: "737060cd8c284d8af7ad3082f209582d"

    允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified )。

  • If-Range

    1
    If-Range: "737060cd8c284d8af7ad3082f209582d"

    如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个新的实体。

  • If-Unmodified-Since

    1
    If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT

    仅当该实体自某个特定时间已来未被修改的情况下,才发送回应。

  • Max-Forwards

    1
    Max-Forwards: 10

    限制该消息可被代理及网关转发的次数。

  • Origin

    1
    Origin: http://www.example-social-network.com

    发起一个针对跨来源资源共享的请求(要求服务器在回应中加入一个‘访问控制-允许来源’(’Access-Control-Allow-Origin’)字段)。

  • Pragma

    1
    Pragma: no-cache

    与具体的实现相关,这些字段可能在请求/回应链中的任何时候产生 多种效果。

  • Proxy-Authorization

    1
    Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

    用来向代理进行认证的认证信息。

  • Range

    1
    Range: bytes=500-999

    仅请求某个实体的一部分。字节偏移以0开始。

  • Referer

    1
    Referer: http://en.wikipedia.org/wiki/Main_Page

    表示浏览器所访问的前一个页面,正是那个页面上的某个链接将浏览器带到了当前所请求的这个页面。(“引导者”(“referrer”)这个单词,在RFC 中被拼错了,因此在大部分的软件实现中也拼错了,以至于,错误的拼法成为了标准的用法,还被当成了正确的术语) 。

  • TE

    1
    TE: trailers, deflate

    浏览器预期接受的传输编码方式:可使用回应协议头Transfer-Encoding 字段中的那些值,另外还有一个值可用,”trailers”(与” 分 块 “传输方式相关),用来表明,浏览器希望在最后一个尺寸为0的块之后还接收到一些额外的字段。

  • User-Agent

    1
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0

    浏览器的浏览器身份标识字符串。

  • Upgrade

    1
    Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

    要求服务器升级到另一个协议。

  • Via

    1
    Via: 1.0 fred, 1.1 example.com (Apache/1.1)

    向服务器告知,这个请求是由哪些代理发出的。

  • Warning

    1
    Warning: 199 Miscellaneous warning

    一个一般性的警告,告知,在实体内容体中可能存在错误。

响应头

  • Access-Control-Allow-Origin

    1
    Access-Control-Allow-Origin: *

    指定哪些网站可参与到跨来源资源共享过程中。

  • Accept-Patch

    1
    Accept-Patch: text/example;charset=utf-8

    指定服务器支持哪种文档格式。

  • Accept-Ranges

    1
    Accept-Ranges: bytes

    这个服务器支持哪些种类的部分内容范围。

  • Age

    1
    Age: 12

    这个对象在代理缓存中存在的时间,以秒为单位。

  • Allow

    1
    Allow: GET, HEAD

    对于特定资源有效的动作。针对405不允许该方法( 405 Method not allowed )而使用。

  • Cache-Control

    1
    Cache-Control: max-age=3600

    向从服务器直到客户端在内的所有缓存机制告知,它们是否可以缓存这个对象。其单位为秒。

  • Connection

    1
    Connection: close

    针对该连接所预期的选项。

  • Content-Disposition

    1
    Content-Disposition: attachment; filename="fname.ext"

    强制浏览器弹出下载窗口,注意不可以禁止缓存。

  • Content-Encoding

    1
    Content-Encoding: gzip

    在数据上使用的编码类型。参考超文本传输协议压缩。

  • Content-Language

    1
    Content-Language: da

    内容所使用的语言。

  • Content-Length

    1
    Content-Length: 348

    回应消息体的长度,以字节(8位为一字节)为单位。

  • Content-Location

    1
    Content-Location: /index.htm

    所返回的数据的一个候选位置。

  • Content-MD5

    1
    Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

    回应内容的二进制 MD5 散列,以 Base64 方式编码。

  • Content-Range

    1
    Content-Range: bytes 21010-47021/47022

    这条部分消息是属于某条完整消息的哪个部分。

  • Content-Type

    1
    Content-Type: text/html; charset=utf-8

    当前内容的MIME类型。

  • Date

    1
    Date: Tue, 15 Nov 1994 08:12:31 GMT

    此条消息被发送时的日期和时间(按照 RFC 7231 中定义的“超文本传输协议日期”格式来表示) 。

  • ETag

    1
    ETag: "737060cd8c284d8af7ad3082f209582d"

    对于某个资源的某个特定版本的一个标识符,通常是一个消息散列。

  • Expires

    1
    Expires: Thu, 01 Dec 1994 16:00:00 GMT

    指定一个日期/时间,超过该时间则认为此回应已经过期。

  • Last-Modified

    1
    Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

    所请求的对象的最后修改日期(按照 RFC 7231 中定义的“超文本传输协议日期”格式来表示) 。

  • Link

    1
    Link: </feed>; rel="alternate"

    用来表达与另一个资源之间的类型关系,此处所说的类型关系是在 RFC 5988 中定义的。

  • Location

    1
    Location: http://www.w3.org/pub/WWW/People.html

    用来进行重定向,或者在创建了某个新资源时使用。

  • Pragma

    1
    Pragma: no-cache

    与具体的实现相关,这些字段可能在请求/回应链中的任何时候产生多种效果。

  • Proxy-Authenticate

    1
    Proxy-Authenticate: Basic

    要求在访问代理时提供身份认证信息。

  • Public-Key-Pins

    1
    Public-Key-Pins: max-age=2592000; pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";

    用于缓解中间人攻击 ,声明网站的认证用的传输层安全协议证书的散列值。

  • Refresh

    1
    Refresh: 5; url=http://www.w3.org/pub/WWW/People.html

    用于重定向或当一个新的资源被创建。这个刷新会在5秒后执行。

  • Retry-After

    1
    Retry-After: 120
    Retry-After: Fri, 07 Nov 2014 23:59:59 GMT

    如果某个实体临时不可用,则此协议头用来告知客户端日后重试。其值可以是一个特定的时间段(以秒为单位)或一个超文本传输协议日期。

  • Server

    1
    Server: Apache/2.4.1 (Unix)

    服务器的名字。

  • Set-Cookie

    1
    Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

    HTTP cookie

  • Transfer-Encoding

    1
    Transfer-Encoding: chunked

    用来将实体安全地传输给用户的编码形式。当前定义的方法包括:分块、压缩(compress)、缩小(deflate)、压缩(gzip)、实体(identity)。

  • Upgrade

    1
    Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

    要求客户端升级到另一个协议。

  • Vary

    1
    Vary: *

    告知下游的代理服务器,应当如何对未来的请求协议头进行匹配,以决定是否可使用已缓存的回应内容而不是重新从原始服务器请求新的内容。

  • Via

    1
    Via: 1.0 fred, 1.1 example.com (Apache/1.1)

    告知代理服务器的客户端,当前回应是通过什么途径发送的。

  • Warning

    1
    Warning: 199 Miscellaneous warning

    一般性的警告,告知在实体内容体中可能存在错误。

  • WWW-Authenticate

    1
    WWW-Authenticate: Basic

    表明在请求获取这个实体时应当使用的认证模式。

Accept与Content-Type的区别

  • Accept代表发送端希望得到的数据类型
  • Content-Type代表客户端或服务端发送的实体数据的数据类型

扩展阅读:官方文档

参考资料

MongoDB的NodeJS版API操作笔记

upsert的使用

今天用upsert为数据库增加一些可能没有的ISBN号,结果怎么试都不成功,求助于github上的文档才得以解决。
使用upsert要注意upsert的值必须是true,1是不可以的

1
db.collection('isbn').updateOne({
	isbn: info.isbn
}, {$set: info}, {
	upsert: true
}, function(err, ret) {
	if (err) reject(err);
	else resolve(ret.result);
});

Redis学习笔记(一)

数据库

redis数据库可以和mysql、mongodb数据库一样切换数据库,用select命令

1
select 1 # 切换到代号为1的数据库

数据库的个数是在数据库启动时设定的,根据源码中dbnum来设定,默认为16个。

数据库存储结构

Redis是一个键值对数据库,所以数据库本身也是一个字典
Redis数据库存储结构
Redis为了提升访问性能,当某些元素被释放之后,依然保存原先指向该元素的空间,具体可以访问以下地址做进一步的了解。
http://redisbook.readthedocs.org/en/latest/internal/db.html

MAC常用命令(一)

压缩/解压缩

tar

zip/unzip

rar/unrar

有些时候会从网上下载到rar格式的文件,对于rar后缀的压缩文件,我们必须使用相应的程序来解压。

  • rarlib下载最新的应用程序;
  • 解压tar.gz压缩包
1
unrar x <yourfile>.rar

进程相关

top

1
top

显示当前运行的所有进程,可以查看进程的PID

ps x|grep

1
ps x|grep redis

kill

1
kill 999

实在杀不了的话,打开进程管理干掉吧。。。

HTTP状态码

1XX

100 (请继续发送)

客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。

101 (转换协议)

服务器已经理解了客户端的请求,并将通过Upgrade消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施。例如,切换到新的HTTP版本(如HTTP/2)比旧版本更有优势,或者切换到一个实时且同步的协议以传送利用此类特性的资源。出现场景:使用socket.io时,服务端响应客户端请求后,返回了101状态码。

2XX

200 (请求成功)

请求已成功,请求所希望的响应头或数据体将随此响应返回。

201 (已创建)

请求已经被实现,而且有一个新的资源已经依据请求的需要而创建,且其URI已经随Location头信息返回。restful中,任何创建成功都应该返回该代码。出现场景:使用orientdb的api创建类的时候,http返回201状态码。

202 (已接受,但尚未处理)

服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了。
返回202状态码的响应的目的是允许服务器接受其他过程的请求(例如某个每天只执行一次的基于批处理的操作),而不必让客户端一直保持与服务器的连接直到批处理操作全部完成。在接受请求处理并返回202状态码的响应应当在返回的实体中包含一些指示处理当前状态的信息,以及指向处理状态监视器或状态预测的指针,以便用户能够估计操作是否已经完成。出现场景:客户端发起了一个请求,该请求需要处理的业务量较大,并且服务端可以直接返回,不需要等待业务执行完之后再返回,则服务端应返回202状态码。

203 (非权威的信息)

服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。

204 (没有内容)

服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。如果存在这些头部信息,则应当与所请求的变量相呼应。如果客户端是浏览器的话,那么用户浏览器应保留发送了该请求的页面,而不产生任何文档视图上的变化,即使按照规范新的或更新后的元信息应当被应用到用户浏览器活动视图中的文档。由于204响应被禁止包含任何消息体,因此它始终以消息头后的第一个空行结尾。

  1. 公司需要一个实时查看用户行为的功能,用户行为记录在远程的某台服务器,服务器可以通过一个http地址将用户信息以post的方式推送回来。于是,使用node.js搭建了一个服务,服务提供一个API接口用于接收此信息;另开启一个html实时展示页面,该html页面与服务器以长链接的方式进行通信,当接收信息的API收到具体信息时,将消息通过长链接实时推送给html页面。接收远程服务器抛送过来的信息的API接口,每当收到消息时,返回204代码。

205 (重置内容)

服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。与204响应一样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。

3XX

300 (多种选择)

服务器根据请求可执行多种操作。服务器可根据请求者来选择一项操作,或提供操作列表供其选择。

301 (永久转移)

请求的页面已被永久转移到新的位置。服务器返回此相应时,会自动讲请求者转到新位置。您应使用此代码通知搜索引擎蜘蛛网页或网站已被永久移动到新位置。

302 (临时移动)

服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。会自动将请求者转到不同的位置。但由于搜索引擎会继续抓取原有位置并将其编入索引,因此您不应该使用此代码来告诉搜索引擎页面或网站已被移动。

303 (查看其他位置)

当请求者应对不同的位置进行单独的GET请求以检索响应时,服务器会返回此代码。对于除head请求之外的所有请求服务器会自动转到其他位置。

304 (未修改)

自从上次请求后,请求的网页未被修改过。服务器返回此响应时,不会返回网页内容。如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应。由于服务器可以告诉搜索引擎自上次抓取后网页没有更改过,因此可以节省带宽和开销。

305 (使用代理)

请求者只能使用代理访问请求的页面。如果服务器返回此响应,那么服务器还会指明应当使用的代理。

307 (临时重定向)

服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置进行以后的请求。会自动将请求者转移到不同的位置。但由于搜索引擎会继续抓取原有位置并将其编入索引,因此您不应使用此代码来告诉搜索引擎某个页面或网站已被移动。

4XX

400 (请求错误)

由于包含语法错误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。出现场景:使用socket.io时,前后端版本不一致偶尔会导致这样的问题。一般是请求的格式无法被服务端理解所致。

401 (需要认证)

当前请求需要用户验证。该响应必须包含一个适用于被请求资源的WWW-Authenticate信息头用以询问用户信息。客户端可以重复提交一个包含恰当的Authorization头信息的请求。如果当前请求已经包含了Authorization证书,那么401响应代表着服务器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。参见RFC 2617。

402 (需要付款)

该状态码是为了将来可能的需求而预留的。

403 (已被禁止)

服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个HEAD请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个404响应,假如它不希望让客户端获得任何信息。出现场景:做爬虫经常遇到,解决方法是用代理访问或着修改user-agent为正常浏览器的user-agent。

404 (未找到)

请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。

405 (方式不被允许)

请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow头信息用以表示出当前资源能够接受的请求方法的列表。
鉴于PUT,DELETE方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。

406 (无法接受的请求)

请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
除非这是一个HEAD请求,否则该响应就应当返回一个包含可以让用户或者浏览器从中选择最合适的实体特性以及地址列表的实体。实体的格式由Content-Type头中定义的媒体类型决定。浏览器可以根据格式及自身能力自行作出最佳选择。但是,规范中并没有定义任何作出此类自动选择的标准。

  1. 假如客户端要求服务端以某种压缩格式返回内容,例如gzip,但服务端并不支持该功能,则服务端返回406状态码。

    407 (代理需要认证)

    与401响应类似,只不过客户端必须在代理服务器上进行身份验证。代理服务器必须返回一个Proxy-Authenticate用以进行身份询问。客户端可以返回一个Proxy-Authorization信息头用以验证。参见RFC 2617。

    409 (冲突)

    由于和被请求的资源的当前状态之间存在冲突,请求无法完成。这个代码只允许用在这样的情况下才能被使用:用户被认为能够解决冲突,并且会重新提交新的请求。该响应应当包含足够的信息以便用户发现冲突的源头。
    冲突通常发生于对PUT请求的处理中。例如,在采用版本检查的环境下,某次PUT提交的对特定资源的修改请求所附带的版本信息与之前的某个(第三方)请求向冲突,那么此时服务器就应该返回一个409错误,告知用户请求无法完成。此时,响应实体中很可能会包含两个冲突版本之间的差异比较,以便用户重新提交归并以后的新版本。使用post创建资源时发生冲突。。。

5XX

500 (服务出错)

服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。出现场景:代码执行异常时返回该响应码。

501 (未执行)

服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。

502 (网关错误)

作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。出现场景:使用nginx等服务器作为代理时,如果后端服务器无法被访问,则nginx返回该代码。

503 (服务不可用)

由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个Retry-After头用以标明这个延迟时间。如果没有给出这个Retry-After信息,那么客户端应当以处理500响应的方式处理它。

504 (网关超时)

作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。注意:某些代理服务器在DNS查询超时时会返回400或者500错误。出现场景:上游服务器已启动,但未及时地对该请求作出响应。

505 (HTTP版本不支持) 服务器不支持,或者拒绝支持在请求中使用的HTTP版本。这暗示着服务器不能或不愿使用与客户端相同的版本。响应中应当包含一个描述了为何版本不被支持以及服务器支持哪些协议的实体。

,