《HTTP权威指南》笔记

前言

HTTP报文组成:起始行,首部,主体。起始行和首部是ASCLL文本,主体可是文本或者二进制

此处输入图片的描述

状态码

100:CONTINUE HTTP 客户端应用程序有一个实体的主体部分要发送给服务器,但希望在发送之前查看一下服务器是否会接受这个实体。 200:OK   请求没问题,实体的主体部分包含了所请求的资源  201   Created   用于创建服务器对象的请求(比如,PUT)。  202   Accepted   请求已被接受,但服务器还未对其执行任何动作。不能保证服务器会完成这个请求;  203   Non-Authoritative Information   实体首部包含的信息不是来自于源端服务器,而是来自资源的一份副本。  204   No Content   响应报文中包含若干首部和一个状态行,但没有实体的主体部分。  205   Reset Content   另一个主要用于浏览器的代码。负责告知浏览器清除当前页面中的所有HTML  206   Partial Content   成功执行了一个部分或Range(范围)请求。  300   Multiple Choices   客户端请求一个实际指向多个资源的URL时会返回这个状态码  301   Moved Permanently   在请求的URL已被移除时使用。响应的Location 首部中应该包含资源现在所处的URL  302   Found   与301状态码类似;但是,客户端应该使用Location 首部给出的URL来临时定位资源。  303   See Other   告知客户端应该用另一个URL来获取资源。新的URL位于响应报文的 Location  首部。  304   Not Modified   客户端可以通过所包含的请求首部,使其请求变成有条件的。  306   (未使用)   当前未使用    307   Temporary Redirect   与301状态码类似;但客户端应该使用Location 首部给出的URL来临时定位资源。 (3~~状态码之间存在一些交叉。这些状态码的用法有着细微的差别,大部分差别都源于 HTTP/1.0 和 HTTP/1.1 应用程序对这些状态码处理方式的不同。)  400   Bad Request   用于告知客户端它发送了一个错误的请求   401   Unauthorized   与适当的首部一同返回,在这些首部中请求客户端在获取对资源的访问权之前,对自己进行认证。更多有关认证的内容请参见  403   Forbidden   用于说明请求被服务器拒绝了。  404   Not Found   用于说明服务器无法找到所请求的URL。  405   Method Not Allowed   发起的请求中带有所请求的URL不支持的方法时,使用此状态码。  406   Not Acceptable   客户端可以指定参数来说明它们愿意接收什么类型的实体。服务器没有与客户端可接受的URL相匹配的资源时,使用此代码。  407   Proxy Authentication Required   与401状态码类似,但用于要求对资源进行认证的代理服务器    408   Request Timeout   如果客户端完成请求所花的时间太长,服务器可以回送此状态码,并关闭连接。

 500   Internal Server Error   服务器遇到一个妨碍它为请求提供服务的错误时,使用此状态码   501   Not Implemented   客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码   502   Bad Gateway   作为代理或网关使用的服务器从请求响应链的下一条链路上收到了一条伪响应(比如,它无法连接到其父网关)时,使用此状态码   503   Service Unavailable   用来说明服务器现在无法为请求提供服务,但将来可以。  504   Gateway Timeout   与状态码408类似,只是这里的响应来自一个网关或代理,它们在等待另一服务器对其请求进行响应时超时了    505   HTTP Version Not Supported   服务器收到的请求使用了它无法或不愿支持的协议版本时,使用此状态码。

HTTP基本的方法:

GET(安全的):用于请求服务器发送某个资源。 HEAD(安全的):HEAD 方法与 GET 方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。 PUT:从服务器读取文档相反,PUT 方法会向服务器写入文档。 POST:POST 用于向服务器发送数据。 TRACE:TRACE 请求会在目的服务器端发起一个“环回”诊断。请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条 TRACE 响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间 HTTP 应用程序组成的请求 / 响应链上,原始报文是否,以及如何被毁坏或修改过 OPTIONS:OPTIONS 方法请求 Web 服务器告知其支持的各种功能。 DELETE:顾名思义,DELETE 方法所做的事情就是请服务器删除请求 URL 所指定的资源。但是,客户端应用程序无法保证删除操作一定会被执行。

首部:

通用首部 Cache-Control   用于随报文传送缓存指示    Pragma3   另一种随报文传送指示的方式,但并不专用于缓存  请求首部 请求的信息性首部

 Client-IP4   提供了运行客户端的机器的IP地址    From   提供了客户端用户的E-mail地址5    Host   给出了接收请求的服务器的主机名和端口号   Referer   提供了包含当前请求URI的文档的URL    UA-Color   提供了与客户端显示器的显示颜色有关的信息    UA-CPU6   给出了客户端CPU的类型或制造商    UA-Disp   提供了与客户端显示器(屏幕)能力有关的信息    UA-OS   给出了运行在客户端机器上的操作系统名称及版本   UA-Pixels   提供了客户端显示器的像素信息   User-Agent   将发起请求的应用程序名称告知服务器   User-Agent   将发起请求的应用程序名称告知服务器 

