HTTP权威指南阅读(一)

基本是原文内容的摘录,所选部分是自认为有用的部分/新知道的部分/有启发的部分/已知内容的其他说法,值得一记。另外有读有写有助记忆。

一. URI、URL和URN

URI:Uniform Resource Identifier,统一资源表示符
URL:Uniform Resource Location,统一资源定位符
URN:Uniform Resource Name,统一资源名

从关系上看,URI包含URL与URN。
从命名定义上看,
URI表示唯一标识并定位信息资源的资源标识方式。属于两者的统称
URL特指以资源地址的形式标识资源,如当前使用的网址形式:协议+域名+端口+方法+服务器文件位置,组合即可标识一台电脑上的资源地址。
URN则以特定内容的唯一名称的形式标识资源。URN可以使同一个资源四处搬移,而使用者不会因为资源位置的改变而丢失访问该资源的方式,也可以通过不同的网络协议访问该资源。URN在书中描述仍处于试验阶段,且我们当前访问互联网资源的方式基本都是URL。

1. URL语法

URL提供了定位互联网任意资源的手段,但是资源是通过不同的方案来访问的,如HTTP、FTP、SMTP等,URL语法会因为方案的不同有所改变。
大部分URL都遵循通用URL语法。大多方案的URL语法建立在9个部分组成的通用格式上:方案、主机、端口、路径、用户、密码、参数、查询、片段。
方案:即使用的协议信息,且方案名不区分大小写
主机和端口:主机标识资源宿主机器,端口标识服务器监听端口,对于下层使用了TCP协议的HTTP而言,默认端口为80
用户名和密码:许多服务器要求用户输入用户名和密码才允许用户访问数据,如FTP,需要携带指定用户名和密码,如果没有,浏览器将插入匿名用户名和密码
路径:URL路径说明了资源在宿主机器上的位置。路径使用/可划分成一个个的路径段,每个路径段可有自己的参数组件。
参数:向应用程序提供所需的输入参数以使得交互正确进行。是URL中的名值对列表。形如ftp://prep.ao.mit.edu/pub/gnu;type=d。
查询字符串:?后的内容为查询query组件,多个查询键值对由&分割
片段:对于大型文档,URL指向整个文档,但是片段可指向其中的某个部分。为了引用资源内部的片段,如http://www.joes.-hardware/tools.html#drills,引用了该文件名为drills的部分。但是,HTTP服务器只处理整个对象,而不是对象片段,是浏览器获取整个资源后,根据片段显示指定部分。

二. HTTP

1. 事务

一个HTTP事务,包含一个请求报文和一个响应报文。报文属于结构化数据块。

2. 方法:

每个请求报文都包含一个方法,该方法告知服务器执行操作。
GET :略
HEAD:与Get行为类似,但是服务器响应中只返回首部,不会返回实体的主体部分。允许客户端在为获取实际资源的情况下,对资源的首部进行检查。使用HEAD,可以在不获取资源的情况下了解资源的情况,如资源类型;可以查看状态码发现对象是否存在,查看首部测试资源是否篡改。由开发者保证返回的首部与Get返回首部完全相同。(任何概念实现都需要实际支持)
PUT :略
POST :略
TRACE:客户端发起请求时,请求可能穿过防火墙、代理、网管或者其他应用程序。每个中间节点都可能修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时,看它变成了什么样子,TRACE请求会在目的服务器发起一个环回诊断。最后一站服务器会弹回TRACE响应,在响应主体中携带原始请求报文。客户端可以查看在所有中间HTTP应用程序组成的请求、响应链上原始报文是否以及如何被毁坏胡总和修改。
缺点:它假定中间应用程序对各种不同类型请求的处理是相同的。TRACE不提供区分这些方法的机制,中间应用程序自行决定对TRACE请求的处理方式。
TRACE请求中不能带有实体的主体部分,TRACE响应中的实体主体部分包含了响应服务器收到的请求的精确副本。
OPTIONS:请求Web服务器告知其支持的各种功能,可以询问服务器支持哪些方法,或者对某些特殊资源支持哪些方法。客户端不用实际访问那些资源就可以判定访问各种资源的最优方式。
DELETE
扩展方法:HTTP设计为字段可扩展的,使得新特性不会使老软件失效。服务器为其管理的资源实现一些HTTP服务,这些方法为开发者提供了一种扩展这些HTTP服务能力的手段。
如:LOCK:允许用户锁定资源,如在编辑某个资源时将其锁定,防止别人同时进行修改。

