http的发展历史

http的发展历史

  1. http/0.9
  • 只有一个get方法,服务器发送完数据就关闭TCP连接;
  • HTTP/0.9 的响应内容并不包含HTTP头,这意味着只有HTML件可以传送,无法传输其他类型的文件;
  • 没有状态码或错误代码
  • 请求方法:GET
  1. http/1.0
  • 状态码在响应开始时发送,使浏览器能够快速了解请求的状态并能做出一些调整
  • 引入了HTTP请求头的概念。
  • 在新HTTP头(Content-Type头)的帮助下,具备了传输非HTML文档的能力
  • 增加了协议版本信息
  • 1.0支持GET、POST、HEAD
1
2
3
// e.g.
GET /myPage.html HTTP/1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
1
2
3
4
5
6
7
8
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
// 一个包含图片的页面
<HTML>
<IMG SRC="/myimage.gif">
</HTML>
  1. http/1.1
  • 第一个http标准化版本,可以使用Host请求头,使同一个IP可以配置多个域名
  • 持久链接(keep-alive)
  • 增加了pipeline,HTTP的请求队列是一个先进先出的队列。客户端的请求是一个接一个的,上一个请求没收到回应时就继续等待,收到回应后再发送下一个请求。这样服务器有大部分时间处于空闲状态。1.1版本的http协议将这个队列放在了服务器,客户端可以不断地发送请求,服务器将这些请求整理在一个队列中,一个一个进行处理。
  • 可以同时打开多个TCP连接。
  1. http/2.0
  • 二进制分帧层
  • 多路复用
  • 首部压缩
  • 服务器推送
  • GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT

请求方法

  • GET: 请求显示指定路径的资源,一般只用来数据的读取;

  • POST: 向指定资源提交数据,并请求服务器进行处理,例如表单的提交等;

  • HEAD: 与GET方法一样,但是只返回响应头信息,常用来测试服务器的性能;

  • PUT: 向服务器指定路径上传最新资源,是幂等的方法。通过该方法,客户端可以上传最新内容;

  • DELETE: 向服务器请求删除指定URI的资源,是幂等的;

  • CONNECT: 该方法是HTTP/1.1预留方法,能够连接改为管道方式的代理服务器,常用于SSL加密的加密服务器或者非加密HTTP代理服务器

  • OPTIONS: 该方法向服务器请求返回所有支持的HTTP请求方法,也用来测试服务器性能

  • TRACE: 该方法请求服务器返回请求的内容,用于HTTP的诊断或测试

  • PATCH: PATCH方法与PUT方法一样,用来更新服务器的资源。区别是:
    1、PATCH方法只是部分更新,PUT方法是全部更新。
    2、PATCH方法指定的服务器路径不存在时会创建一个,PUT不会

  • 幂等:对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。

http状态码

  1. 1xx 服务器收到请求,请求者需要继续操作

    100 继续请求
    101 服务器根据客户端的要求,切换更高级的协议

  2. 2xx 请求成功,服务器正在处理或成功处理

    200 请求成功
    201 已创建,成功请求并创建了新的资源
    202 已接受,但处理未完成
    204 无内容,服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档

  3. 3xx 重定向,需要进一步操作,以完成请求

    300 请求的资源有多个地址,需要客户端自己选择
    301 请求的资源已被永久移动到新地址,返回新地址,浏览器自动解析新的url
    302 临时重定向
    304 请求的内容未修改。客户端通常会缓存访问过的资源,通过一个头信息指出希望只返回指定日期之后修改的资源
    头信息:Last-Modified: Wed, 18 Jun 2018 14:22:27 GMT
    Cache-Control: max-age=600
    Expires: Wed, 18 Jun 2018 14:48:39 GMT
    Date: Wed, 18 Jun 2018 14:48:39 GMT
    浏览器第一次请求某一个url时,服务端返回的状态是200,同时有个Last-Modified标记文件在服务端最后的修改时间,第二次请求时,浏览器会向服务器传送If-Modified-Since报头,询问是否更改过,如果没有更改就返回304

  4. 4xx 客户端错误,请求包含语法错误或无法完成请求

400 客户端请求的语法错误,服务器无法解析
401 请求用户身份验证
403 服务器拒绝客户端的请求
404 请求资源路径错误,服务器无法找到该资源
405 客户端请求的方法被禁止
407 请求代理身份验证
408 服务器等待客户端时间过长,请求超时
410 服务器以前有这个资源,但是现在没有了
416 客户端请求的范围无效

  1. 5xx 服务器错误,服务器在处理请求的过程中发生了错误

500 服务器内部错误,无法完成请求
501 服务器不支持请求的功能
502 无效响应
503 Service Unavailable 由于服务器超载或者系统维护,服务器暂时无法响应请求
505 服务器不支持请求的协议版本,无法完成请求