图解HTTP

今天看球耽误发文了,看完一场赶紧补上。

读前问题:

1、这本书对实际工作有什么帮助?

笔记整理如下:

无状态:HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。

Cookie:HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术。有了 Cookie 再用 HTTP 协议通信,就可以管理状态了。

Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。

Cookie是网景公司设计开发的,并制定了相关的规格标准,但是目前使用最广泛的 Cookie 标准是在网景公司制定的标准上进行扩展后的产物。

Set-Cookie 属于响应首部字段,Cookie属于请求首部字段。Cookie 的 HttpOnly 属性是 Cookie 的扩展功能,它使 JavaScript 脚本无法获得 Cookie。其主要目的为防止跨站脚本攻击(Cross-site scripting,XSS)对 Cookie 的信息窃取。

keep-alive

在HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。比如使用浏览器浏览一个包含多张图片的 HTML 页面时,在发送请求访问 HTML 页面资源的同时,也会请求该 HTML 页面里包含的其他资源。因此,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销。

为解决上述 TCP 连接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。这样就可以在 1 次 TCP 连接后进行多次HTTP的请求和响应的交互。持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

在 HTTP/1.1 中,所有的连接默认都是持久连接(keep-alive)。

管线化:从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。

常用的内容编码

1、gzip(GNU zip)由文件压缩程序 gzip(GNU zip)生成的编码格式;

2、compress(UNIX 系统的标准压缩)由 UNIX 文件压缩程序 compress 生成的编码格式;

3、deflate(zlib)组合使用 zlib 格式(RFC1950)及由 deflate 压缩算法(RFC1951)生成的编码格式;

4、identity(不进行编码)不执行压缩或不会变化的默认编码格式;

范围请求:下载一个尺寸稍大的图片或文件就已经很吃力了。如果下载过程中遇到网络中断的情况,那就必须重头开始。为了解决上述问题,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载。执行范围请求时,会用到首部字段 Range 来指定资源的 byte 范围。

内容协商机制Content Negotiation:指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。

Accept

Accept-Charset

Accept-Encoding

Accept-Language

Content-Language

响应状态码的类别

1、1XXInformational(信息性状态码)接收的请求正在处理

2、2XXSuccess(成功状态码)请求正常处理完毕;其中206 Partial Content 对应执行范围请求

3、3XXRedirection(重定向状态码)需要进行附加操作以完成请求

4、4XXClient Error(客户端错误状态码)服务器无法处理请求

5、5XXServer Error(服务器错误状态码)服务器处理请求出错

对虚拟主机的支持:HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。(在http协议层级上定义并支持虚拟主机的使用,因为要在http请求头写入域名信息)。在相同的 IP 地址下,由于虚拟主机可以寄存多个不同主机名和域名的 Web 网站,因此在发送 HTTP 请求时,必须在 Host 首部内完整指定主机名或域名的 URI。

代理服务器:使用代理服务器的理由有利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的等等。代理有多种使用方法,按两种基准分类。一种是是否使用缓存,另一种是是否会修改报文。

网关:网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非 HTTP 协议服务。

FTP协议比HTTP协议制定的时间要早,比TCP/IP都早

Cache-Control

在请求中指定no-cache会强制向源服务器再次验证,不要缓存服务器的数据;

1、在响应中指定no-cache会禁止缓存服务器缓存这些数据;

2、no-cache=Location 禁止在客户端缓存并使用这些数据

首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。

HTTPS=HTTP+ 加密 + 认证 + 完整性保护

HTTPS采用非对称加密和对称加密共用的混合加密机制,在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式,这样既安全又高效。

SSL 技术最初也是由网景公司率先倡导的。TSL 是以 SSL 为原型开发的协议,有时会统一称该协议为 SSL。

WebSocket:即 Web 浏览器与 Web 服务器之间全双工通信标准。当时筹划将 WebSocket 作为 HTML5 标准的一部分,而现在它却逐渐变成了独立的协议标准。

WebSocket 协议的主要特点:服务器推送功能,每次信息发送开销很小。

一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送 JSON、XML、HTML 或图片等任意格式的数据。

由于是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端,而一旦确立 WebSocket 通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。

回答问题

了解HTTP原理,对web开发、debug都有帮助。比如优化网站时可以用到缓存、代理服务器。网站安全工作要理解对称加密和非对称加密、HTTPS原理;websocket在浏览器即时通讯功能开发上对http有很大的补充,等等。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180615G212VN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券