HTTP权威指南(一)HTTP结构

HTTP——可靠的传输协议

MIME(多用途因特网邮件扩展)

1.概念

为了解决在不同的电子邮件系统之间搬移报文时存在的问题。Web服务器会为所有HTTP报文附加一个MIME类型。

2.常见MIME类型

(1)text/html HTML格式文本文档
(2)image/jpeg JPEG格式图片
(3)image/gif GIF格式图片

URI(统一资源标识符)

1.URL(统一资源定位符)

(1)URL标准格式 http://www.oreilly.com/index.html 第一部分被称为方案即访问资源使用的协议类型;第二部分是服务器的因特网地址;其余部分指定了Web服务器上的某个资源。
ps.现在,几乎所有的URI都是URL

2.URN(统一资源名)

(1)定义:作为特定内容的唯一名称使用,与目前资源的所在地无关。

事务

1.定义

一个HTTP事务由一条请求命令和一个响应结果组成。通信过程通过HTTP的格式化数据块进行。

2.方法

(1)get 获取资源
(2)put 修改数据
(3)delete 删除数据
(4)post 上传数据
(5)head 仅发送命名资源响应中的HTTP首部

3.状态码

(1)200 请求成功
(2)302 资源重定向
(3)404 无法找到资源
(5)500 服务器错误

报文

1.定义

从客户端发往服务器的报文称为请求报文,从服务器发往客户端的报文被称为响应报文。

2.报文结构

(1)起始行:在请求报文中用来说明要做什么,在响应报文中说明出现了说明情况
(2)首部字段:在起始行行后面,每个首部字段都包含一个名字和一个值,使用冒号(:)分隔
(3)主体:与前面的内容相隔一个空行,其中包含了所有类型的数据。请求主体包括了要发给Web服务器的数据,响应主体包括了要返回给客户端的数据。
ps.起始行和首部都是文本形式,且都是格式化的;而主体中可包含任意的二进制数据和文本。

连接

1.TCP

(1)特点
无差错的数据传输
按序传输
未分段的数据流
(2)TCP五层结构
应用层
传输层
网络层
数据链路层
物理层

2.浏览器连接处理过程

(1)从URL中解析出服务器的主机名
(2)将主机名转换成服务器的IP地址
(3)将端口号从URL中解析出来
(4)浏览器建立一条与WEB服务器的TCP连接
(5)发送一条HTTP请求报文
(6)接收一条HTTP响应报文
(7)关闭连接,浏览器显示文档

3.Telnet

(1)作用:可以将键盘连接到某个目标TCP端口,并将此端口的输出回送到显示屏上

Web的结构组件

1.代理

位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器。

2.缓存

一种特殊的代理,可以将经过代理传送的常用文档复制保存起来。

3.网关

一种特殊的服务器,作为其他服务器的中间实体使用,同创用于将HTTP流量转换成其他的协议。

4.隧道

是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。

5.Agent代理

代表用户发起HTTP请求的客户端程序。所有发布Web请求的应用程序都是HTTP Agent代理,如Web浏览器、网络爬虫。

URL语法

"<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>"

1.方案——使用什么协议
2.用户名和密码
3.主机与端口
4.路径——资源位于什么位置
5.参数和查询字符串
6.片段

报文

报文流

1.定义

HTTP用术语流入和流出来描述事务处理的方向,报文流入源端服务器,工作完成之后,会流回用户的Agent代理中

2.报文向下游流动

报文的组成部分

1.报文的语法
(1)方法(method)
(2)请求URL(request-URL)
(3)版本(version)
(4)状态码(status-code)
(5)原因短语(reason-phrase)
(6)首部(header)
(7)实体的主体部分(entity-body)
2.起始行
(1)请求行 请求报文的起始行
(2)响应行 响应报文的起始行
(3)方法
(4)状态码
(5)原因短语
(6)版本号
3.首部
(1)首部分类
通用首部
请求首部
响应首部
实体首部
扩张首部
4.主体
(1)定义:HTTP要传输的内容

方法

1.安全方法
(1)GET方法和HEAD方法都被认为是安全的。
(2)HEAD方法,只返回首部,不返回实体的主体部分。
在不获取资源的情况下了解资源的情况
通过查看响应中的状态码,看看某个对象是否存在
通过查看首部,测试资源是否被修改了
(3)PUT方法,运行用户对内容进行修改
(4)POST方法,用来向服务器上传表单
(5)TRACE,允许客户端最终将请求发送给服务器时,看看它变成了什么样子。
(6)OPTIONS方法,询问服务器支持哪些方法。
(7)Delete,删除

状态码

