美文网首页
图解 HTTP

图解 HTTP

作者: phpnet | 来源:发表于2019-12-25 08:19 被阅读0次

    图解 HTTP

    [TOC]

    前言

    返回结果的 HTTP 状态码

    HTTP 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

    状态码,以 3 位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。响应类别有以下 5 种。

    在 RFC2616 上的 HTTP 状态码就达 40 种,若再加上 WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)(RFC4918、5842) 和附加 HTTP 状态码(RFC6585)等扩展,数量就达 60 余种,实际上经常使用的大概只有 14 种。

    • 200 OK:表示从客户端发来的请求在服务器端被正常处理了。
    • 204 No Content:该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。
    • 206 Partial Content:该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。
    • 301 Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。这时应该按 Location 首部字段提示的 URI 重新保存。
    • 302 Found:临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
    • 303 See Other:该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。与 302 不同的是,303 状态码明确表示客户端应当采用 GET 方法获取资源。
    • 304 Not Modified:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。
    • 307 Temporary Redirect:临时重定向。与 302 基本相同,307 会遵照浏览器标准,不会从 POST 变成 GET。
    • 400 Bad Request:该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
    • 401 Unauthorized:该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。
    • 403 Forbidden:状态码表明对请求资源的访问被服务器拒绝了。
    • 404 Not Found:该状态码表明服务器上无法找到请求的资源。
    • 500 Internal Server Error:该状态码表明服务器端在执行请求时发生了错误。
    • 503 Service Unavailable:该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

    与 HTTP 协作的 Web 服务器

    HTTP 通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。它们可以配合服务器工作。

    • 代理:代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
    • 网关:网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。
    • 隧道:隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

    在 HTTP 通信过程中,可级联多台代理服务器。请求和响应的转发会经过数台类似锁链一样连接起来的代理服务器。转发时,需要附加 Via 首部字段以标记出经过的主机信息。

    代理有多种使用方法,按两种基准分类。一种是是否使用缓存,另一种是是否会修改报文。

    • 缓存代理:代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本(缓存)保存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。
    • 透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理(Transparent Proxy)。反之,对报文内容进行加工的代理被称为非透明代理。

    HTTP 首部

    字段名 说明 示例
    Accept 指定客户端能够接收的内容类型 Accept: text/html
    Accept-Charset 客户端可以接受的字符编码集 Accept-Charset: utf-8
    Accept-Encoding 能够接受的内容编码方式 Accept-Encoding:gzip, deflate
    Accept-Language 可以接受的自然语言列表 Accept-Language:zh-CN,zh;q=0.9,en;q=0.8
    Accept-Datetime 指定接受的版本时间 Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT
    Authorization 用于身份认证的凭证信息 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Cache-Control 指定请求缓存机制 Cache-Control: no-cache
    Connection 连接类型(默认持久连接) Connection: keep-alive
    Cookie 向服务器发送的Cookie信息 Cookie: $Version=1; Skin=new;
    Content-Length 请求信息长度 Content-Length: 348
    Content-Type 当前请求MIME类型 Content-Type:application/json; charset=utf-8
    Date 发送时间 Date:Thu, 23 Nov 2017 14:41:17 GMT
    Expect 指明需要的特定服务器行为 Expect: 100-continue
    Host 指明请求服务器的域名和端口号 Host:www.baidu.com:80
    If-Match 只有请求内容与实体相匹配才有效 If-Match: "737060cd8c284d8af7ad3082f209582d"
    If-Modified-Since 设置更新时间 If-Modified-Since: Sat,29 Oct 1994 19:43:31 GMT
    If-None-Match 设置客户端ETag值 If-None-Match: "737060cd8c284d8af7ad3082f209582d"
    If-Range 适用于断点续传下载 If-Range: "737060cd8c284d8af7ad3082f209582d"
    If-Unmodified-Since 请求体在给定时间未修改才响应 If-Unmodified-Since: Sat,29 Oct 1994 19:43:31 GMT
    Max-Forwards 限制代理或网关转发消息的次数 Max-Forwards: 10
    Origin 跨域资源请求的地址 Origin: http://www.baidu.com
    Pragma 设置特殊实现的指令 Pragma: no-cache
    Proxy-Authorization 向连接代理认证的凭证信息 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Range 指定请求返回的字节数范围 Range: bytes=500-999
    Referer 表明当前请求从哪个页面过来的 Referer: http://www.baidu.com
    TE 指明期望使用的传输编码 TE: trailers, deflate
    User-Agent 请求用户的身份信息 Mozilla/5.0 (Mac OS X 10_13_1) Chrome/62.0.3202.94 Safari/537.36
    Upgrade 请求服务端升级协议 Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
    Via 表明请求代理的来源地址 Via: 1.0 fred, 1.1 example.com(Apache/1.1)
    Warning 消息实体中可能存在错误的警告 Warning: 199 Miscellaneous warning

    相关文章

      网友评论

          本文标题:图解 HTTP

          本文链接:https://www.haomeiwen.com/subject/exbqoctx.html