阅读 79

HTTP协议详解

1、概要

  • HTTP协议的主要特点
  • HTTP报文的组成部分
  • HTTP方法
  • POST和GET的区别
  • HTTP状态码
  • 持久连接
  • 管线化

2、HTTP协议的主要特点

概念: http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。

  • 支持客户/服务器模式。
  • 简单快速
  1. 客户向服务器请求服务时,只需传送请求方法和路径。
  2. 请求方法有GET、POST、PUT、DELETE、HEAD。每种方法规定了客户与服务器联系的类型不同。
  3. HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活
  1. HTTP允许传输任意类型的数据对象。
  2. 正在传输的类型由Content-Type加以标记。
  • 无连接
  1. 无连接的含义是限制每次连接只处理一个请求。
  2. 服务器处理完客户的请求,并收到客户的应答后,即断开连接。
  3. 采用这种方式可以节省传输时间。
  • 无状态
  1. HTTP协议是无状态协议。
  2. 无状态是指协议对于事务处理没有记忆能力。
  3. 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
  4. 另一方面,在服务器不需要先前信息时它的应答就较快。

3、HTTP报文的组成部分

  • 请求报文
  1. 请求行 // http方法,路径,http版本
  2. 请求头 // key: value
  3. 空行 // 隔离请求头和请求体
  4. 请求体 // 请求数据部分
  • 响应报文
  1. 状态行 // http版本 http状态码
  2. 响应头 // key: value
  3. 空行 // 隔离响应头和响应体
  4. 响应体 // 响应数据

4、HTTP方法

  1. GET ------ 获取资源
  2. POST ------ 传输资源
  3. PUT ------ 更新资源
  4. DELETE ------ 删除资源
  5. HEAD ------ 获取报文首部
  6. TRACE ------ 请求服务器回送收到的请求信息,主要用于测试或诊断
  7. CONNECT------ 保留将来使用
  8. OPTIONS------ 请求查询服务器的性能,或者查询与资源相关的选项和需求

5、POST和GET的区别

  1. get在浏览器回退是无害的,post会再次提交请求。
  2. get请求的url地址可以被收藏,post不能。
  3. get会被浏览器主动缓存,post不会,除非手动设置。
  4. get请求只能进行url编码,post支持多种编码格式。
  5. get请求参数会被收藏在浏览器历史记录中,post参数不会被保留。
  6. get在URL中传送的参数是有长度限制的(2kb,不同浏览器限制可能不一样),post没有限制。
  7. 参数的数据类型,get只接受ASCII字符,post没有限制。
  8. get比post更不安全,参数直接暴露在URL地址中,所有不能用来传递敏感信息。
  9. get参数通过URL传递,post放在Request body中

6、HTTP状态码

  • 分类
  1. 1xx: 指示信息 =》 表示请求已接收,继续处理
  2. 2xx: 成功 =》 表示请求已成功接收
  3. 3xx: 重定向 =》 要完成请求必须更进一步操作
  4. 4xx: 客户端错误 =》 请求语法错误或者请求无法实现,比如路径错误,资源不存在等
  5. 5xx: 服务器错误 =》 服务器未能实现合法的请求
  • 常见的HTTP状态码
  1. 200 ok: 客户端请求成功。
  2. 206 Partail Content: 客户发生了一个带有Range头的get请求,服务器完成了它(通常在请求大的视频或音频时可能出现)。
  3. 301 Moved Permanently: 请求的页面已经转移至新的url地址。
  4. 302 Found: 请求的页面已经临时转移至新的url地址。
  5. 304 Not Modified: 客户端有缓存的文档并发送了一个有条件的请求,服务器告诉客户端原来的缓存文档该可以继续使用。
  6. 400 Bad Request: 客户端语法错误。
  7. 401 Unauthorized: 请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用。
  8. 403 Forbidden: 页面禁止被访问
  9. 404 Not Found: 请求资源不存在。
  10. 500 Internal Sever Error: 服务器发生不可预期的错误,原来缓存的文档还可以继续被使用。
  11. 503 Server Unavaliable: 请求未完成,服务器临时过载或当机,一段时间后可能恢复正常。

7、持久连接

  1. 使用'Keep-Alive'模式,http1.1版本才支持,1.0版本不支持。Keep-Alive模式是客户端到服务端的连接持续后效,后续继续请求时不用再建立或重新建立连接。

8、管线化

  • 区别
  1. 持久连接下 请求1 => 响应1 => 请求2 => 响应2 => 请求3 => 响应3
  2. 管线化(在持久连接前提下) 请求1 => 请求2 => 请求3 => 响应1 => 响应2 => 响应3
  • 特点
  1. 通过持久连接机制完成。
  2. 只有HTTP/1.1支持。
  3. 只有GET和HEAD请求可以进行管线化,post有限制。
  4. 初次连接不要启动管线机制,服务器可能不支持HTTP/1.1。
  5. 管线化不会影响响应到来的顺序。
  6. 有HTTP/1.1要求服务器支持管线化,但并不求服务器要对响应进行管线化处理,只要请求不失败即可。
  7. 由于很多服务器对管线化支持不友好,现在浏览器Chrome、Firefox等默认未开启管线化。

9、总结

  • 本文主要讲述了HTTP的一些概念,只要了解即可。
关注下面的标签,发现更多相似文章
评论