图解HTTP 读书笔记 上 HTTP协议相关

来源:互联网 发布:数据采集模块 编辑:程序博客网 时间:2024/05/20 07:58

图解HTTP 读书笔记 HTTP协议相关

  图解HTTP这本书,我这里准备分两篇来讲,这篇是上篇,涉及到书中的ch1**了解Web及网络基础、ch2简单的HTTP协议、ch3**HTTP报文内的HTTP信息,ch4**HTTP状态码,ch6**HTTP首部这五章内容,主要讲Web网页HTTP的一些基本概念以及HTTP报文的有关信息。

  下篇则涉及ch5**Web服务器、ch7**HTTPS、ch8**用户身份认证和ch10构建Web内容技术**;也就是有关Web服务器、Web网页和Web安全的内容。

一 Web基础

  Web(World Wide Web):即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。

  Web构建的基本理念:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的WWW

  Web构建技术

  1. HTML:把SGML作为页面的文本标记语言

  2. HTTP:文档传输协议

  3. URL:指定文档所在位置

  以上3项技术分别代表了通信内容——Web网页;通信方式——HTTP协议;通信地址——URL。此外还有通信内容提供方——Web服务器,以及通讯内容获取方——客户端。这五个方面,就是Web技术的主要内容。

  Web服务器Web页面是下一篇的内容,Web客户端这里不讲。HTTP协议是下面的重要内容,这里写简单讲下URL

1.1 URL

  URIURLURI的子集。URI(Uniform Resource Identifier,同一资源标识符)通过字符串标识任一互联网资源。URI可视为由某个协议方案表示的资源定位标识符。URI支持http、ftp、telnet等30余种协议方案。

  URL:用字符串标识互联网资源的地址,Uniform Resource Locator,同一资源定位符。

  绝对URI格式

https://item.taobao.com/item.htm?spm=a21ig.11052422.944389.2.74709cb1YKlqaV&id=530476331966
https://user:pass@item.taobao.com:80/item.htm?spm=a21ig.11052422.944389.2.74709cb1YKlqaV#ch1

  上面给出了两个网址,第一个是真实淘宝地址,第二个是在第一个基础上经过添加删减用于说明的地址。绝对URI格式从左到右可分为7个部分:

  1.协议方案名:即https://,注意格式

  2. 登录信息(认证)可选项,见二中的user:pass@

  3. 服务器地址:即item.taobao.com,可为网址,也可为IP地址。

  4. 服务器端口号可选项,忽略时使用默认端口号

  5. 带层次的文件路径:见二中的item.htm?,指定服务器上的文件路径来定位特指文件

  6. 查询字符串:见spm=。。。&。。。查询已制定的文件路径内的资源

  7. 片段标识符:见二中的#ch1,用以标识已获取资源中的子资源

二 HTTP基础

  HTTP协议:HTTP协议位于计算机网络分层的最上层——应用层。用以实现客户端服务器之间的通信。有关整个计算机网络的可以参考图解TCP/IP这本书,也可以看下我的读后感权当解闷。

  客户端请求访问文本或图像等资源的一端,客户端程序即为Web浏览器

  服务端:提供资源响应的一端即为服务端。

  需要说明的是,一台机器既可以是客户端也可以是服务端。甚至两者之间关系可以互换。但是在一条确定通信线路上,客户端和服务端的身份是确定的。

2.1 通过HTTP进行通信的完整流程

  在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

1. 建立TCP连接

  在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。

2. Web浏览器向Web服务器发送请求命令

  一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:

  GET/ sample/hello.jsp HTTP/1.1

3. Web浏览器发送请求头信息

  浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

4. Web服务器应答

  客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。

5. Web服务器发送应答头信息

  正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

6. Web服务器向浏览器发送数据

  Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

7. Web服务器关闭TCP连接

  一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,一次请求对应一次响应。在HTTP1.1中引入持久连接管程化以实现更高效地通信。在浏览器或者服务器在其头信息加入这行代码Connection:keep-alive即可。

注:本小节参考自参考资料2

2.2 HTTP协议缺陷与对应解决

  1. 无状态:HTTP属于无状态协议,其协议本身对于发送过的请求和响应都不做持久化处理。现在一般是通过引入Cookie技术实现状态管理:Cookie根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。在下次通信时,客户端自动在请求报文中加入Cookie值再发送过去。这样服务器根据其服务器上保存的记录可以得知状态信息。

  2. 单次连接:由上节的HTTP通信过程可以看出,早期的HTTP通信设计是每一次通信就要进行一次TCP连接到断开的完整过程。考虑到现在通信量远远大于之前,这样做会异常耗时。现在的HTTP协议则通过持久连接——在明确提出断开TCP请求前保持连接和管线化——不等下次响应直接发送下一个请求来大大提高传输速率。

  3. 安全性:HTTP安全性较低,通信使用明文没有身份验证报文完整性无法验证,总体上有着很大的安全隐患。现在一般是使用HTTPS来实现安全可靠的Web通信,在下一篇进行讲解。

