【读书笔记】图解HTTP(2)HTTP


前言

书籍阅读笔记
《图解HTTP》[ 日 ] 上野宣 著


HTTP

默认为持久连接:只要任意一端没有明确提出断开连接,则保持 TCP 连接

  • 管线化(pipelining):不用等待响应,亦可直接发送下一个请求

HTTP 报文

分为报文首部和报文主体,由空行(CR 回车符+LF 换行符)来划分

  • 通常,不一定要有报文主体
  • 传输实体资源:由实体主体得到报文主体
说明首部字段
压缩内容编码指明编码格式Accept-Encoding
分块传输十六进制记录块的大小Transfer-Encoding
多部分对象集合一份报文主体内可含有多类型实体Content-type
范围请求一部分、一部分地请求数据Range(byte范围)
内容协商访问相同 URI 的Web页面时,显示不同的内容
以响应资源的语言、字符集、编码方式等作为判断的基准
Accept 相关

首部字段

包括通用首部、请求首部、响应首部、实体首部

  • 首部字段名: 字段值
    • 多个字段值用逗号分隔:Keep-Alive(逐跳首部): timeout=15, max=100
  • 逐跳首部(Hop-by-hop):只对单次转发有效,下一服务器不再转发该字段
  • 端到端首部:每一个经过的服务器都必须转发,直至客户端 / 服务端最终接收
    • 除8个逐跳首部外,均为端到端首部
通用首部
通用首部字段名说明逐跳首部
Cache-Control缓存相关的处理和控制
ConnectionConnection: 逐跳首部字段名(使其端到端转发)
(默认)Connection: Keep-Alive
Connection: close(断开连接)
Y
Date创建报文的日期时间
PragmaPragma: no-cache,仅为兼容
Trailer声明在报文主体后有哪些首部字段Y
Transfer-Encoding报文主体的传输编码方式Y
Upgrade升级为其他协议
Upgrade: TLS/1.0, HTTP/1.1
Y
Via经过的代理服务器的相关信息(避免请求回环)
Warning错误通知
请求首部
  • If-xxx:条件请求,服务端判断指定条件为真时,才会执行请求
