HTTP权威指南(一)

HTTP权威指南笔记(一)

总共写了四篇笔记,其中本篇中大部分内容都会在面试中涉及,二三四涉及的较少

一.概述

1.HTTP使用的是可靠的数据传输协议(TCP)
2.Web内容都是存储在Web服务器上的
3.Web服务器是Web资源的宿主,Web资源是Web内容的源头
- 媒体类型:MIME数据格式类型
- URI:包含URL和URN
4.事务,通过HTTP报文这种格式化数据块进行
5.报文,纯文本格式。分为请求报文和响应报文。包含三部分:起始行,首部字段和主体
6.连接,HTTP是应用层协议,联网细节都交给TCP/IP协议。
TCP提供了:(1)无差错的数据传输 (2)按序传输 (3) 未分段的数据流
<关键>浏览器连接处理
- 浏览器从URL中解析出服务器的主机名
- 浏览器将服务器的主机名转换成服务器的IP地址
- 浏览器将端口号从URL中解析出来
- 浏览器向服务器发送一条HTTP请求报文
- 服务器想浏览器回送一条HTTP响应报文
- 关闭连接,浏览器显示文档
7.协议版本:0.9->1.0->1.0+->1.1->2.0(NG)
8.Web的结构组件
(1)代理:作为转发所有Web流量的可信任中间节点使用
(2)缓存:特殊的HTTP代理服务器,可以将经过代理传送的常见文档复制保存起来。下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了
(3)网关:特殊的服务器,作为其他服务器的中间是提示用,主要用于将HTTP流量转换成其他的协议
(4)隧道:建立之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序
(5)Agent代理:用户Agent代理是代表用户发起HTTP请求的客户端程序

二.URL与资源

1.浏览因特网资源:主要是通过URL进行。URL分为三个部分:URL方案,服务器的位置,资源路径
2.URL的语法:

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

方案:访问服务器以获取资源时要使用哪种协议
用户:某些方案访问资源时需要的用户名
密码:用户名可能需要的密码
主机:资源宿主服务器的主机名或者IP地址
端口:资源宿主服务器正在监听的端口号
路径:服务器上资源的本地名
参数:某些方案会用这个组件来指定输入参数,参数为名/值对,分号间隔
查询:某些方案会用这个组件传递参数以激活应用程序
片段:一小片或一部分资源的名字
3.URL快捷方式
4.字符限制
5.各类方案(协议)

三.HTTP报文

1.报文流:HTTP使用流入和流出来描述事物处理的方向,不管是请求报文还是响应报文,所有报文都会向下游流动。所有报文的发送者都在接收者的上游
2.报文的组成部分:起始行,首部,可选的主体
请求报文的格式

<method> <request-url> <version>
<headers>

<entity-body>

响应报文的格式

<version><status><reason-phrase>
<headers>

<entity-body>

对报文各部分的简要阐述

<method>客户端希望服务器对资源执行的动作
<request-url>命名了所请求资源,或者URL路径组件的完整URL
<version>报文所使用的HTTP版本
<status>描述了请求过程发生的情况
<reason-phrase>数字状态码的可读版本
<headers>可以用零个或多个首部,使用key:value形式,末尾使用CRLF,首部是由一个CRLF
结束的表示了首部列表的结束和实体主体部分的开始
<entity-body>包含一个由任意数据组成的数据块

3.方法
GET和HEAD方法被认为是安全的方法
GET:通常用于请求服务器发送某个资源
HEAD:和GET类似,但是服务器在响应中只返回首部,不会返回实体部分
PUT:会向服务器写入文档
POST:用来向服务器输入数据
TRACE:环回诊断,相应主体中携带收到的原始请求报文
OPTIONS:请求Web服务器告知其支持的各种功能
DELETE:请求服务器删除请求URL所指定的资源
扩展方法:LOCK/MKCOL/COPY/MOVE
<注意>POST用于向服务器发送数据,PUT用于向服务器上的资源中存储数据
4.状态码

