《图解HTTP》读书笔记2之HTTP报文内的HTTP信息

一,HTTP报文
用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文称为请求报文,响应端(服务器端)的叫做响应报文。
HTTP报文大致可分为报文首部和报文主体两部分,两者由最初出现的空行(CR+LF)来划分。通常并不一定要有报文主体。
请求报文和响应报文的首部内容由以下数据组成:
1,请求行
包含用于请求的方法,请求URI和HTTP版本;
2,状态行
包含表明响应结果的状态码,原因短语和HTTP版本;
3,首部字段
包含表示请求和响应的各种条件和属性的各类首部;一般有四个首部,分别是:通用首部、请求首部、响应首部和实体首部;
4,其他:
可能包含HTTP的RFC里未定义的首部(Cookie等)。

报文主体和实体主体的差异
报文是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。实体是作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
报文的主体用于传输请求或响应的实体主体。通常报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容发生变化,才与报文主体产生差异。

HTTP协议中有一种被称为内容编码的功能,使邮件容量变小,以ZIP压缩文件添加附件放松。常用的内容编码有以下几种:
1,GZIP(GNU Zip)
2,compress(UNIX系统的标准压缩)
3,deflate(zlib)
4,identity(不进行编码)

在HTTP通信过程中,请求的编码实体资源未全部传输完成之前,浏览器无法显示请求页面。但传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码。使用分块传输编码的实体主体由接受的客户端负责解码,恢复编码前的实体主体。

发送邮件时,我们可以在邮件里写入文字并添加多份附件,这可以采用MIME(多用途因特网邮件扩展)机制,它允许邮件处理文本、图片、视频等多个不同类型的数据。

HTTP协议中也采纳了多部分对象集合,发送的一份报文主体可含有多类型实体。通过是在图片或文本文件等上传时使用。但是用户在下载过程中会出现图片或文件下载过程中断的情况,需要重新开始,因此这其中需要一种可恢复的机制,即指能从之前下载中断处恢复下载。要实现这种功能需要指定下载的实体范围,这种指定范围发送的请求叫做范围请求。


针对范围请求,响应会返回状态码为206 Partial Content的响应报文。多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。如果服务器无法响应范围请求,则会返回状态码200 OK和完整的实体内容。


内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供給客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。包含在请求报文中的某些首部字段就是判断的基准。
1,Accept
2,Accept-Charset
3,Accept-Encoding
4,Accept-Language
5,Content-Language

内容协商技术可以有以下3种类型:
1,服务器驱动协商,即由服务器端进行内容协商。以请求的首部字段为参考,服务器端会自动处理。
2,客户端驱动协商,即由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手动选择。还有利用JavaScript脚本在Web页面上自动进行选择。
3,透明协商,即服务器驱动和客户端驱动的结合体。

二,返回结果的HTTP状态码
HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务器端的处理是否正常,通知出现的错误等工作。
状态码的类别主要有以下几种:


HTTP状态码种类繁多,简述下列几种常见的状态码:
2XX的响应结果表明请求被正常处理了。
1,200 OK
表示从客户端发来的请求在服务器端被正常处理了。注意的是,在响应报文内,随状态码一起返回的信息回因方法的不同而发生改变。


2,204 No Content
该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。
3,206 Partial Content

该状态码表示客户端进行了范围请求,服务器也成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。



3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
1,301 Moved Permanently
永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
2,302 Found
临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。但是与301状态码不同的是已移动的资源对应的URI将来还有可能发生改变。
3,303 See Other
该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。
4,304 Not Modified
该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304被划分在3XX类别中,但和重定向没有关系。
5,307 Temporary Redirect

临时重定向。该状态码和302 Found有着相同的含义。尽管302标准禁止POST改为GET,但实际使用时大家并不遵守。但是307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同情况。

4XX的响应结果表明客户端是发生错误的原因所在。
1,400 Bad Request
该状态码表示请求报文中存在语法错误。


2,401 Unauthorized
该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外,若之前已进行过一次请求,则表示拥护认证失败。返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用以质询用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。


3,403 Forbidden
该状态码表示对请求资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的详细理由,但是如果想作说明,可以在实体的主体部分对原因进行详述。
4,404 Not Found

该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端被拒绝请求且不想说明理由时使用。

5XX的响应结果表明服务器本身发生错误。
1,500 Internal Server Error
该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的Bug或某些临时的故障。


2,503 Service Unavailable
该状态码表明服务器临时处于超负载货正在进行停机维护,现在无法处理请求。如果事先得知解除以上状态需要的时间,最好写入Retry-After首部字段再返回給客户端。



最后要注意的是,有可能出现状态码和状态的不一致。即不少返回的状态码响应都是错误的,但是不用难以察觉。比如Web应用程序内部发生错误,状态码依旧返回200 OK。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 1. 网络基础TCP/IP HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。 把互联网相关联的协议集...
    yozosann阅读 3,440评论 0 20
  • 本文是《图解HTTP》读书笔记的第二篇,主要包括此书的第六章内容,因为第六章的内容较多,而且比较重要,所以单独写为...
    lijiankun24阅读 1,357评论 0 6
  • 本文是《图解HTTP》读书笔记的第一篇,主要包括此书的前五章内容,简要记录一下。大概分为以下几部分: TCP/IP...
    lijiankun24阅读 1,300评论 0 2
  • 网络基础知识 URL和URI URI(Uniform Resource Idenifier)统一资源标识符。即由某...
    d9fc24a0c9a9阅读 1,120评论 0 6
  • 【我读】一个靠谱的助理会定义"订机票"包括两步:一是问清楚航班的型号、时间、座位的要求;二是订好机票后,将一切确定...
    四十刚好阅读 331评论 0 0