必备-5.http状态码及报文字段列表
http状态值
状态值是判断请求的
- 0:==未初始化==,尚未调用open()
- 1:==启动==,已经调用open(),但尚未调用send()
- 2:==发送==,已经调用send(),但尚未接收响应
- 3:==接收==,已经接受大部分响应数据
- 4:==完成==,已经接收到全部响应,而且已经可以在浏览器中使用了
http状态码
状态码分类(判断响应)
- 1xx:==信息响应类==,【快递正在路上】,表示服务器端接受了请求并正在处理
- 2xx:==处理成功响应类==,【快递送到了你手上】,表示操作被成功接收并处理
- 3xx:==重定向响应类==,【快递送到了快递柜】,表示为了完成指定动作,必须接受进一步处理
- 4xx:==客户端错误,==【客户地址的错误】,客户请求包含语法错误或者不能正确执行
- 5xx:==服务器端错误==,【商家无能的错误】,服务器不能正确执行一个正确请求
| 状态码 | 状态码英文名称 | 中文描述 |
|---|---|---|
| ==1xx== | ==2个== | ==响应处理类== |
| 100 | Continue | 继续。客户端应继续请求 |
| 101 | Switching Protocols | 切换协议。(Websocket 握手)通过Upgrade 消息头通知客户端切换到指定版本的http协议,服务器端也会切换为这个指定的http协议。 |
| ==2xx== | ==7个== | ==响应成功== |
| 200 | OK | 请求成功。一般用于GET与POST请求 |
| 201 | Created | 已创建。常出现在POST请求,后台已经创建了新的资源 |
| 202 | Accepted | 已接受。已经接受请求,但处理未完成 |
| 203 | Non-Authoritative Information | 非授权信息。请求成功。但获取的数据不是在你请求的服务器上得到的 |
| 204 | No Content | 空内容。服务器成功处理,但未返回内容。 |
| 205 | Reset Content | 重置内容。服务器处理成功,通知客户端重置文档视图。 |
| 206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
| ==3xx== | ==8个== | ==请求重定向:为了完成某个请求,必须接受进一步处理== |
| 300 | Multiple Choices | 多种选择。请求的资源存在于多个位置,可返回一个资源说明与地址列表供用户选择 |
| 301 | Moved Permanently | **==永久重定向==**重定向到新URL,以后用新URL访问 |
| 302 | Found | ==临时重定向==,与301类似。可以继续使用原有URI,禁止 POST 变换成 GET |
| 303 | See Other | 需要使用GET方法临时重定向。与302类似。但希望客户端使用GET方法请求 |
| 304 | Not Modified | 数据未修改。所请求的资源未修改,客户端可直接使用缓存 |
| 305 | Use Proxy | 需要使用代理服务器。所请求的资源必须通过代理访问 |
| 306 | Unused | 已经被废弃的HTTP状态码 |
| 307 | Temporary Redirect | 是否使用POST方法临时重定向。与302类似。浏览器询问用户是否再次post |
| ==4xx== | ==18个== | ==客户端问题==(客户端=你,服务器端=你女朋友) |
400 | Bad Request | 请求的URI语法错误,服务器无法理解(==给女朋友打电话,手机号里带英文==) |
401 | Unauthorized | 无权访问:(==女朋友把你拉黑了==) |
| 402 | Payment Required | 还没用,将来使用 |
403 | Forbidden | 拒绝响应:服务器接收到了请求,但是做响应(==女朋友不想搭理你==) |
404 | Not Found | 服务器根据请求的URI路径找不到资源(网页)。网站设计人员可设置"您所请求的资源无法找到"的个性页面(==你女朋友从来没有过钱==) |
| 405 | Method Not Allowed | 方法被禁用:(如GET、POST等)(==女朋友只允许你给他寄东西,不允许你从她那拿东西==) |
| 406 | Not Acceptable | 无法生成响应体:请求的资源内容特性无法满足请求头中的条件,比如:客户端无法解析服务端返回的内容(==你要MAC air,女朋友给你寄了个mac口红==) |
| 407 | Proxy Authentication Required | 需要代理身份的验证:(==你托取货员到女朋友家取货,你女朋友得确认是不是你叫的那个取货员==) |
408 | Request Time-out | 请求超时:服务器等待客户端发送的请求时间过长(==你不接你女朋友电话==) |
| 409 | Conflict | 处理请求的资源状态冲突。服务器完成客户端的 PUT 请求时可能返回此代码(==女朋友来事,你给她买冰淇淋+西瓜+冰镇可乐==) |
| 410 | Gone | 请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置(==你对象有过钱,但现在没有了==) |
| 411 | Length Required | 服务器要求请求头中必须有Content-Length字段(==女生找对象:必须先告诉身高==) |
| 412 | Precondition Failed | 客户端请求信息的前提条件错误:比如:当客户端的If-Unmodified-Since时间与服务器的last-modefied时间不一致时,则判断这个条件为==false==。(==女生找对象的前提条件:有车有房,你都没有==) |
| 413 | Request Entity Too Large | 请求实体过大。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息(==你跟你女朋友要五百万==) |
| 414 | Request-URI Too Large | 请求的URI过长。(URI通常为网址),服务器无法处理(==你给你对象写了10万字的要求,你对象看都不看,烧了==) |
| 415 | Unsupported Media Type | 不支持的媒体类型(==你对象不想要照骗,想看真人==,【网恋需谨慎】) |
| 416 | Requested range not satisfiable | 无法满足请求范围,一般由断点续传时客户端发送的range字段,服务器找不到相应范围的数据。 |
| 417 | Expectation Failed | 无法满足期望的请求头信息,执行失败 |
| ==5xx== | ==6个== | ==服务器端问题==(客户端=你,服务器端=你女朋友) |
| 500 | Internal Server Error | 服务器内部错误,无法完成请求(==你女朋友手机坏了==) |
| 501 | Not Implemented | 服务器拒绝请求,无法完成请求(==你女朋友把你拉黑了==) |
| 502 | Bad Gateway | 网关错误:代理服务器收到远程服务器无效响应【与服务器建立连接了】(==你女朋友接电话了,但你听不到她跟你说话==) |
| 503 | Service Unavailable | 服务器超载或系统维护,无法响应。,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中(==你女朋友在跟别人打电话==) |
| 504 | Gateway Time-out | 网关超时:充当网关或代理的服务器,未及时获得远端服务器的响应【没与服务器建立连接】(==你女朋友没接你电话==) |
| 505 | HTTP Version not supported | 请求的http版本不支持(==你用qq给你女朋友的手机号打电话==) |
1.http1.0、http1.1、http1.2三个版本发布时间?
- 1991年http0.9发布
- 1996年http1.0发布
- 1999年http1.1发布
- 2015年http2.0发布
- http1.1和http2.0之间,经历了16年之久,有些时间久远的网站无法实现http1.1到http2.0的版本跨越,所以现在还在用1.1
2.http1.0、http1.1、http1.2三个版本区别?
-
http1.0和http1.1对比
- ==缓存处理==:http1.0用
expires和last-modified来作为缓存判断的标准,http1.1引入了更多的缓存控制策略:cache-Control、etag - ==错误通知==:http1.1新增了24个错误状态响应码,如
- 409:Conflict,处理请求资源时冲突
- 410:Gone,表示服务器上的某个资源被永久性删除了
- ==长连接==:HTTP1.1中默认开启Connecton:keep-alive,一定程度弥补了HTTP1.0每次请求都要创建连接的缺点。
- ==带宽优化==:http1.1支持断点续传,即返回码是
206(Partial Content) - ==虚拟机Host头处理==:
- 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL不存在主机名(
hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。 - HTTP1.1的请求消息和响应消息都支持Host头域,请求消息中如果没有Host头域,会报一个错(
400 Bad Request)
- 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL不存在主机名(
- ==缓存处理==:http1.0用
-
http2.0和http1.x对比
-
==header压缩==:
HTTP1.x:的header带有大量信息,而且每次都重复发送。HTTP2.0: 使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小
-
==服务端推送(server push):==
-
http1.x:向服务器请求啥文件,服务器就给啥 -
http2.0:例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了-
// 通过在应用生成HTTP响应头信息中设置Link命令 Link: </styles.css>; rel=preload; as=style, </example.png>; rel=preload; as=image
-
-
-
==二进制格式传输(Binary Format)==:
HTTP1.x:的解析是基于【文本】,基于文本的格式解析存在天然限制,要想做到健壮性需要考虑多个场景HTTP2.0:的解析时基于【二进制】,只认0和1的组合,不需要考虑传输文件的格式,健壮性强
-
==多路复用(MultiPlexing)==:
-
HTTP/1.0:[用完就关]每次请求响应,建立一个TCP连接,用完关闭 -
HTTP/1.1:「长连接」 若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞; -
HTTP/2.0:「多路复用」一个连接上开启多个请求,某个请求任务耗时严重,不会影响到其它连接的正常执行;
-
-
3..http1.0、http1.1、http1.2三个版本区别?
http1.0与1.1
- ==缓存处理==
- ==错误通知==
- ==长连接==
- ==带宽优化==
- ==host头处理==
http1.1与2.0
- ==header压缩==
- ==服务器端推送==
- ==二进制传输==
- ==多路复用==
报文头字段
| 字段名 | 说明 |
|---|---|
| ==General(通用报文)== | ==可以理解为是基本信息==,4个 |
| Request URL | www.zhufengpeixun.cn/ ---请求地址 |
| Request Method | GET ---请求的资源的方式。GET一般发送资源请求 |
| Status Code | 200 OK ---服务器返回的状态码 |
| Remote Address | 123.57.205.204:80 ---服务器的外网IP以及我请求的端口号 |
| ==Response Headers== | ==(响应头)==,10个 |
| HTTP版本号 | 响应起始行 |
| Date | 服务器时间 |
| Server | 服务器端通过什么工具创建的web服务【Apache/nignx】。 |
| Connection | 是否长连接==(keep-alive==) |
| Keep-Alive | 保持chang链接的时间 |
| set-Cookie | 将服务器处理生成的==connect.sid==放到响应头中带回去,客户端可以根据这个生成cookie缓存 |
| ETag | 是否设置协商缓存,以及缓存的周期 http1.1 |
| Last-Modified | 是否设置协商缓存,以及缓存的周期 http1.0 |
| Cache-Control | 是否设置强缓存,以及缓存的周期,http1.1 |
| Expires | 是否设置强缓存,以及缓存的周期,http1.0,一般是一个日期格式,他就是过期日期 |
| ==Request Headers== | ==(请求头)==,12个 |
| Accept | 方式 |
| Accept-Encoding | 编码格式 |
| Accept-Language | 语言 |
| Cache-Control | 强缓存,HTTP1.1版本新增 |
| Connection | ConnectionID 表示的就是TCP建立连接的ID,google可以提供最多6个TCP连接。 |
| Cookie | 把本地的Cookie带给服务器,Cookid(网络饼干,储存在用户本地终端上的数据) |
| Content-Type | 传参给服务器内容的类型。 |
| Host | 虚拟主机名,http1.1提出的Host头域优化 |
| if-Modified-Since | 设置协商缓存后,请求头返回这个信息和服务器作对比,资源是否相同,http1.1 |
| if-None-Match | 设置协商缓存后,请求头返回这个信息和服务器作对比,资源是否相同,http1.0 |
| Upgrade-Insecure-Requests | HTTP Upgrade-Insecure-Requests 请求头向服务器发送一个客户端 对HTTPS加密和认证响应良好,并且可以成功处理的信号,可以请求所属网站所有的HTTPS资源。 |
| User-Agent | 当前浏览器的版本信息客户端发送的请求头信息,服务器就可以通过这个请求头接收到信息 |