3. 状态码:
  • 常见状态码含义:
  • 100~199
    信息性状态码,HTTP/1.1引入,由于对其复杂性和感知价值存在争论而受到限制。 如:100continue 收到了请求初始部分,让客户端继续…
  • 200~299
    成功状态码。 如:200 OK
  • 300~399
    重定向状态码。
    重定向状态码要么告知客户端使用替代位置来访问资源,要么就提供一个替代的响应而不是资源内容。如果资源被移动,可以发送一个重定向状态码和可选的Location首部告知客户端资源已经被移走,以及哪里可以获取。浏览器可以在不打扰使用者的情况下自动转入新位置。
301 Moved Permanently 在请求的URL已经被移除。响应的Location首部中应该包含资源现在所处的URL。
302 Found 与301类似,但是客户端应该使用Location首部给出的URL临时定位资源,将来的请求仍应使用
	老的URL。
304 Not Modified 如果客户端发起了一个条件请求,而最近资源未被修改,可使用该状态码说明资源未被
	修改。带有该状态码的响应不应包含实体的主体部分。
  • 400~499
    客户端错误状态码。如客户端发送了错误格式的请求报文,或者请求了一个不存在的URL。
400 Bad Request 告知客户端发送了错误的请求。
401 Unauthorized 请求未获取授权
403 Forbidden 请求被服务器拒绝。可以加主体说明原因描述,通常服务器不说明拒绝原因。
404 Not Found 服务器无法找到所请求的URL,通常包含一个实体,以便客户端应用程序显示给用户。
406 Not Acceptable 客户端可以指定参数类型说明愿意接受什么样的实体,但是服务器没有客户端可接受的URL
	相匹配的资源时返回该代码。通常会返回用于说明的主体。
407 Proxy Authentication Required 与401类似,但是用于要求对资源进行认证的代理服务器。
408 Request Timeout 客户端完成请求花费时间太长。服务器返回该状态码并关闭连接。
411 Length Required 服务器要求请求报文包含Content-Length首部时使用。
412 Precondition Failed 客户端发起条件请求,其中一个条件失败。客户端包含了Expect首部发起的请求就
	是条件请求。
413 Request Entity Too Large 客户端发送实体主体部分比服务器能够活着希望处理的更大。
414 Request URI Too Long 客户端发送的请求URL比服务器能够或希望处理的更长。
415 Unsupported Media Type 服务器无法理解或无法支持客户端发送实体的内容类型。
417 Expectation Failed 请求的Expect首部包含一个期望,服务器无法满足该期望。
  • 500~599
    服务器错误状态码。请求有效而服务器自身出错。
500 Internal Server Error 服务器遇到一个妨碍它为请求提供服务的错误。
501 Not Implement 客户端发起请求超出服务器能力范围,如使用了不支持的请求方法。
502 Bad Gateway 作为代理或网关使用的服务器,从请求响应链的下一条链路上收到了一条伪响应,
	如无法连接到父网关。
503 Service Unavailable 说明服务器现在无法为请求提供服务但是将来可以。如果知道什么时候
	,可以使用Retry-After首部在响应中说明。
504 Gateway Timeout 等待另一服务器对其请求进行相应时超时。
505 HTTP Version Not Supported 服务器收到的请求是不支持的协议版本
4. 报文结构:略。
5. 首部