请求首部字段名说明
Accept用户代理可处理的媒体类型,及其优先级
text/html, image/jpeg, application/octet-stream(应用程序使用的二进制文件)
q= 表示优先级权重(范围为0-1),用 ; 分隔
Accept-Charset支持的字符集,及其优先级
Accept-Encoding支持的内容编码方式,及其优先级
Accept-Language支持的自然语言,及其优先级
Authorization认证信息(证书值)
Expect期待服务器的特定行为
From用户代理的负责人的电子邮箱地址
Host(必须包含)请求的资源所处的互联网主机名和端口号
If-MatchIf-Match: 字符串(该字符串与实体标记(ETag)一致时为真)
If-Modified-SinceIf-Modified-Since: 日期时间(该时间后资源更新过为真)
If-None-Match与If-Match相反
If-RangeIf-Range: ETag 值或日期时间(一致则作为范围请求处理,反之,则返回全部资源)
If-Unmodified-Since与If-Modified-Since相反
Max-Forwards最大传输转发数
Proxy-Authorization(逐跳首部)告知代理服务器认证信息
Range资源的字节范围请求(无法处理则返回全部资源)
Referer请求 URI 是从哪个Web页面发起的
TE(逐跳首部)支持的传输编码方式,及其优先级
User-Agent客户端的相关信息(中间可能添加上代理服务器的信息)
响应首部
响应首部字段名说明
Accept-Ranges是(bytes)否(none)接受范围请求
Age(代理创建响应时必须包含)源服务器在多久(秒)前创建了响应
ETag唯一标识资源的字符串
服务器为每份资源分配一个 ETag 值,资源更新时,ETag 值也会更新
Location令客户端重定向至指定 URI
Proxy-Authenticate(逐跳首部)告知客户端,代理服务器所要求的认证信息
Retry-After告知客户端,应该在多久之后再次发送请求
Server服务器上安装的 HTTP 服务器应用程序的信息
VaryVary: 首部字段名
值相同,直接从缓存返回响应;反之,则先从源服务器获取资源,再返回响应
WWW-Authenticate服务器对客户端的认证信息
实体首部
实体首部字段名说明
Allow资源支持的 HTTP 方法
Content-Encoding实体主体的内容编码方式
Content-Language实体主体的自然语言
Content-Length实体主体的大小(byte
Content-Location实体主体对应的 URI
Content-MD5实体主体的报文摘要
Content-Range实体主体的响应范围
Content-Type实体主体的媒体类型
Expires资源失效的日期时间
Last-Modified资源的最后修改日期时间
非1.1版 HTTP 规定的首部

Cookie(网景公司):用户识别及状态管理

  • HTTP 不保留之前一切的请求或响应报文的信息,无法根据之前的状态进行本次的请求处理
  • 服务端设置响应报文内首部字段的 Set-Cookie(写入生成的Cookie 值),通知客户端保存 Cookie;客户端会自动在下次的请求报文中加入 Cookie 值(首部字段:Cookie)后发送出去
  • Set-Cookie 字段的属性说明
    name=VALUE赋予 Cookie 的名称和其值(必须)
    expires=DATECookie 的有效期(默认为浏览器关闭前为止)
    path=PATHCookie 适用的文件目录(默认为文档所在的文件目录)
    domain=域名Cookie 适用的域名(默认为创建 Cookie 的服务器)
    secure仅在 HTTPS 安全通信时才能发送Cookie
    HttpOnly使 Cookie 不能被 JavaScript 脚本访问
  • 服务器只能通过覆盖已过期的 Cookie,实现对客户端 Cookie 的实质性删除
首部字段名说明字段值
X-Frame-Options响应首部DENY(拒绝),SAMEORIGIN(仅同源域名下的页面许可)
X-XSS-Protection响应首部0(无 XSS 过滤),1(有 XSS 过滤)
DNT请求首部0(同意广告追踪),1(拒绝广告追踪)
P3P响应首部,保护用户隐私

请求报文

请求方法、请求URI、协议版本、首部字段(可选的)、报文主体

请求方法:方法名必须使用大写字母

  • 方法名说明
    GET获取资源
    POST传输数据(返回处理结果)
    HEAD获得报文首部
    OPTIONS询问支持的方法
    TRACE追踪路径
    CONNECT要求用隧道协议连接代理
    • 隧道:使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后,经网络隧道传输

对服务器本身发起请求,可以用 * 来代替请求 URI


响应报文

协议版本、状态码、用以解释状态码的原因短语、首部字段(可选的)、报文主体

状态码:第一位指定了响应类别

  • 类别原因短语说明
    1XXInformational(信息性状态码)接收的请求正在处理
    2XXSuccess(成功状态码)请求正常处理完毕
    3XXRedirection(重定向状态码)需要进行附加操作以完成请求
    4XXClient Error(客户端错误状态码)服务器无法处理请求
    5XXServer Error(服务器错误状态码)服务器处理请求出错
  • 只要遵守状态码类别的定义,可以改变 RFC 中定义的状态码,或服务器端自行创建状态码
  • 返回301、302、303 响应状态码时,几乎所有浏览器都会把POST 改成 GET,并删除请求报文内的主体,自动再次发送请求
  • 可能出现 Web 应用程序内部发生错误,状态码依然返回 200 OK

服务器

一台 Web 服务器可搭建多个独立域名的 Web 网站(虚拟主机、相同IP)

  • 代理:转发时,需要在首部字段Via 中记录经过的主机信息

  • 网关:使通信线路上的服务器提供非 HTTP 协议的服务,如连接数据库等
    -在这里插入图片描述

  • 隧道:安全通信,透明传输

缓存:超过缓存有效期后,客户端 / 代理服务器会向源服务器确认资源的有效性


确认访问用户的身份

HTTP 使用的认证方式说明
BASIC 认证(基本认证)采用 Base64 编码,传输用户 ID 和密码
DIGEST 认证(摘要认证)由接收到的质询码(challenge)计算生成响应码(response)并返回
SSL 客户端认证HTTPS 的客户端证书(花钱注册,内含公钥)
FormBase 认证(基于表单认证)Web 应用程序的用户登录信息,一般使用 Cookie 来管理Session(会话)

通常,SSL 采用双因素认证,即用客户端证书来认证主机,用密码来确定用户本人


功能追加

HTTP 的瓶颈:

  • 一条连接上只可发送一个请求
  • 请求只能从客户端开始,客户端不可以接收除响应以外的指令
  • 请求 / 响应首部未经压缩就发送
  • 每次互相发送相同的首部造成的浪费较多
  • 可任意选择数据压缩格式,而非强制压缩发送

解决方法:

  • Ajax(Asynchronous JavaScript and XML,异步 JavaScript 与 XML技术):局部 Web 页面替换加载

  • Comet:先将响应置于挂起状态,当服务器端有内容更新时,立即返回该响应(模拟实现推送)

  • SPDY(Google):会话层

    • 一条 TCP 连接上处理多个 HTTP 请求(单个域名通信多路复用),并赋予请求优先级
    • 压缩 HTTP 首部
    • 支持服务器主动向客户端推送数据
    • 支持服务器主动提示客户端请求所需的资源
  • WebSocket(Google):Web 浏览器与 Web 服务器之间全双工通信标准

    • HTTP 连接建立之后,需要完成一次“握手”(Upgrade: websocket),切换为 WebSocket 协议
  • WebDAV:对 Web 服务器上的内容直接进行操作的分布式文件系统

    • 创建、删除文件,文件创建者管理,文件编辑时加锁,文件版本控制等
  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值