三 HTTP报文

  本节讲HTTP通信的细节部分——HTTP报文。根据2.1节可知,在HTTP通信的过程中,是通过客户端发出请求,服务器端对请求进行响应的方式来实现通信的。其中,请求响应都是以报文的形式实现的,分别对应请求报文响应报文

  本节的内容就是HTTP的请求报文响应报文的结构分析和各部分详细说明。

3.1 报文结构

  HTTP报文可大致分为报文首部报文主体两部分,中间用空行(回车+换行)分隔。通常不一定要有报文主体。

3.2 请求报文

  请求报文的结构如上图所述。其中,报文首部由请求行请求头部构成。报文首部和请求正文被空行分开。

  请求行:请求行包括三个参数:请求方法URL协议版本。其中,考虑到请求头部中一定会有Host首部字段来标识地址,URL一般可忽略。协议版本一般为HTTP/1.1请求方法由八个,包括了客户端能向服务器发出的所有方法申请。请求行示例如下:

POST /form/entry HTTP/1.1
GET / HTTP/1.1 //URL忽略时需要以/代替

HTTP/1.1中可用的8个请求方法列表

方法 作用 说明 GET 获取资源 请求访问已被URI识别的资源,指定的资源经服务器解析后返回响应内容 POST 提交数据 在Request-URI所标识的资源后附加新的数据 PUT 传输文件 请求获取由Request-URI所标识的资源的响应消息报头 DELETE 删除文件 请求服务器删除Request-URI所标识的资源 HEAD 获取报文首部 请求获取由Request-URI所标识的资源的响应消息报头 OPTION 询问支持方法 请求查询服务器的性能,或者查询与资源相关的选项和需求 TRACE 追踪路径 请求服务器回送收到的请求信息,主要用于测试或诊断 CONNECT 隧道连接代理 要求在与代理服务器通信时建立隧道

  首部字段(请求头部)可分为四种,其中请求报文中涉及其中三种:请求首部字段通用首部字段实体首部字段。首部字段由首部字段名字段值构成。结构如下:

首部字段名字段值

通用首部字段

  通用首部字段,顾名思义,是指请求报文和响应报文中都会使用的首部,共有9种。

  HTTP通用首部字段列表

首部字段名 说明 Cache-Control 控制缓存行为 Connection 逐跳首部、连接的管理 Date 创建报文的时间 Pragma 主要使用 Pramga: no-cache,相当于 Cache-Control: no-cache Transfer-Encoding 服务器表明自己对本响应消息体(不是消息体里面的对象)编码信息 Upgrade 协议升级 Via 列出从客户端到服务器或者相反方向的响应经过了代理服务器信息 Warning 错误通知

请求首部字段

  通用首部字段,顾名思义,是指从客户端向服务端发送请求报文时使用的首部。补充了请求的附加信息、客户端信息、响应内容相关优先级等,共19个。

  HTTP请求首部字段列表

首部字段名 说明 Accept 告诉WEB服务器自己接受什么媒体类型 Accept-Charset 浏览器申明自己接收的字符集 Accept——Encoding 浏览器申明自己接收的编码方法 Accept-Language 浏览器申明自己接收的语言语言跟字符集的区别 Authorization Web认证信息 Expect 期待服务器的特定行为 From 用户的电子邮箱地址 Host 请求资源所在服务器 If-Match 比较实体标识ETAG If-None_Match 与上面相反 If-Modified-Since 比较资源更新时间 If-Unmodified-Since 与上面相反 If-Range 资源未更新时发送实体Byte的请求范围 Max-Forwards 最大传输逐跳数 Proxy-Authorization 代理服务器要求客户端的认证信息 Range 实体的字节范围请求 Referer 对请求中URI的原始获取方 TE 传输编码的优先级 User-Agent HTTP客户端信息

实体首部字段

  实体首部字段,针对请求报文和响应报文的实体部分使用的报文。补充与实体有关的信息,共10个。

  HTTP实体首部字段列表

首部字段名 说明 Allow 资源可支持的HTTP方法 Content-Encoding 实体主体适用的编码方式 Content-Language 实体主体的自然语言 Content-Length 实体主体的大小(字节数) Content-Location 替代对应资源的URI Content-MD5 实体主体的报文摘要 Content-Range 实体主体的位置范围 Content-Type 实体主体的媒体类型 Expires 实体主体过期的时间日期 Last-Modified 资源的最后修改日期时间

3.3 响应报文

这里写图片描述

  请求报文的结构如上图所述。其中状态行由协议版本和状态码部分组成。状态行示例如下:

