《http权威指南》阅读笔记,第三章,HTTP报文

目录

  • 报文是如何流动的
  • HTTP报文的三个组成部分(起始行,首部,实体的主体)
  • 请求报文支持的各种方法
  • 和响应报文一起返回的各种状态码
  • 各种各样的首部是做什么的

报文是如何流动的

报文流(快递)

就像是快递包裹(http报文),有个发货人(客户端),有个收货人(服务端),包裹上面贴了快递面单(起始行与首部),包裹里面有内容(报文主体),
包裹程在转运中心(各种服务器代理)之间单向传递,送达收货人(服务器)的过程就是快递(报文流)
当然这个过程是可以反向的,服务端想客户端发送报文.

HTTP报文的三个组成部分(起始行,首部,实体的主体)

报文(快递包裹)

  • 快递面单(起始行) 填写收货人,收货地址
  • 快递面单(首部) 填写是,是否到付,包裹里面的东西,是否保价......
  • 快递面单(自定义首部) 在包裹上写一个大大的电话号码,方便查看
  • 快递包裹(主体) 透明包装(字符串),黑箱子(二进制)

报文格式

请求报文

< method> < request- URL> < version>
< headers>

< entity- body>

响应报文

< version> < status> < reason- phrase>
< headers>

< entity- body>

概述

  • method: 方法

  • request-URL: 请求地址

  • version: 版本号 HTTP/<major>.<minor>
    **版本号1.12>1.2 因为主版本相同,次要版本12>2

  • status-code: 状态码 100-599之间的数字,给代码用的

  • reason-phrase: 原因短语,给人看的

  • headers:首部,0个或者多个

    常见的首部实例

    首部实例 描述
    Date:Tue, 3Oct 1997 02: 16: 03 GMT 服务器产生响应的日期
    Content-length:12345 实体的主体部分有12345字节的数据
    Content-type:image/gif 实体的主体部分是一张gif图片
    Accept: image/ gif, image/ jpeg, text/ html 客户端可以接收gif图片JPG图片与HTML

    首部延续行
    分行提高可读性,分行的前面需要加空格或者tab制表符

  • entity-body:主体,可有可无

请求报文支持的各种方法

方法 描述 是否包含主体
get 从服务器获取一份文档
post 向服务器发送需要处理的数据
put 向服务器提交一份文档
delete 从服务器删除一份文档
options 决定服务器上可以执行哪些方法
head 只从服务器获取文档的首部
trace 弃用 -
track 弃用 -
coonect 弃用 -

* delete不一定真的能删除,服务器可以不响应该请求

和响应报文一起返回的各种状态码

状态码分类

整体范围 已定义范围 分类
100~199 100~101 信息提示
200~299 200~206 成功
300~399 300~305 重定向
400~499 400~415 客户端错误
500~599 500~505 服务器错误

状态码明细

状态码 短语 解释
100 Continue 收到了请求的初始部分,请客户端继续.
101 Switching protocols 说明服务器正在根据客户端的制定,,将协议切换成Update首部所列的协议

100

客户端向服务器发很大文件,不确定服务器是否接受,可以先发一个带Expect:100 Continue的头,询问服务器是否接受,服务器返回 100响应后,发送实体结束.

  • 在实现的时候,有的服务器会乱发100, 客户端 要甄别过滤掉
  • 响应超时的话,客户端 也要把实体发出去,不能傻等服务器响应
  • 没有收到带Expect:100 Continue的请求, 服务器 绝对不应该响应100
  • 服务器 已经收到实体的情况下,就不用返回100,可以返回其他状态码跳过100
  • 代理服务器 收到100请求的时候,要进行判断
    • 下流服务器 支持不清楚 http/1.1的话,转发;
    • 下流服务器 不支持,返回100,再可以去掉这个头,再转发;
    • 下流服务器 不支持,返回417错误;

101

客户端 使用 Upgrade 头的时候,服务器认可就返回101。Upgrade头用于 升级协议 的,比如现在用的是http/1.1,我想用http/2.1或者我想用 websocket ,就可以在请求头里面加上Upgrade:websocket 或者 Upgrade:http/2.0