(1)100-199 信息行状态码

100 Continue 说明收到了请求的起始部分,请客户端继续
101 Switching Protocols 说明服务器正在根据客户端的指定,将协议切换成Update首部所列的协议


(2)200-299 成功状态码

200 OK 请求没问题,实体的主体部分包含了所请求的资源
201 Created 用于创建服务器对象的请求
202 Accepted 请求已被接受,但服务器还未对其执行任何动作
203 Non-AuthoritativeInformation 实体首部包含的信息不是来自于源端服务器,而是来自资源的一份副本
204 No Content 响应报文中包含若干首部和一个状态行,但没有实体的主体部分(主要用于在浏览器不转为显示新文档的情况下,对其进行更新)
205 Reset Content 负责告知浏览器清除当前页面中所有的HTML表单元素
206 Partial Content 成功执行了一个范围请求


(3)300-399 重定向状态码
300 Multiple Choices 客户端请求一个实际指向多个资源的URL时会返回这个状态码
301 Moved Permanently 在请求的URL已被移除时使用,相应的location首部中应该包含资源现在所处的URL
302 Found 类似301,但是客户端应该使用Location首部给出的URL来临时定位资源
303 See Other 告知客户端应该用另一个URL来获取资源(允许POST请求的响应将客户端定向到某个资源上去)
304 Not Modified 客户端可以通过所包含的请求首部,使其请求变成有条件的。如果客户端发起了一个GET请求,而最近资源未被修改的话,使用该说明资源未被修改。带有这个状态码的响应不应该包含实体的主体部分
305 Use Proxy 用来说明必须通过一个代理来访问资源,代理的位置由Location首部给出
307 Temporary Redirect 临时重定向,但是不允许POST转换为GET


(4)400-499 客户端错误状态码
400 Bad Request 告知客户端发送了一个错误请求
401 Unauthorized 认证
402 Payment Required 保留
403 Forbidden 请求被服务器拒绝,通常用于不想说明原因时使用
404 Not Found 略
405 Method Not Allowed 说明发起的请求是不支持的方法时返回
406 Not Acceptable 服务器没有与客户端可接受的URL相匹配的资源时返回此状态码
407 Proxy Authentication Required 类似于401,但是用于代理服务器
408 Request Timeout 如果客户端完成请求所花的时间太长,服务器可以回送此状态码并关闭连接
409 Conflict 用于说明请求可能在资源上引发的一些冲突
410 Gone 类似404,只是服务器曾经拥有过此资源
411 Length Required 服务器要求请求报文中包含Content-Length首部时使用
412 Precondition Failed 客户端发起条件请求,且其中一个条件失败时使用
413 Request Entity Too Large 客户端发送的实体主体过大时
414 Request URI Too Long 客户端发送的URL过长时
415 Unsupported Media Type 服务器无法理解或支持客户端所发实体的内容类型时
416 Requested Range Not Satisfiable 请求报文指定的范围无效或者无法满足
417 Expectation Failed 请求首部的Expect无法满足时


(5)500-599 服务器错误状态码
500 Internal Server Error 服务器内部错误
501 Not Implemented 客户端发起的请求超出服务器处理范围
502 Bad Gateway 作为代理或者网关使用的服务器从请求响应链的下一条链路上收到了一条伪响应
503 Service Unavailable 服务器暂时无法提供服务
504 Gateway Timeout 网关超时
505 HTTP Version Not Supported 服务器收到的请求使用了它无法或者不愿支持的协议版本


5.首部

(1)通用首部
Connection:连接相关
Date:日期和时间标志
MIME-Version:给出了发送端使用的MIME版本
Trailer:分块传输编码方式
Transfer-Encoding:报文编码方式
Update:给出了发送端可能想要升级新版本或者协议
Via:显示了报文经过的中间节点
通用缓存首部:
Cache-Control:用于随报文传送缓存指示
Pragma:另一种随报文传送指示的方式,但不专用于缓存


