zoukankan      html  css  js  c++  java
  • 【HTTP】HTTP报文&状态码

    HTTP报文中的HTTP信息

    一、编码提升传输速率

    编码的好处:有效处理大量的访问请求

    编码的弊端:会消耗更多的CPU资源

    报文主体&实体主体

    报文:HTTP通信的基本单元,8位组字节流组成,通过HTTP通信传输

    实体:作为请求或响应的有效载荷数据被传输,实体首部+实体主体

    一般情况下 报文=实体

    编码操作时 报文≠实体 实体主体的内容发生了变化

    常见的内容编码:gzip、compress(UNIX系统的标准编码)、deflate、identity(不编码)

    分块传输编码:将实体主体分块,分割发送数据,逐步显示在页面。

    二、发送多种数据的多部分对象集合

    MIME多用途因特网邮件扩展机制:允许邮件处理文本、图片、视频等多个不同类型的数据。MIME中使用多部分对象集合的方法来容纳多份不同类型的数据。

    多部分对象集合包含的对象包括:

      1. multipart/form-data:在Web表单文件上传时使用

      2. multipart/byteranges:状态码为206 Partial Content响应报文包含多个范围的内容时使用

    三、获取部分内容的范围请求

    下载中断问题的解决:可恢复机制,从下载出恢复下载

    可恢复机制的实现:在请求中指定下载的实体范围。

    例如:

    请求5001-10000字节:Range: bytes=5001-10000

    请求5001之后全部的内容:Range: bytes=5001-

    从一开始到3000字节和5000-7000字节的多重范围:Range: bytes=-3000, 5000-7000

    响应会返回状态码位206Partial Content的响应报文,如果是多重范围的范围请求,会在首部字段的Content-Type中标明multipart/byteranges。

    如果服务器无法响应范围请求,则会返回状态码200OK和完整的实体请求

    四、内容协商

    内容协商机制:客户端和服务端就响应的资源内容进行交涉,提供给客户端最为合适的资源。内容协商的判断基准:响应资源的语言、字符集、编码方式等。

    具体的应用举例:当浏览器默认语言是英语/中文,访问相同的WEB页面,显示对应的英文/中文。

    请求报文中的某些首部字段可以作为判断的基准:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language

    内容协商技术的三种类型

    1. 服务器驱动协商:以请求的首部字段作为参考,在服务端处理。以浏览器发送的信息作为判定依据,对用户而言不一定最优。

    2. 客户端驱动协商:用户在浏览器中进行选择。或者利用JavaScript脚本在Web页面上字段进行选择。例如根据OS和浏览器类型,自动切换为PC页面/手机页面。

    3. 透明协商:服务器驱动协商+客户端驱动协商

    HTTP状态码

    一、HTTP状态码及其分类

    状态码:表示HTTP请求的返回结果,用于标记服务器端处理是否正常,通知出现的错误。

    状态码的类别
      类别 原因
    1XX 信息性状态码 接收的请求正在处理
    2XX 成功状态码 请求正常处理完毕
    3XX 重定向状态码 需要进行附加操作以完成请求 
    4XX 客户端错误 服务端无法处理请求
    5XX 服务端错误 服务处理请求出错

    二、成功状态码2XX

    1. 200 OK

    表明从客户端发来的请求在服务端正常处理了。响应报文内,随状态码一起返回的信息会根据方法的不同而不同。GET获取到的信息是请求资源的实体。HEAD获取到的是实体首部,不获取实体的主体部分。

    2. 204 OK

    表明服务器接收的请求已经成功处理,但是返回的响应报文中不包含实体的主体部分。例如,浏览器发出请求后得到204响应,则浏览器显示的页面不会更新。

    使用场景:需要客户端向服务端发信息,但不需要发送新信息内容。

    3. 206 Partial Content

    表示客户端发送了范围请求,服务端成功处理了请求。响应报文中包含由Content-Range指定范围的实体内容。

    三、3XX重定向

    3XX表明浏览器需要执行某些特殊的处理,从能正确处理请求

    1. 301 Moved Permanently

    永久性重定向。该状态码表示请求的资源已被分配了新的URI,之后使用的资源是新的URI的内容。(客户端要主动变更书签引用)【搬家房子卖了】

    2. 302 Found

    临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。(客户端不需要操作)已移动的资源对象的URI将来可能还会发生改变。【去旅游了暂时住在宾馆 旅游结束还可以回去】

    3. 303 See Other

    表示由于请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。类似于302,但303明确表示了要让客户端用GET方法获取资源。

    例如:使用POST访问CGI程序,执行结果是希望客户端以GET方法重定向到另一个URI,返回303。(现在很多浏览器将302视为303)

    4. 304 Not Modified

    表示客户端发送附带条件(GET请求报文中包含if-match/if-modified-since/if-none-match/if-range/if-unmodified-since)的请求时,服务端允许请求访问资源,但是不满足条件。304返回时,不包含任何响应的主体部分。【虽然是3XX但是和重定向无关】

    说明无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如GET 或HEAD 或在请求中附带了头部信息: If-None-Match 或If-Modified-Since。

    如果是 200 OK ,响应会带有头部 Cache-Control, Content-Location, Date, ETag, Expires,和 Vary.

    5. 307 Temporary Redirect

    临时重定向,和302相同,302禁止POST变换为GET,但大家不遵守。307会遵照浏览器的标准,不会从POST变成GET,但是处理响应时的行为,不同的浏览器有不同的情况。

    四、客户端错误4XX

    1. 400 Bad Request

    请求报文中存在语法错误,服务端无法理解请求。浏览器会像200 OK一样对待该状态码。

    2. 401 Unauthorized

    请求需要由通过HTTP认证的认证信息。如果之前已经进行过1此请求,则表示用户认证失败。必须包含一个适用于被请求资源的WWW-Authenticate首部用于质询用户信息。当浏览器初次接收到401时弹出认证的堆化窗口。

    3. 403 Forbidden

    请求资源的访问被服务器拒绝了。例如:没有获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源ip地址视图访问)

    4. 404 Not Found

    服务器上无法找到请求的资源。

    五、服务端错误5XX

    1. 500 Internal Servcer Error

    服务器在执行请求时发生了错误。Web应用中存在bug或某些临时的障碍。

    2. 503 Serivce Unavailable

    表明服务器很忙,处于超负载或正在进行停机维护,现在无法处理请求。如果直到接触繁忙状态需要的时间,可以写入Retry-After首部字段再返回给客户端。

    状态码和状态的不一致:web应用程序的内部发生错误,状态码仍为200 OK的情况,也时常发生。

  • 相关阅读:
    ios swift模仿qq登陆界面,xml布局
    类和结构体的区别
    获取或者设置时,无后缀和A后缀和W后缀的区别
    mfc控件学习
    MFC之简单计算器
    双冒号、点操作、箭头的区别
    MFC使用MsComm做串口通信
    保存结构体到本地(二进制)
    文件管理函数
    文件定位的几个函数
  • 原文地址:https://www.cnblogs.com/xdcat/p/12917155.html
Copyright © 2011-2022 走看看