Skip to content
On this page

HTTP协议

HTTP协议用于客户端和服务端之间的通信。HTTP协议规定,请求从客户端发出,最后服务器响应请求并返回。

无状态协议

HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。

HTTP/1.1虽然是无状态协议,但是为了实现期望的保持状态功能,引入了Cookie。

HTTP方法

  • GET:获取资源
  • POST:传输实体主体
  • PUT:传输文件
  • HEAD:获取报文首部
  • DELETE:删除文件
  • OPTIONS:询问支持方法

持久连接节省通信量

HTTP协议的初始版本,每进行一次HTTP通信都要端来一次TCP连接。

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

持久连接

HTTP keep-alive

持久连接的好处在于减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。减少开销的那部分时间,使HTTP请求和响应能够更早的结束,这样web页面的显示速度也就相应的提高的。

Cookie的状态管理

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态

Cookie根据从服务端发送的响应报文内的Set-Cookie的首部字段信息,通知客户端保存Cookie。下次客户端再往服务器发送请求的时候,客户端会自动在请求报文中加入Cookie值发送出去

HTTP状态码

  • 1xx —— 接收的请求正在处理
  • 2xx —— 请求正常处理完毕
  • 3xx —— 需要进行附加操作以完成请求
  • 4xx —— 服务器无法处理请求
  • 5xx —— 服务器处理请求出错

2xx 成功

200 OK - 表示从客户端发来的请求在服务器端被正常处理了 204 No Content - 表示服务器接收的请求已经成功处理,但是在返回的响应报文中不含实体的主体部分,另外也不允许返回任何实体的主体 206 Partial Content - 表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容

请求首部字段

  • Accept —— 通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级

    • 文本文件 —— text/html, text/plain, text/css, application/xhtml+xml, application/wml
    • 图片文件 —— image/jpeg, image/gif, image/png
    • 视频文件 —— video/mpeg, video/quicktime
    • 应用程序使用的二进制文件 —— application/octet-stream, application/zip
  • Accept-Charest —— 用来通知服务器用户代理支持的字符集及字符集的相对优先顺序

  • Accept-Encoding —— 用来告知服务器用户代理支持的内容编码以及内容编码的优先顺序

    • gzip —— 由文件压缩程序gzip生成的编码格式
    • compress —— 由UNIX 文件压缩程序compress 生成的编码格式
    • deflate —— 组合使用zlib以及deflate压缩算法生成的编码格式
    • identitiy —— 不执行压缩或不会变化的默认编码格式
  • Accept-language —— 用来告知服务器用户代理能够处理的自然语言集, 以及自然语言集的相对优先级

  • Authorization —— 告知服务器,用户代理的认证信息。

  • Expect —— 期望出现的某种特定行为。因服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码417

  • From —— 使用用户代理的用户的电子邮件地址

— Host —— 请求的资源所处的互联网主机名和端口号。 Host 首部字段在HTTP/1.1规范内是唯一一个必须被包含在请求内的内部字段

  • If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since —— If-xxx 这种样式的请求首部字段,称为条件请求。

    • If-Match —— 告知服务器匹配资源所用的实例标记(ETag)值。
    • If-Modified-Since —— 告知服务器若If-Modified-Since字段值早于资源的更新时间,则希望能处理请求,而在指定If-Modified-Since字段值的日期时间之后,如果请求的资源都没有更新,则返回状态码304。 If-Modified-Since 用于确认代理或客户端拥有的本地资源的有效性
    • If-None-Match —— 用于执行 If-None-Match 字段值的实体标记(ETag)值与请求资源的ETag不一致时,它就告知服务器处理该请求
    • If-Range —— 告知服务器若指定的If-Range字段值(ETag值或时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之,则返回全体资源
    • If-Unmodified-Since —— 指定的请求资源只有在字段值内指定的日期时间之后, 未发生更新的情况下,才能处理请求。
  • Range —— 对于只需要获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。

  • Referer —— 请求原始资源的URL

  • User-Agent —— 会将创建请求的浏览器和用户代理名称等信息传达给服务器。

HTTP缺点

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

通信使用明文可能会被窃听

由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密。即,HTTP报文使用明文(指未经过加密的报文)方式发送。

TCP/IP是可能被窃听的网络