通用首部:可出现在请求和响应报文中。
如:Date Tue, 3 Oct 1974 02:16:00 GMT 用于说明报文构建的时间和日期

请求首部:请求报文特有的,为服务器提供了额外信息,

	Accept 首部使客户端提供了一种将想要什么,可以用什么,不想要什么的信息告知服务器的方式,
	使连接的两端都受益服务器不会花费时间和带宽发送客户端无法使用的东西。信息明确,有筛选.
	Accept-Chatset 告知服务器需要的字符集
	Accept-Encoding 告知服务器需要的编码方式
	Accept-Language 告知服务器需要的语言

Accept: * / * 表示客户端会接受和请求相符的任意媒体类型
Host:给出接受请求的服务器主机名和端口号。
Referer:提供包含当前顶球的文档的URL
User-Agent:发起请求的应用程序名称告知服务器。

如 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36

1.条件请求首部
客户端为请求加上某些限制,要求服务器在对请求响应前保证某个条件为真。

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

2.安全请求首部

	Authorizatiion 包含客户端提供给服务器,以便对自身认证的数据。
	Cookie
	Cookie2 说明请求Cookie的版本

3.代理请求首部
随着代理的普遍应用,定义了一些首部协助其更好工作

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

响应首部
响应报文特有,为客户端提供信息。包括谁发送响应等。
如:
Server : BWS/1.0 客户端正在与一个版本1.0的BWS服务器交互。
Age:响应从最初创建开始持续时间
Public:服务器为其资源支持的请求方法列表
Retry-After:如果资源不可用,在该日期或时间重试

实体首部
描述主体的长度和内容,或者资源本身数据类型等,从有关对象类型的信息到能够对资源使用的有效请求方法,告知接收者在对什么进行处理。
如:
Content-Type: text/html; charset≈iso-latin-1 标识主体是iso-labtin-1字符集表示的HTML文档。
Allow:列出了可以对此实体执行的请求方法
Location:告知客户端实体实际上位于何处,用于将接收端定向到资源的位置URL上去。
内容首部
提供实体内容有关的特定信息。

1.内容首部

	Content-Base 解析主体中相对URL时使用的基础URL
	Content-Encoding 对主体执行的编码方式
	Content-Language 理解主题最合适使用的自然语言
	Content-Length 主体的长度
	Content-Location 资源实际所处位置
	Content-MD5 主体的MD5校验和
	Content-Range 在整个资源中此实体表示的字节范围
	Content-Type 主体对象类型

2.主体缓存首部
说明了如何或什么时候进行缓存,提供了被缓存实体有关的信息。如验证已缓存资源副本是否依然有效的信息;更好的估计已缓存资源何时失效所需线索。

扩展首部:规范未定义的新首部。

IP、主机名与DNS
浏览器通过URL解析出主机名,通过DNS服务转换成IP地址。

三. Web结构组件

代理
位于客户端和服务器之间,接收所有客户端的HTTP请求,并将请求转发给服务器。
代理可过滤HTTP请求和响应,如对小学生屏蔽成人内容,为企业下载应用程序检测病毒,可在代理处进行。
正向代理与反向代理
正向代理 代理客户端的请求去访问服务器,被代理者是客户端,请求多个,而服务器单个。
反向代理 代理服务器,请求到达代理后,最后被发往哪个服务器,由反向代理决定,请求一个,服务器多个。

缓存
Web缓存或代理缓存是一种特殊的HTTP代理服务器,将经过代理传送的常用文档复制保存,下一个请求该文档的客户端可以享受缓存的私有副本提供的高速服务。

隧道
是一种建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。常见用途是通过HTTP连接承载加密的安全套接字层流量,SSL流量可以穿过只允许Web流量通过的防火墙。

HTTP作为应用层协议,所有的联网细节交由TCP/IP乃至更下层的网络协议去处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值