1.100~199——信息性状态码
(1)100,Continue,继续
(2)101,Switching Protocols,根据客户端指定切换协议
2.200~299——成功状态码
(1)200,OK,请求成功
(2)201,Created,创建服务器对象成功
(3)202,Accepted,请求已被接受
(3)203,Non-Authoritative,实体首部包含的信息不是来自于源端服务器
(4)204,No Content,没有实体的主体部分
(5)205,Reset Content,提醒表单重制表单
(6)206,Partial Content,成功执行了一个部分或Range请求
3.300~399重定向状态码
4.400~499客户端错误状态码
(1)400 Bad Request 错误请求
(2)401 Unauthorized 请求客户端在获取对资源的访问权限之前,对自己进行认证。
(3)402 保留
(4)403 Forbidden 拒绝访问
(5)404 Not Founde
(6)405 Method Not Allowed
(7)Not Acceptable 错误的参数
5.500~599 服务器错误状态码
(1)500 Internal Server Error 服务器错误
(2)501 Not Implemented 客户端发起的请求超出服务器能力范围
(3)502 Bad Gateway 伪网关响应
(4)503 Service Unavailable 服务器现在无法提供请求
(5)504 Gateway Timeout 服务器响应超时
(6)505 HTTP Version Not Supported 服务器收到的请求使用了它不愿意支持的协议版本

首部

1.类型
(1)通用首部:提供了与报文相关的最基本信息。
(2)请求首部:只在请求报文中有意义的首部
Accept首部:告诉服务器想要什么、可以使用什么、不想要什么
条件请求首部:为请求加上某种限制
安全请求首部:在请求资源之间,先对自身进行认证
(3)响应首部:响应报文有自己的响应报文集
协商首部:为服务器和客户端提供对资源进行协商的能力
安全响应首部
(4)实体首部
内容首部:提供了与实体内容有关的特定信息,说明了其类型、尺寸以及处理它所需的其他有用信息。
实体缓存首部:通用的缓存首部说明了如何或什么时候进行缓存。
(5)扩展首部

TCP连接

1.TCP为HTTP提供了一条可靠的比特传输管道
2.TCP是分段的由IP分组传送
3.一个IP分组包括:一个分组首部(通常20个字节)、一个TCP段首部(通常20个字节)、一个TCP数据块(0个或多个字符)
4.TCP是通过端口号来保持不间断连接的
5.TCP套接字编程

TCP性能

1.HTTP事务时延
(1)DNS域名解析
(2)TCP连接建立时延
(3)传输和处理请求报文
(4)回送响应
2.TCP握手时延
在发送数据之前,TCP要传送两个分组来建立连接
3.延迟确认
在一个特定的窗口时间内将输出确认放在缓冲区中,以寻找能够捎带它的输出数据分组。如果在那个时间段内没有输出数据分组,就将确认信息放在单独的分组中传送。
4.TCP慢启动
TCP连接会随着时间进行自我"协调",起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度.这种调谐被称为TCP慢启动,用于防止因特网的突然过载和拥塞.
5.Nagle算法与TCP_NODELAY
Nagele算法试图在发送一个分组之前,将大量TCP数据绑定在一起,以提高网络效率.可以通过设置参数TCP_NODELAY禁用Nagle算法.
6.TIME_WAIT累计与端口耗尽

HTTP连接的处理

1.Connection首部
(1)首部标签
HTTP首部字段名,列出了只与此连接有关的首部
任意标签值,用于描述此连接的非标准选项
值close,说明操作完成之后需要关闭这条持久连接
如果连接标签中包含了一个HTTP首部字段名称,那么这个首部字段就包含了一些与连接有关的信息,不能将其转发出去.在报文转发出去之前,必须删除Connection首部列出的所有首部字段

并行连接

并行连接可以使HTTP请求变快

持久连接