(2)请求首部
Client-IP:提供了运行客户端的机器的IP地址
From:提供了客户端用户的E-mail地址
Host:服务器的主机名和端口号
Referer:提供了包含当前请求URI的文档的URL
UA:客户端相关信息
Accept首部:告知服务器客户端的喜好
Accept:告知服务器能够发送哪些媒体类型
Accept-Charset:告知服务器可以发送哪些字符集
Accept-Encoding:告知服务器可以发送哪些编码方式
Accept-Language:告知服务器可以发送哪些语言
条件请求首部:为某些请求加上限制
Expect:允许客户端列出某请求所要求的服务器行为
If-Match:如果匹配则获取该文档
If-Modified-Since:除非在某个指定的日期之后资源被修改过,否则就限制这个请求
If-None-Match:和If-Match相反
If-Range:允许对文档的某个范围进行条件请求
If-Unmodified-Since:和If-Modified-Since相反
Range:如果服务器支持范围请求,就请求资源的指定范围
安全请求首部
Authorization:包含了客户端提供给服务器,以便对自身进行认证的数据
Cookie:客户端向服务器传送令牌
Cookie2:用来说明请求段支持的Cookie版本
代理请求首部
Max-Forward:在通往源端服务器的路径上,请求转发的最大次数
Proxy-Authorization:类似Authorization
Proxy-Connection:类似Connection


(3)响应首部
Age:从最初创建开始的响应持续时间
Public:服务器为其资源支持的请求方法列表
Retry-After:如果资源不可用的话,在此日期或者时间重试
Server:服务器应用程序软件的名称和版本
Title:HTML文档源端给出的标题
Warning:比原因更短的一些警告报文
协商首部:
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Vary:可能会使相应发生变化
安全响应首部:
Proxy-Authenticate:来自代理对客户端的质询列表
Set-Cookie:在客户端设置令牌
Set-Cookie2:类似Set-Cookie
WWW-Authenticate:来自服务器对客户端的质询列表


(4)实体首部
Allow:列出了可以对此实体执行的请求方法
Location:告知客户端实体实际上位于何处
内容首部
Content-Base:解析主体中的相对URL是使用的基础URL
Content-Encoding:对主体执行的任意编码方式
Content-Language:最适宜使用的主题语言
Content-Length:主题的长度或尺寸
Content-Location:资源实际所处的位置
Content-MD5:主体的MD5校验和
Content-Range:在整个资源中此实体表示的字节范围
Content-Type:这个主体的对象类型
实体缓存首部:
ETag:与此实体相关的实体标记
Expires:实体不再有效,要从原始的源端再次获取此实体的日期和时间
Last-Modified:这个实体最后一次被修改的日期和时间


四.连接管理

1.TCP连接
TCP的可靠数据管道,TCP流是分段的,由IP分组发送

TCP连接通过四个值来识别:<源IP地址,源端口号,目的IP地址,目的端口号>

2.对TCP性能的考虑
HTTP事务的性能在很大程度上取决于底层TCP通道的性能
(1)HTTP事务的时延
(2)性能聚焦区域(3-7涉及的)
(3)TCP连接的握手时延
(4)延迟确认
(5)TCP慢启动
(6)Nagle算法和TCP_NODELAY
(7)TIME_WAIT累计和端口耗尽
3.HTTP连接的处理
4.并行连接,并不一定会更快
5.持久连接,在事务处理结束之后仍然保持在打开状态的TCP连接被称为持久连接
HTTP/1.0+的:Keep-Alive操作、选项、限制与规则、哑代理、盲中继
HTTP/1.1持久连接,默认持久。限制和规则
6.管道化连接:HTTP/1.1允许在持久连接上可选的使用请求管道
7.关闭连接的奥妙
关闭连接的输出信道总是很安全的。
如果另一端向你已关闭的输入信道发送数据,操作系统就会向另一端的机器回送一条TCP“连接被对端重置”的报文

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值