Accept首部  Accept   告诉服务器能够发送哪些媒体类型   Accept-Charset   告诉服务器能够发送哪些字符集   Accept-Encoding   告诉服务器能够发送哪些编码方式    Accept-Language   告诉服务器能够发送哪些语言   TE7   告诉服务器可以使用哪些扩展传输编码 

条件请求首部  Expect   允许客户端列出某请求所要求的服务器行为   If-Match   如果实体标记与文档当前的实体标记相匹配,就获取这份文档    If-Modified-Since   除非在某个指定的日期之后资源被修改过,否则就限制这个请求   If-None-Match   如果提供的实体标记与当前文档的实体标记不相符,就获取文档   If-Range   允许对文档的某个范围进行条件请求    If-Unmodified-Since   除非在某个指定日期之后资源没有被修改过,否则就限制这个请求    Range   如果服务器支持范围请求,就请求资源的指定范围

安全请求首部  Authorization   包含了客户端提供给服务器,以便对其自身进行认证的数据    Cookie   客户端用它向服务器传送一个令牌——它并不是真正的安全首部,但确实隐含了安全功能10   Cookie2   用来说明请求端支持的cookie版本,

代理请求首部  Max-Forward   在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数——与TRACE方法一同使用11   Proxy-Authorization   与Authorization 首部相同,但这个首部是在与代理进行认证时使用的   Proxy-Connection   与Connection 首部相同,但这个首部是在与代理建立连接时使用的

响应首部 响应的信息性首部  Age   (从最初创建开始)响应持续时间 Public   服务器为其资源支持的请求方法列表    Retry-After   如果资源不可用的话,在此日期或时间重试    Server   服务器应用程序软件的名称和版本    Title 对HTML文档来说,就是HTML文档的源端给出的标题   Warning   比原因短语中更详细一些的警告报文  协商首部  Accept-Ranges   对此资源来说,服务器可接受的范围类型   Vary   服务器查看的其他首部的列表,可能会使响应发生变化;也就是说,这是一个首部列表,服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端   Proxy-Authenticate   来自代理的对客户端的质询列表   Set-Cookie   不是真正的安全首部,但隐含有安全功能;可以在客户端设置一个令牌,以便服务器对客户端进行标识15   Set-Cookie2   与Set-Cookie 类似,RFC 2965 Cookie定义;

实体首部 实体的信息性首部 Allow   列出了可以对此实体执行的请求方法   Location   告知客户端实体实际上位于何处;用于将接收端定向到资源的(可能是新的)位置(URL)上去  内容首部 Content-Base16   解析主体中的相对URL时使用的基础URL   Content-Encoding   对主体执行的任意编码方式   Content-Language   理解主体时最适宜使用的自然语言   Content-Length   主体的长度或尺寸   Content-Location   资源实际所处的位置   Content-MD5   主体的MD5校验和   Content-Range   在整个资源中此实体表示的字节范围   Content-Type   这个主体的对象类型 

实体缓存首部  ETag   与此实体相关的实体标记17   Expires   实体不再有效,要从原始的源端再次获取此实体的日期和时间   Last-Modified   这个实体最后一次被修改的日期和时间 

扩展首部

(1)浏览器解析主机名 (2)浏览器查询主机名ip地址(dns) (3)获取端口号 (4)发送连接请求 (5)发送报文 (6)获取响应 (7)关闭连接

承载TCP的IP分组段

此处输入图片的描述

操作系统提供TCP套接字API来进行TCP通讯,隐藏内部实现原理。

HTTP请求时延一般是由网络时延造成,但是不排除事务时延。 事务时延: 1.DNS寻址时延,无缓存情况下可达10s 2.连接建立时延,新的TCP连接会产生1,2s 3.传输时延, 4.处理报文时延 三次握手:客户端建立TCP连接,发送一个小的TCP分组SYN标记,2服务器接受连接,发送一个置位SYN,ACK的TCP分组3客户端发送确认信息(小的HTTP事务会在连接建立上花费50%或更多时间) TCP慢启动:起初自我限制连接的最大速度,慢慢调谐,防止网络突然过载 NAGLE算法:解决大量包含少量数据分组导致的网络性能下降,但是可能会导致等待分组时延的问题

串行连接:完整请求原始地址,相继请求第一个对象,第二个对象 并行连接:允许客户端打开多条连接,并行执行多个HTTP事务。可能会慢(带宽问题,资源占用问题,线程切换) 持久连接:减少多连接带来的连接时延,慢启动时延 (HTTP报文通过在请求中写入Connection: Keep-Alive来指定该连接是否持久,服务器通过响应报文中写入该字段来标识是否支持持久连接) 持久以及并行连接:缺点:耗费内存等资源