HTTP/1.1 200 OK

  状态码的职责是当客户端向服务端发送请求时,告知返回的请求结果。状态码由3位数字原因短语组成。数字的第一位指定响应类别,共分5类。状态码一共有大约60余种,常用的14种。

  HTTP响应报文状态码分类

- 状态码类型 说明 1XX Informational消息性状态码 接收的请求正在处理 2XX Success成功状态码 请求正常处理完毕 3XX Redirection重定向状态码 需要进行附加操作以完成请求 4XX Client Error客户端错误状态码 服务器无法处理请求 5XX Server Error服务器错误状态码 服务器处理请求出错

  HTTP响应报文常用状态码列表

状态码类型 说明 200 OK 请求被正常处理 204 No Content 成功处理,但响应不含主体部分 206 Partial Content 响应报文中成功返回范围请求对应的实体内容 301 Moved Permanently 永久性重定向 302 Found 临时性重定向 303 See Other 指明让客户端使用GET方法向服务器的另一URI发送请求 304 Not Modified 服务器端资源未改变,可直接使用客户端未过期缓存 400 Bad Request 请求报文中存在语法错误 401 Unauthorized 请求需要通过HTTP认证的认证信息 403 Forbidden 请求资源的访问被服务器拒绝 404 Not Found 服务器无法找到资源或服务器的不想提供资源的借口 500 Internal Server Error 服务器执行请求时发生了错误 503 Service Unavailable 服务器超载或停机维护

  响应报文也涉及首部字段其中三种:响应首部字段通用首部字段实体首部字段。其中,后两种在上一节已经说过,这里再说下响应首部字段

  响应首部字段补充了响应的附加信息,也会要求客户端附加额外的内容信息,有9种。

  HTTP响应首部字段列表

首部字段名 说明 Accept-Ranges 是否接收字节范围请求 Age 推算资源创建经过时间 ETag 资源的匹配信息 Location 令科幻端重定向至指定URI Proxy-Authenticate 代理服务器对客户端的认证信息 Retry-After 对再次发起请求的时机要求 Server HTTP服务器的安装信息 Vary 代理服务器缓存的管理信息 WWW-Authenticate 服务器对客户端的认证信息

  有关HTTP报文的资料有很多,这里只简单介绍一下,详细信息可以看参考文献5,6和8.

四 HTTP传输

4.1 传输编码

  通过在传输时编码,能有效地处理大量的方法请求,提高传输速率。但是,编码的操作需要计算机完成,会消耗一定的CPU计算资源。

  内容编码:由服务器进行编码,客户端接收并解码。编码方式有gzipcompressdeflate等。

  分块传输编码:在传输大容量数据时,将数据分隔成多块,使Web浏览器逐步显示页面。

4.2 传输多种类型数据

  HTML采用了多部分对象集合的方法,在报文中也可含多类型实体,涉及内容首部字段的Content-type。

4.3 获取内容的范围请求

  涉及请求首部字段的Range。

参考资料

1. 图解HTTP

2. 一次完整的HTTP请求所经历的7个步骤

3. Http和TCP通信流程解析

4. 究竟什么是HTTP连接

5. HTTP请求头详解

6. HTTP头部信息解释分析(详细整理)

7. web必知必会——图解HTTP(上)

8.HTTP请求、响应报文格式

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 彩虹宝宝该怎么办音乐 彩虹宝宝歌曲该怎么办 彩虹宝宝该怎么办歌曲 短发卷发显老怎么办 小孩流鼻涕半夜哭闹怎么办 宝宝受凉了咳嗽怎么办 孩子着凉了咳嗽怎么办 小孩脸有点歪怎么办 小孩嘴巴歪了怎么办? 吹风扇嘴歪怎么办 小孩嘴巴肿了怎么办 小孩上火嘴巴烂怎么办 起床嘴巴苦该怎么办 小孩嘴巴过敏红肿怎么办 发际线头发稀少怎么办 头皮中毒掉头发怎么办 青少年经常掉发怎么办 头顶头发特别少怎么办 夏季头发出油怎么办 特别爱掉头发怎么办 小孩头发老掉怎么办 肾不好掉头发怎么办 染发剂染到脸上怎么办? 脸上弄起染发剂怎么办 最近突然掉头发怎么办 20掉头发怎么办啊 头上真菌感染怎么办 头发干头皮油怎么办 头发干枯头屑多怎么办 头油多痒脱发怎么办 哺乳期掉发厉害怎么办 哺乳期严重掉发怎么办 头皮痒油脂多怎么办 最近脱头发厉害怎么办 孕早期头皮痒怎么办 化疗后肤色变黑怎么办 头特别痒怎么办 偏方 晚上睡觉头痒怎么办 头屑多又痒怎么办 吃了激素药脸肿怎么办 头发痒大量脱发怎么办