状态码 短语 解释
200 OK 如你所愿,已搞定
201 Created 创建成功,主要用于put请求的返回
202 Accepted 收到,加入待办,可以返回完成时间估计,进度
203 Non-Authoritative-Information 非权威消息,比如客户端要个苹果,代理服务器从服务器拿个苹果(200),吃了一口再给你(203)
204 No-Content 木有内容,form的action,a链接返回204,不会跳转,可以判断访问成功
205 Reset-Content 用于表单提交后,重置表单而不刷新页面
206 Particle-Content 返回部分内容,必须返回Content-Range、Date、Etag或者Content-Location首部
状态码 短语 解释
300 Multiple Choices 找到好多,选一个呗
301 Moved Permanetly 没找到,看看别的呗
302 Found 找到了,不过先看看别的
303 See Other 看看别的,响应post请求
304 No Modified 未修改,看你的缓存去
305 Use Proxy 使用代理服务器(小明找老师请假,老师:出去,让你爸打电话给我)
306 弃用
307 Temporary Redirect 重定向的地址必须是get或者head请求,否则浏览器不自动跳转,需要用户确定
状态码 短语 解释
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
402 Payment Required 保留,将来使用
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置“您所请求的资源无法找到”的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
412 Precondition Failed 客户端请求信息的先决条件错误
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable 客户端请求的范围无效
417 Expectation Failed 服务器无法满足Expect的请求头信息
状态码 短语 解释
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 类似于408,充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

各种各样的首部是做什么的

通用首部

通用的信息性首部

首部 描述
Coonection 允许客户端服务器指定与请求/响应连接有关的选项
Date 报文创建时间
MIME-Version 给出发送端的MIME版本
Trailer 如果报文采用分块传输编码就可以用这个首部列出位于报文拖挂( trailer) 部分的首部集合
Transfer-Encoding 告知接收端,对报文采用了怎样的接收方式
Update 给出发送端想要升级使用的新版本或协议
Via 显示报文经过的中间节点(代理,网关)

通用的缓存首部

首部 描述
Cache-Control 用于随报文传送缓存指示
Pragma 另一种随报文传送指示的方式,但并不专用于缓存

请求首部

请求的信息性首部

首部 描述
Client_IP 客户端IP
From 提供客户端用户的Email地址
Host 给出接收请求的服务器地址和端口
Referer 提供了当前请求URI的文档的URL
UA-Color 客户端显示器颜色相关
UA-CPU 客户端CPU的类型或制造商
UA-Disp 客户端显示屏幕
UA-OS 客户端系统
UA-Pixels 客户端像素
User_Agent 发起请求的客户端名

Accept首部

首部 描述
Accept 媒体类型
Accept-Charset 字符集
Accept-Encoding 编码方式
Accept-Language 语言
TE 拓展传输编码

条件请求首部

首部 描述
Expect 允许客户端列出某请求所要求的服务器行为
If-Match 如果实体标记与文档当前的实体标记相匹配,就获取这份文档
If-Modified-Since 某时间点后,资源被修改才返回
If-None-Match 返回标记不匹配的
If-Range 对文档的某个范围进行请求
If-Unmodefied-Since 某时间点后,资源没有被改动,才返回
Range 请求范围

安全请求首部

首部 描述
Authorization 身份认证
Cookie 向服务器传送一个令牌
Cookie2 用来说明请求端支持的cookie版本

代理请求首部

  • Max-Forward
  • Proxy-Authorization
  • Proxy-Coonection

响应首部

首部 描述
Age 响应持续时间
Public 服务器为其资源支持的请求方法列表
Retry-After 如果资源不可用,在此日期重试
Title 对HTML文档来说,就是源端给出的标题
Warning 比原因短语中更详细的一些警告报文
  • 协商首部
  • 安全响应首部
  • 实体首部
  • 内容首部
  • 实体缓存首部

参考

http状态码详解
http中的204和205

书中的内容很多都老旧了,请参考 http://www.w3c.org/
https://developer.mozilla.org/zh-CN/docs/Web/HTTP

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

推荐阅读更多精彩内容