找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1168|回复: 6
收起左侧

[Web Technology] 《图解HTTP》笔记 - HTTP知识入门

[复制链接]

6

主题

1

精华

63

积分

资深会员

Rank: 2

积分
63
发表于 5-1-2015 07:00 AM | 显示全部楼层 |阅读模式

亲!马上注册或者登录会查看更多内容!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
之前读完了《图解HTTP》,做了一些笔记。这本书讲得比较浅,插图尤其萌&帮助理解,很适合入门。
笔记写得比较私人,如果表述不清请见谅——


如果以下图片/表格显示出错,直接点击 evernote 链接看即可:
http://www.evernote.com/l/AcUR13SH8KlPJLbi6kWYI8YBXcL2lauI-3c/








完整的HTTP请求过程
  • 建立TCP连接
  • Client向Server发送请求信息
  • Client发送Header
  • Server应答
  • Server发送Header
  • Server发送Entity
  • Server关闭TCP连接



第1章

OSI Model
TCP/IP Model
7 应用层 Application
应用层 ApplicationFTP, DNS, HTTP
6 表示层 Presentation


5 会话层 Session


4 传输层 Transport
传输层 (Host-to-Host) TransportTCP(Trasmission Control Protocol) UDP(User Data Protocol)
3 网络层 Network
网际层 Internet Protocol (IP)处理在网络上流动的数据包,选择传输路线;加打MAC地址
2 数据链路层 Data Link
网络接口 Network Interface
1 物理层 Physical
(Hardware)








TCP 协议为了更容易传送大数据才把数据分割,而且TCP 协议能够确认数据最终是否送达到对方。采用了三次握手(three-way handshaking)策略。
  • 发送端首先发送一个带 SYN 标志的数据包给对方。
  • 接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。
  • 最后,发送端再回传一个带 ACK 标志的数据包。

IP 间的通信依赖MAC 地址。在进行中转时,会利用下一站中转设备的MAC 地址来搜索下一个中转目标。这时,会采用ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方的IP 地址就可以反查出对应的MAC 地址。

URI 是Uniform Resource Identifier 的缩写。



6

主题

1

精华

63

积分

资深会员

Rank: 2

积分
63
 楼主| 发表于 5-1-2015 07:04 AM | 显示全部楼层
第4章
状态码的类别
1XX
Informational(信息性状态码)
接收的请求正在处理
2XX
Success(成功状态码)
请求正常处理完毕
3XX
Redirection(重定向状态码)
需要进行附加操作以完成请求
4XX
Client Error(客户端错误状态码)
服务器无法处理请求
5XX
Server Error(服务器错误状态码)
服务器处理请求出错


200 OK成功
204 No Content
返回的响应报文中不含实体的主体部分。
一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
206 Partial Content
客户端进行了范围请求,而服务器成功执行了这部分的GET 请求
301 Moved Permanently永久性重定向。请求资源已经被分配了新的URI
302 Found
临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI 访问。
303 See Other
和302 Found 状态码有着相同的功能,但303 状态码明确表示客户端应当采用GET 方法获取资源。

当301、302、303 响应状态码返回时,几乎所有的浏览器都会把POST 改成GET,并删除请求报文内的主体,之后请求会自动再次发送。
301、302 标准是禁止将POST 方法改变成GET 方法的,但实际使用时大家都会这么做。
304 Not Modified
客户端发送附带条件的请求 A 时,服务器端允许请求访问资源,但未满足条件。
附带条件的请求是指采用GET 方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部。
307 Temporary Redirect
与302 Found 有着相同的含义。
400 Bad Request
请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
401 Unauthorized
发送的请求需要有通过HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。另外若之前已进行过1 次请求,则表示用户认证失败。
403 Forbidden
对请求资源的访问被服务器拒绝了。
404 Not Found
服务器上无法找到请求的资源。
500 Internal Server Error
服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug 或某些临时的故障。
503 Service Unavailable
服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。




第5章
代理 Proxy
代理是一种有转发功能的应用程序,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
代理不改变请求URI,会直接发送给前方持有资源的目标服务器。转发时,附加Via 首部字段以标记出经过的主机信息。




缓存代理Caching Proxy 预先将资源的副本(缓存)保存在代理服务器上。不用从源服务器处获取资源。
服务器缓存:会向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器上获取“新”资源。
客户端缓存:当判定缓存过期后,会向源服务器确认资源的有效性。若判断浏览器缓存失效,浏览器会再次请求新资源。
透明代理Transparent Proxy 转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。

网关 Gateway
利用网关可以由HTTP 请求转化为其他协议通信。
比如,网关可以连接数据库,使用SQL 语句查询数据。另外,在Web 购物网站上进行信用卡结算时,网关可以和信用卡结算系统联动。

隧道
建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。
隧道本身不会去解析HTTP 请求。也就是说,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。



