《图解HTTP》阅读笔记


前言

第一次写博客,粗略阅读了《图解HTTP》前六张,以下是我的阅读笔记(一些基础的没有记录,如有需要,请参考《图解HTTP》)。

一、名词解释

HTTP(HyperText Transfer Protocol,超文本传输协议)
协议:不同的硬件、操作系统之间的通信,所有的这一切所需要的规则。
TCP/IP:与互联网相关联的协议的集合。也称 TCP/IP协议族
IP:一种协议的名称
IP地址:网络分配的一个地址。
1.IP地址构成:网络位+主机位(网络位相同的IP地址,为同一网段)
网段-------{三种可能:x. / x.x. / x.x.x.}
2.全球ip地址都由二进制(32位)组成
点分十进制------形式:x.x.x.x的范围:0-255
3.局域网通信规则:在同一个局域网中所有IP必须在同一网段才可以互相通信!
4.有IP就要有子网掩码
子网掩码如何确定网络位:与255对应的数字为网络位,与0对应的数字为主机位
255.0.0.0
255.255.0.0
255.255.255.0 三个均为子网掩码

注:1个IP地址,必须配一个子网掩码

如图为winxp下的配置的一个IP地址。一般计算机都是自动获取IP地址
在这里插入图片描述
DNS(域名服务器):提供域名到IP地址之间的解析服务。
用户通常是用主机名和域名访问计算机(如www.baidu.com),而计算机擅长处理数字,所以DNS由此而来。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。即实现二者的转换。
URI(Uniform Resource Identifier 统一资源标识符):表示web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的。
URL(Uniform Resource Locator 统一资源定位器):URL是URI的一个子集,采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL是URI概念的一种实现方式。URL是使用Web浏览器等访问Web页面时需要输入的网页地址,如http://hackr.jp/
HTTP报文:用于HTTP协议交互的信息。分为报文首部报文主体两块。结构如下图
HTTP报文的结构

二、客户端与服务器间的通信

2.1 通过请求与响应达成通信

在这里插入图片描述
请求报文的构成请求报文的构成
响应报文的构成响应报文的构成

2.2 HTTP特性
  1. 无状态协议
    HTTP协议自身不对请求和响应之间的通信状态进行保存在这里插入图片描述
  2. 持久连接与管线化
    持久连接:建立1次TCP连接后进行多次请求和响应的交互
    在这里插入图片描述
    管线化:不用等待响应亦可直接发送下一个请求。
    在这里插入图片描述
  3. 使用Cooike的状态管理
    如果让服务器管理全部客户端状态则会成为负担,所以使用Cooike来解决这一问题。如果让服务器管理全部客户端状态则会成为负担
  • 没有Cooike信息状态下的请求在这里插入图片描述
  • 第二次以后(存有Cookie信息状态)的请求在这里插入图片描述
2.3告知服务器意图的HTTP方法
  1. GET:获取资源在这里插入图片描述在这里插入图片描述

  2. POST:传输实体主体在这里插入图片描述

  3. HEAD:获得报文首部在这里插入图片描述

  4. DELETE:删除文件在这里插入图片描述

  5. OPTIONS:询问支持的方法在这里插入图片描述

  6. TRACE:追踪路径在这里插入图片描述

  7. CONNECT:要求用隧道协议连接代理在这里插入图片描述

三、HTTP报文首部

3.1 HTTP报文结构

报文首部:在客户端和服务器处理时起至关重要作用的信息几乎都在这
报文主体:所需要的用户和资源的信息都在这
HTTP报文结构

  • 请求报文在这里插入图片描述
  • 响应报文在这里插入图片描述

3.2HTTP首部字段

3.2.1各首部字段概述

  • 通用首部字段在这里插入图片描述、请求首部字段在这里插入图片描述
  • 响应首部字段在这里插入图片描述
  • 实体首部字段在这里插入图片描述
  • End-to-end首部和Hop-by-hop首部
    HTTP首部字段将定义成缓存代理和非缓存代理的行为,分成2种类型。
    在这里插入图片描述
除这8个是逐条首部字段,其余都属于端到端首部

●Connection
●Keep-Alive
●Proxy-Authenticate
●Proxy-Authorization
●Trailer
●TE
●Transfer-Encoding
●Upgrade

3.2.2通用首部字段

Cache-Control–控制缓存
  • 缓存请求指令在这里插入图片描述
  • 缓存响应指令在这里插入图片描述
Connection

两个作用:
●控制不再转发给代理的首部字段( 即Hop-by-hop首部)
Connection:不再转发的首部字段名
●管理持久连接
*当服务器端想明确断开连接时,则指定 Connection首部字段的值为Close。
Connection:close

Date

表明创建HTTP报文的日期和时间

Pragma

