1、概要
- HTTP协议的主要特点
- HTTP报文的组成部分
- HTTP方法
- POST和GET的区别
- HTTP状态码
- 持久连接
- 管线化
2、HTTP协议的主要特点
概念: http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。
- 支持客户/服务器模式。
- 简单快速
- 客户向服务器请求服务时,只需传送请求方法和路径。
- 请求方法有GET、POST、PUT、DELETE、HEAD。每种方法规定了客户与服务器联系的类型不同。
- HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活
- HTTP允许传输任意类型的数据对象。
- 正在传输的类型由Content-Type加以标记。
- 无连接
- 无连接的含义是限制每次连接只处理一个请求。
- 服务器处理完客户的请求,并收到客户的应答后,即断开连接。
- 采用这种方式可以节省传输时间。
- 无状态
- HTTP协议是无状态协议。
- 无状态是指协议对于事务处理没有记忆能力。
- 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
- 另一方面,在服务器不需要先前信息时它的应答就较快。
3、HTTP报文的组成部分
- 请求报文
- 请求行 // http方法,路径,http版本
- 请求头 // key: value
- 空行 // 隔离请求头和请求体
- 请求体 // 请求数据部分
- 响应报文
- 状态行 // http版本 http状态码
- 响应头 // key: value
- 空行 // 隔离响应头和响应体
- 响应体 // 响应数据
4、HTTP方法
- GET ------ 获取资源
- POST ------ 传输资源
- PUT ------ 更新资源
- DELETE ------ 删除资源
- HEAD ------ 获取报文首部
- TRACE ------ 请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNECT------ 保留将来使用
- OPTIONS------ 请求查询服务器的性能,或者查询与资源相关的选项和需求
5、POST和GET的区别
- get在浏览器回退是无害的,post会再次提交请求。
- get请求的url地址可以被收藏,post不能。
- get会被浏览器主动缓存,post不会,除非手动设置。
- get请求只能进行url编码,post支持多种编码格式。
- get请求参数会被收藏在浏览器历史记录中,post参数不会被保留。
- get在URL中传送的参数是有长度限制的(2kb,不同浏览器限制可能不一样),post没有限制。
- 参数的数据类型,get只接受ASCII字符,post没有限制。
- get比post更不安全,参数直接暴露在URL地址中,所有不能用来传递敏感信息。
- get参数通过URL传递,post放在Request body中
6、HTTP状态码
- 分类
- 1xx: 指示信息 =》 表示请求已接收,继续处理
- 2xx: 成功 =》 表示请求已成功接收
- 3xx: 重定向 =》 要完成请求必须更进一步操作
- 4xx: 客户端错误 =》 请求语法错误或者请求无法实现,比如路径错误,资源不存在等
- 5xx: 服务器错误 =》 服务器未能实现合法的请求
- 常见的HTTP状态码
- 200 ok: 客户端请求成功。
- 206 Partail Content: 客户发生了一个带有Range头的get请求,服务器完成了它(通常在请求大的视频或音频时可能出现)。
- 301 Moved Permanently: 请求的页面已经转移至新的url地址。
- 302 Found: 请求的页面已经临时转移至新的url地址。
- 304 Not Modified: 客户端有缓存的文档并发送了一个有条件的请求,服务器告诉客户端原来的缓存文档该可以继续使用。
- 400 Bad Request: 客户端语法错误。
- 401 Unauthorized: 请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden: 页面禁止被访问
- 404 Not Found: 请求资源不存在。
- 500 Internal Sever Error: 服务器发生不可预期的错误,原来缓存的文档还可以继续被使用。
- 503 Server Unavaliable: 请求未完成,服务器临时过载或当机,一段时间后可能恢复正常。
7、持久连接
- 使用'Keep-Alive'模式,http1.1版本才支持,1.0版本不支持。Keep-Alive模式是客户端到服务端的连接持续后效,后续继续请求时不用再建立或重新建立连接。
8、管线化
- 区别
- 持久连接下 请求1 => 响应1 => 请求2 => 响应2 => 请求3 => 响应3
- 管线化(在持久连接前提下) 请求1 => 请求2 => 请求3 => 响应1 => 响应2 => 响应3
- 特点
- 通过持久连接机制完成。
- 只有HTTP/1.1支持。
- 只有GET和HEAD请求可以进行管线化,post有限制。
- 初次连接不要启动管线机制,服务器可能不支持HTTP/1.1。
- 管线化不会影响响应到来的顺序。
- 有HTTP/1.1要求服务器支持管线化,但并不求服务器要对响应进行管线化处理,只要请求不失败即可。
- 由于很多服务器对管线化支持不友好,现在浏览器Chrome、Firefox等默认未开启管线化。
9、总结
- 本文主要讲述了HTTP的一些概念,只要了解即可。