第6章
HTTP 请求报文




HTTP 响应报文





Header Fields例:
Content-Type: text/html

Keep-Alive: timeout=15, max=100

通用首部字段(General Header Fields)
请求报文和响应报文两方都会使用的首部。
请求首部字段(Request Header Fields)
客户端→服务器
请求的附加内容、客户端信息、响应内容相关优先级等信息。
响应首部字段(Response Header Fields)
服务器→客户端
响应的附加内容,也会要求客户端附加额外的内容信息。
实体首部字段(Entity Header Fields)
资源内容更新时间等与实体有关的信息。


HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成2种类型。
End-to-end Header: 首部会转发给请求/ 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发
Hop-by-hop Header:只对单次转发有效,会因通过缓存或代理而不再转发。仅含以下8种:
Connection, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, Trailer, TE, Transfer-Encoding, Upgrade

6.3 通用首部字段 General Header Fields(Request Response都会使用)
Cache-Control
控制缓存的行为 P101
e.g. Cache-Control: private, max-age=0, no-cache
Connection
Hop-by-hop Header、连接的管理
Date
创建报文的日期时间
Pragma
报文指令; 是HTTP/1.1 之前版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容而定义。
Trailer
报文末端的首部一览; 事先说明在主体有哪些Header Fields。
Transfer-Encoding
传输报文主体时采用的编码方式。HTTP/1.1 的传输编码方式仅对分块传输编码有效。
e.g. Transfer-Encoding: chunked
Upgrade
升级为其他协议。 其参数值可以用来指定一个完全不同的通信协议。

使用首部字段Upgrade 时,还需要额外指定Connection:Upgrade

Via
追踪客户端与服务器之间的请求和响应报文的传输路径。
报文经过代理或网关时,会先在首部字段Via 中附加该服务器的信息,然后再进行转发。
Warning
Warning: [警告码][警告的主机:端口号]“[警告内容]”([日期时间])
警告码(P117)

回复 支持 反对

使用道具 举报

6

主题

1

精华

63

积分

资深会员

Rank: 2

积分
63
 楼主| 发表于 5-1-2015 07:06 AM | 显示全部楼层

Cache-Control
Cache-Control Request 客户端
指令参数说明
no-cache
强制向源服务器再次验证,将不会接收缓存过的响应。
缓存服务器必须把客户端请求转发给源服务器。
no-store
不缓存请求或响应的任何内容
max-age = [ 秒]
必需
响应的最大Age值
max-stale( = [ 秒])
可省略
接收已过期的响应
min-fresh = [ 秒]
必需
期望在指定时间内的响应仍有效
no-transform
代理不可更改媒体类型
only-if-cached
从缓存获取资源
cache-extension
-
新指令标记(token)


no-cache代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源,也许称为do-not-serve-from-cache-without-revalidation更合适。
no-store 才是真正地不进行缓存。

Cache-Control Response 服务器
指令
参数
说明
no-cache
可省略
缓存前必须先确认其有效性
no-store
不缓存请求或响应的任何内容
max-age = [ 秒]
必需响应最大Age值
s-maxage = [ 秒]
必需
公共缓存服务器(代理)响应的最大Age值
no-transform
代理不可更改媒体类型
public
可向任意方提供响应的缓存
private
可省略
仅向特定用户返回响应
must-revalidate
可缓存但必须再向源服务器进行确认
proxy-revalidate
要求中间缓存服务器对缓存的响应有效性再进行确认
cache-extension
-
新指令标记(token)


e.g.
Cache-Control: max-age=604800(单位:秒)
客户端包含:若缓存资源的时间<指定时间,接受缓存资源;否则接受源服务器资源
服务端包含:缓存服务器将不对资源的有效性再作确认,而max-age 数值代表资源保存为缓存的最长时间。

Cache-Control: no-transform

缓存都不能改变实体主体的媒体类型。这样做可防止缓存或代理压缩图片等类似操作。



Cache-Control: min-fresh=60(单位:秒)
指定min-fresh 为60 秒后,过了60 秒的资源都无法作为响应返回了。即资源已经过时了。

Cache-Control: only-if-cached??


Cache-Control: max-stale=3600(单位:秒)
即使过期,只要仍处于max-stale 指定的时间内,仍旧会被客户端接收。

Cache-Control: must-revalidate
代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。
若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端一条504(Gateway Timeout)状态码。
另外,使用must-revalidate 指令会忽略请求的max-stale 指令(即使已经在首部使用了max-stale,也不会再有效果)。

Cache-Control: proxy-revalidate
所有的缓存服务器在接收到客户端带有该 指令的请求返回响应之前,必须再次验证缓存的有效性。



Connection
控制不再转发给代理的Header Fields




管理持久连接
Connection: Keep-Alive
Connection: close


Upgrade





Via





回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表