1.Keep-Alive
(1)客户端可以通过包含Connection: Keep-Alive首部将一条连接保持在打开状态,如果服务器愿意为下一条请求将连接保持在打开状态,就在响应中包含相同的首部.否则客户端会在收到响应之后关闭连接.
(2)Keep-Alive选项
参数timeout估计了服务器希望将连接保持在活跃的时间.
参数max估计了服务器还希望为多少个事务保持此连接的活跃状态
支持任意未经处理的属性
(3)限制规则
客户端必须发送一个Connection: Keep-Alive 请求首部来激活keep-alive连接
如果客户端没有发送Keep-Alive 请求首部,则服务器会在那条请求之后关闭连接
通过检测响应中是否有Connection: Keep-Alive ,客户端可以判断服务器是否会在发出响应后关闭连接
只有在无需检测到连接的关闭即可确定报文实体主体部分长度的情况下,才能将连接保持在打开状态
代理和网关必须执行Connection首部的规则.
不应该与无法确定是否支持Connection首部的代理服务器建立keep-alive连接,以防止出现哑代理问题
从技术上来讲,应忽略所有来自HTTP/1.0设备的Connection首部字段,因为他们可能是由比较老的代理服务器误转发的.
除非重复发送请求会产生其他一些副作用,否则如果在客户端收到完整的响应之前连接就关闭了,客户端就一定要做好重试请求的准备
(4)哑代理
一些不理解Connection首部的代理会使用盲中继将请求转发出去,不对Connection首部进行特殊处理
为了解决上面的问题,现代的代理都绝不能转发Connection首部和名字出现在Connection值中的首部.
另一个解决方案是使用Proxy-Connection,哑代理不会对其处理,直接转发给服务器,而服务器不会识别该首部,而正常代理会将其转换为Connection首部,发送给服务器
(5)HTTP/1.1持久连接(persistent connection)
不发送Connection: close 客户端会一直保持打开状态
限制规则:
发送了Connection: close首部之后,客户端就无法在那条连接上发送更多的请求了
如果客户端不想在连接上发送其他请求了,就应该在最后一条请求中发送一个Connection: close 请求首部
只有当连接上所有的报文都有正确的,自定义报文长度时,连接才能持久保持
HTTP/1.1的代理必须能够分别管理与客户端和服务器的持久连接,每个持久连接都只适用于一跳传输
HTTP/1.1的代理服务器不应该与HTTP/1.0的客户端建立持久连接,除非它们了解客户端的处理能力.
不管Connection首部取了什么值,HTTP/1.1设备都可以在任意时刻关闭连接.
HTTP/1.1应用程序必须从异步的关闭中恢复出来.只要不存在可能会累积起来的副作用,客户端都应该重试这条请求
出发重复发起请求会产生副作用,否则如果在客户端收到整条响应之前连接关闭了,客户端就必须要重新发起请求
一个用户客户当对任何服务器或代理最多只能维护两条持久连接,以防服务器过载.

管道化连接

HTTP/1.1允许在持久连接上可选地使用请求管道,在响应到达之前,可以将多条请求放入队列.当第一条请求通过网络流向地球另一端的服务器时,第二条和第三条请求也可以开始发送了.
1.限制规则:
如果HTTP客户端无法确认连接是持久的,就不应该使用管道
必须按照与请求相同的顺序回送HTTP响应.HTTP报文中没有序列号标签,因此如果收到的响应失序了,就没办法将其与请求匹配起来了
HTTP客户端必须做好连接会在任意时刻关闭的准备,还要准备号重发所有未完成的管道化请求
HTTP客户端不应该用管道化的方式发送会产生副作用的请求(如POST)

关闭连接

1.任意解除连接
所有HTTP客户端,服务器或代理都可以在任意时刻关闭一条TCP传输连接.
2.Content-Length
(1)每条HTTP响应都应该有精确的Content-Length首部,用以描述响应主体的尺寸.
(2)客户端或代理收到一条随连接关闭而结束的HTTP响应,且实际传输的实体查高度与Content-Length并不匹配时,接收端就应该质疑长度的正确性
3.幂等性
如果一个事务,不管时执行一次还是很多次,得到的结果都相同,这个事务就是幂等的.
4.正常关闭连接
(1)完全关闭和版关闭
应用程序可以关闭TCP输入和输出信道中的任意一个,或者将两者都关闭了.
(2)TCP关闭及重置错误
简单的HTTP应用程序可以只使用完全关闭.
(3)正常关闭
当客户端或服务器突然要关闭一条连接时,应该正常地关闭传输连接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
  本书从hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍hado叩这一高性能处理海量数据集的理想工具。全书共14章,3个附录,涉及的主题包括:haddoop简介:mapreduce简介:hadoop分布式文件系统;hadoop的i/o、mapreduce应用程序开发;mapreduce的工作机制:mapreduce的类型和格式;mapreduce的特性:如何安装hadoop集群,如何管理hadoop;pig简介:hbase简介:zookeeper简介,最后还提供了丰富的案例分析。   本书是hadoop权威参考,程序员可从中探索如何分析海量数据集,管理员可以从中了解如何安装与运行hadoop集群。   什么是谷歌帝国的基石?mapreduce算法是也!apache hadoop架构作为mapreduce算法的一种开源应用,是应对海量数据的理想工具。项目负责人tomwhite透过本书详细阐述了如何使用hadoop构建可靠、可伸缩的分布式系统,程序员可从中探索如何分析海量数据集,管理员可以从中了解如何安装和运行hadoop集群。   本书结合丰富的案例来展示如何用hadoop解决特殊问题,它将帮助您:    ·使用hadoop分布式文件系统(hdfs)来存储海量数据集,   通过mapreduce对这些数据集运行分布式计算    ·熟悉hadoop的数据和ilo构件,用于压缩、数据集成、序列化和持久处理    ·洞悉编~mapreduce实际应用时的常见陷阱和高级特性    ·设计、构建和管理一个专用的hadoop集群或在云上运行hadoop    ·使用高级查询语言pig来处理大规模数据    ·利用hadoop数据库hbase来保存和处理结构化/半结构化数据    ·学会使用zookeeper来构建分布式系统   如果您拥有海量数据,无论是gb级还是pb级,hadoop都将是您的完美解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

volit_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值