图解 HTTP

图解 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • 网络基础知识 URL和URI URI(Uniform Resource Idenifier)统一资源标识符。即由某...
    d9fc24a0c9a9阅读 1,128评论 0 6
  • 本文是《图解HTTP》读书笔记的第一篇,主要包括此书的前五章内容,简要记录一下。大概分为以下几部分: TCP/IP...
    lijiankun24阅读 1,312评论 0 2
  • HTTP 图解笔记 一 .简单了解 1.1HTTP背景 1.1.1 HTTP的诞生 1989 年 3 月,互联网还...
    Aaron96阅读 1,044评论 0 4
  • [TOC] 1.Web及网络基础 1.1TCP/IP分层 TCP/TP协议族里重要的一点就是分层。TCP/IP协议...
    dogLin阅读 1,837评论 0 0
  • 每个人来到这世上,都会遇见许多人,人生何处不相逢呢。 我喜欢在过街天桥上看人来人往。 我喜欢在马路边上看车辆川流不...
    黑茉莉97阅读 248评论 0 0