🗒️HTTP 的内容

内容检索优化

HTTP/0.9

请求的 resource 总是被完整发送。

HTTP/1.0

  • 添加了管理 client 缓存的 headers,以允许 conditional GET requests。实际上,只有当 client 不知道 last modified time(上次修改时间)或资源发生过 change 时,server 才必须返回所请求资源的 entire content(全部内容)

  • 添加了 Content-Encoding 以指定资源的 returned content 是否被压缩

  • 如果事先不知道资源 content 的 total length(比如它是动态生成的),则 HTTP headers 中不存在 Content-Length:number header,并且 client 将假定当 server 关闭连接时,content 已全部发送。该机制无法区分 resource transfer(资源传输)是成功完成了还是被中断了(由于 server / network 错误或其它原因)

HTTP/1.1

HTTP/1.1 引入了:

  • 新 headers:以更好地管理对 cached resources(缓存资源)的 conditional retrieval(条件检索)

  • chunked transfer encoding(分块传输编码):允许 content 以 chunks(块)的形式流式传输,以便即使 server 事先不知道其 length 也能可靠地发送它(比如资源是动态生成的)

  • byte range serving(字节范围服务):允许 client 只请求资源的一个或多个 portions(部分,即 ranges of bytes 字节范围),此时 server 通常只返回请求的那部分内容。比如恢复中断的 download(尤其是当 file 非常 big 时)

HTTP/2、HTTP/3

HTTP/2 和 HTTP/3 都保留了 HTTP/1.1 的上述特征。

HTTP authentication(身份验证)

HTTP 提供了多种 authentication schemes,比如 basic access authenticationdigest access authentication(摘要访问身份验证),它们通过 challenge–response 机制运行,server 在服务请求内容之前 identifiy & issue 一个 challenge。

HTTP 为 access control 和 authentication 提供了一个通用 framework,通过一组可扩展的 challenge–response authentication schemes,server 使用它们来 challenge 一个 client request,而 client 则提供 authentication information。

上面提到的 authentication mechanisms 属于 HTTP protocol,由 client 和 server HTTP 软件管理,而不是由使用 web application session 的 web applications 管理。

HTTP application session

HTTP 是一种 stateless protocol,它不要求 web server 在 multiple requests 期间保留每个 user 的 information 或 status。

一些 web applications 需要管理 user sessions,因此它们实现了 states 或 server side sessions,比如使用 HTTP cookies 或 web forms 中的 hidden variables。

要启动 application user session,必须通过 web application login 来执行 interactive authentication。要停止 user session,user 必须请求 logout 操作。这些类型的操作不使用 HTTP authentication,而是使用 custom managed web application authentication。

Last updated