文章目录

  • 前言
  • 一、名词解释
  • 二、客户端与服务器间的通信
    • 2.1 通过请求与响应达成通信
    • 2.2 HTTP特性
    • 2.3告知服务器意图的HTTP方法
  • 三、HTTP报文首部
    • 3.1 HTTP报文结构
    • 3.2HTTP首部字段
      • 3.2.1各首部字段概述
      • 3.2.2通用首部字段
        • Cache-Control--控制缓存
        • Connection
        • Date
        • Pragma
        • Trailer
        • Transfer-Encoding
        • Upgrade
        • Via
        • Warning
      • 3.2.3请求首部字段
        • Accept
        • Accept-Charset
        • Accept-Encoding
        • Accept-Language
        • Authorization
        • Expect
        • From
        • Host
        • If-xxx样式--条件要求
        • Max-Forwards
        • Proxy-Authorization
        • Range
        • Referer
        • TE
        • User-Agent
      • 3.2.4响应首部字段
        • Accept-Ranges
        • Age
        • ETag
        • Location
        • Proxy-Authenticate
        • Retry-After
        • Server
        • Vary
      • 3.2.5实体首部字段
        • Allow
        • Content-xxx类型
        • Expires
        • Last-Modified
    • 3.3为Cooike服务的首部字段
      • Set-Cookie
      • Cookie
    • 其他首部字段
  • 四、返回结果的HTTP状态码
    • 下面是具有代表性的14个状态码
      • ① 2XX成功
      • ② 3XX重定向
      • ③ 4XX客户端错误
      • ④ 5XX服务器错误

前言

第一次写博客,粗略阅读了《图解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协议交互的信息。分为报文首部报文主体两块。结构如下图

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

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报文结构

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

  • 请求报文
  • 响应报文

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位数字原因短语组成,而数字第一位指定了响应类别,后两位无分类。

类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server 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,这种情况也经常遇到。

《图解HTTP》阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. 插入始终是1_40分!1分钟4次!大JB太硬了!
  2. Datawhale来杭电啦!
  3. 我在家乡写代码(一)
  4. python全栈开发基础【第二十三篇】线程
  5. 如何基于 String 实现同步锁?
  6. python中if not x: 和 if x is not None: 和 if not x is None的使用和区别
  7. Python中按指定长度分割字符串并反转
  8. JavaScript笔记(3)
  9. 上网登录窗不弹出_配置 Windows XP 正常上网(TLS HTTPS),连接到 NAS
  10. PHP字符串相关函数
  11. error: possibly undefined macro: AC_PROG_LIBTOOL
  12. 阿里 P7 到底是怎样的水平?
  13. 浅谈色彩学:以红色为主的色彩配色
  14. String slices
  15. 深度 | 剖析中国金融科技50强,数十万亿风口怎么追?
  16. 微信小程序覆盖map组件
  17. css文字和数字或者英文对不齐解决方案
  18. 4000倍的资本效率提升,Uniswap V3 将如何实现?
  19. 单片机-stm32-使用cdc类实现vcp(虚拟串口)
  20. TP与laravel简介

热门文章

  1. 智慧医院系统定制|慢病管理系统更全面
  2. 校招面试真题 | 你的期望薪资是多少?为什么
  3. ladp3 获取属性_ldap3库:用多个值修改属性
  4. 2013-10-19第一次去招聘市场面试
  5. 项目组小型任务管理工具-ToDoList
  6. 基于台达PLC的水箱液位PID控制(matlab处理数据)
  7. Java通过docx模板生成docx
  8. 极域电子教室增强特性介绍,它到底好用在哪呢?
  9. prototype原理
  10. 计算机专业集齐七龙珠,集齐七颗龙珠 为你召唤一台飞行堡垒8