客户端会要求所有的中间服务器不返回缓存的资源。在这里插入图片描述

Trailer

首部字段Trailer会事先说明在报文主体后记录了哪些首部字段在这里插入图片描述
如下图:指定首部字段Trailer的值为Expires,在报文主体之后(分块长度0之后)出现了首部字段Expires。
在这里插入图片描述

Transfer-Encoding

规定了传输报文主体时采用的编码方式。

Upgrade

用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。在这里插入图片描述

Via

追踪客户端与服务器之间的请求和响应报文的传输路径。在这里插入图片描述

Warning

告知用户一些与缓存相关的问题的警告。

格式如下:
Warning:[警告码][警告的主机:端口号]“[警告内容]”([日期时间])

警告码具备扩展性,今后有可能追加新的警告码。
在这里插入图片描述

3.2.3请求首部字段

Accept

通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用type/subtype这种形式,一次指定多种媒体类型。在这里插入图片描述

几种媒体类型的例子
文本文件
text/html, text/plain, text/css
application/xhtml+xml,
application/xml …
图片文件
image/jpeg,image/gif, image/png …
视频文件
video/mpeg, video/quicktime…
应用程序使用的二进制文件
application/octet-stream,
application/zip …

Accept-Charset

通知服务器用户代理支持的字符集及字符集的相对优先顺序,也可用权重q值来表示相对优先级。另外,也可使用星号(*)作为通配符,指定任意的编码格式在这里插入图片描述

gzip
由文件压缩程序gzip(GNU zip)生成的编码格式(RFC1952),采用Lempel-Ziv算法(LZ77)及32位循环冗余校验(Cyclic Redundancy Check,通称CRC)。
compress
由UNIX文件压缩程序compress生成的编码格式,采用Lempel-Ziv-Welch算法(LZW)。●deflate
组合使用zlib格式(RFC1950)及由deflate压缩算法(RFC1951)生成的编码格式。
identity
不执行压缩或不会变化的默认编码格式

Accept-Encoding

告知服务器用户代理支持的内容编码及内容编码的优先级顺序

Accept-Language

告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级

Authorization

用来告知服务器,用户代理的认证信息(证书值)在这里插入图片描述

Expect
  • 告知服务器,期望出现的某种特定行为。
  • 因服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码417Expectation Failed
From

告知服务器使用用户代理的用户的电子邮件地址

Host

告知服务器,请求的资源所处的互联网主机名和端口号在这里插入图片描述

If-xxx样式–条件要求

服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。

  • If-Match
    在这里插入图片描述

  • If-Modified-Since
    用于确认代理或客户端拥有的本地资源的有效性。获取资源的更新日期时间在这里插入图片描述

  • If-None-Match
    在这里插入图片描述

  • If-Range
    在这里插入图片描述

  • If-Unmodified-Since
    与首部字段If-Modified-Since的作用相反。
    如果在指定日期时间后发生了更新,则以状态码412 Precondition Failed作为响应返回。

Max-Forwards

在这里插入图片描述

Proxy-Authorization

告知服务器认证所需要的信息

Range

告知服务器资源的指定范围

  • 接收到附带Range首部字段请求的服务器,会在处理请求之后返回状态码为206 Partial Content的响应。
  • 无法处理该范围请求时,则会返回状态码200 OK的响应及全部资源。
Referer

告知服务器请求的原始资源的URI。在这里插入图片描述

TE

告知服务器客户端能够处理响应的传输编码方式及相对优先级

User-Agent

用于传达浏览器的种类。—将创建请求的浏览器和用户代理名称等信息传达给服务器。

3.2.4响应首部字段

Accept-Ranges

告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。在这里插入图片描述

Age
  • 告知客户端,源服务器在多久前创建了响应。字段值的单位为秒。
  • 若创建该响应的服务器是缓存服务器,Age值是指缓存后的响应再次发起认证到认证完成的时间值。
  • 代理创建响应时必须加上首部字段Age。
    在这里插入图片描述
ETag
  • 告知客户端实体标识
  • 它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的ETag值。
  • 强ETag值:不论实体发生多么细微的变化都会改变其值。
  • 弱ETag值:只用于提示资源是否相同。只有资源发生了根本改变,产生差异时才会改变ETag值。这时,会在字段值最开始处附加W/。
    例:ETag:W/“usag-1234”

在这里插入图片描述

Location

将响应接收方引导至某个与请求URI位置不同的资源在这里插入图片描述

Proxy-Authenticate
  • 由代理服务器所要求的认证信息发送给客户端
  • 客户端与服务器之间进行认证时,首部字段WWW-Authorization有着相同的作用。
Retry-After
  • 告知客户端应该在多久之后再次发送请求
  • 主要配合状态码503 ServiceUnavailable响应,或3xx Redirect响应一起使用。
Server

告知客户端当前服务器上安装的HTTP服务器应用程序的信息在这里插入图片描述

Vary
  • 当代理服务器接收到带有Vary首部字段指定获取资源的请求时,如果使用的Accept-Language字段的值相同,那么就直接从缓存返回响应。
  • 反之,则需要先从源服务器端获取资源后才能作为响应返回
    在这里插入图片描述

3.2.5实体首部字段

Allow
  • 通知客户端能够支持Request-URI指定资源的所有HTTP方法
  • 当服务器接收到不支持的HTTP方法时,会以状态码405 MethodNot Allowed作为响应返回
  • 与此同时,还会把所有能支持的HTTP方法写入首部字段Allow后返回。

Allow : GET, HEAD

Content-xxx类型
  • Content-Encoding
    告知客户端服务器对实体的主体部分选用的内容编码方式

Content-Encoding:gzip

  • Content-Language
    告知客户端,实体主体使用的自然语言

Content-Language:zh-CN

  • Content-Length
    表明了实体主体部分的大小(单位是字节)
    !! 对实体主体进行内容编码传输时,不能再使用Content-Length首部字段

Content-Length:15000

  • Content-Location
    给出与报文主体部分相对应的URI,表示报文主体返回资源对应的URI。

Content-Location:http://www.hackr.jp/index-ja.html

  • Content-MD5
    Content-MD5是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。在这里插入图片描述

  • Content-Range
    告知客户端作为响应返回的实体的哪个部分符合范围请求

  • Content-Type
    说明了实体主体内对象的媒体类型.和首部字段Accept一样,字段值用type/subtype形式赋值。

Expires

将资源失效的日期告知客户端

Expires:Wed,04 Jul 2012 08:c26:05 GMT

Last-Modified

指明资源最终修改的时间

Last-Modified : Wed, 23 May 2012 09:59:55
GMT

3.3为Cooike服务的首部字段

在这里插入图片描述

Set-Cookie

Set-Cooike : status=enable ; expires=Tue, 05 Jul 2011 07:26:31 GMT; => path=/ ; domain=.hacker.jp

当服务器准备开始管理客户端的状态时,会事先告知各种信息。在这里插入图片描述

Cookie

Cooike : status=enable

首部字段Cookie会告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的Cookie。接收到多个Cookie时,同样可以以多个Cookie形式发送。

其他首部字段

X-Frame-Options—防止点击劫持(clickjacking)攻击。
X-XSS-Protection—针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关。

0 :将XSS过滤设置成无效状态
1 :将XSS过滤设置成有效状态

DNT—拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。

0 :同意被追踪
1 :拒绝被追踪

P3P—(The Platform for Privacy Preferences,在线隐私偏好平台)技术
详细介绍点击这里

四、返回结果的HTTP状态码

大家是不是经常会遇到“404 Not Found”,这就是一直表示客户端错误的状态码。
可见状态码以3位数字原因短语组成,而数字第一位指定了响应类别,后两位无分类。

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

下面是具有代表性的14个状态码

① 2XX成功
  1. 200 OK
    表示从客户端发来的请求在服务器端被正常处理了。
  2. 204 No Content
    该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新。

一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。

  1. 206 Partial Content
    该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。
② 3XX重定向
  1. 301 Moved Permanently----永久性重定向
  • 表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
  • 通俗地说就是之前的网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性的。
  1. 302 Found----临时性重定向
  • 该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
  • 也就是之前的网站并没有被移除,你只是暂时不访问原来网站,临时移动到新位置。可能访问期限一到,即使你保存了新位置的地址,但还是只能访问原来的网站。(这种情况易发生网络劫持)
  1. 303 See Other
  • 表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
  • 303状态码和302 Found状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别。

例如:当使用POST方法访问CGI程序,其执行后的处理结果是希望客户端能以GET方法重定向到另一个URI上去时,此时服务器就会返回303状态码

4.307 Temporary Redirect

  • 临时重定向。与302 Found有相同的含义。
  • 尽管302标准禁止POST变换成GET,但实际使用时大家并不遵守。
  • 而307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。
③ 4XX客户端错误
  1. 400 Bad Request
    表示请求报文中存在语法错误
  2. 401 Unauthorized
  • 表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息
  • 若之前已进行过1次请求,则表示用户认证失败
  • 当浏览器初次接收到401响应,会弹出认证用的对话窗口
  1. 403 Forbidden
    表示对请求资源的访问被服务器拒绝了。且服务器端没有必要给出拒绝的详细理由
  2. 404 Not Found
    表示服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
④ 5XX服务器错误
  1. 500 Internal Server Error
    该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。
  2. 503 Service Unavailable
    该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

状态码和状况的不一致不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。比如Web应用程序内部发生错误,状态码依然返回200
OK,这种情况也经常遇到。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值