HTTP/HTTPs要点

时间:2023-03-09 03:09:42
HTTP/HTTPs要点
  • Http(超文本传输协议)是一个属于应用层的面向对象的协议。

  • HTTP结构

    • HTTP请求:
      • 请求行:Method-Request URI HTTP-Version(CRLF),eg:GET /form.html HTTP/1.1(CRLF);
      • 请求报头
      • 请求正文
    • HTTP响应
      • 状态行:HTTP-Version Status-Code Reason-Phrase(CRLF),eg: HTTP/1.1 200 OK(CRLF);
      • 响应报头
      • 响应正文
    • 其中,报头(可选)由若干个报头域组成,每个报头域格式:“Name: Value(CRLF)”。
  • 主要特点:

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

  • 缺点

    (1)通信使用明文(不加密),内容可能会被窃听

    (2)不验证通信方的身份,因此有可能遭遇伪装

    (3)无法证明报文的完整性,所以有可能已遭篡改

  • Https=Http+加密+认证+完整性保护

  • 请求方法

  GET 请求获取Request-URI 所标识的资源
  POST 在Request-URI 所标识的资源后附加新的数据
  HEAD 请求获取由Request-URI 所标识的资源的响应消息报头
  PUT 请求服务器存储一个资源,并用Request-URI 作为其标识
  DELETE 请求服务器删除Request-URI 所标识的资源
  TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
  OPTIONS 请求查询服务器的性能
  CONNECT 保留将来使用

  • 状态代码

  1xx:指示信息--表示请求已接收,继续处理

  2xx:成功--表示请求已被成功接收、理解、接受

  3xx:重定向--要完成请求必须进行更进一步的操作
  4xx:客户端错误
  5xx:服务器端错误

  常见代码:

    200 OK //客户端请求成功
    400 Bad Request //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权
    403 Forbidden //服务器收到请求,但是拒绝提供服务
    404 Not Found //请求资源不存在, eg:输入了错误的URL
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

  • HTTP的长连接与短连接

    • 本质上是TCP的长连接与短连接
    • HTTP/1.0默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

    • HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入报头域:Connection:keep-alive。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
    • 短连接
      • 优点:管理简单,存在的连接都是有用的连接,不需要额外的控制手段;
      • 缺点:如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
    • 长连接
      • 优点:省去较多的TCP建立和关闭的操作,减少浪费,节约时间。
      • 缺点:Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候
      • 可采取的策略:(1)关闭长时间没有读写事件的连接;(2)限制每个客户端的最大长连接数。
  • CGI(Common Gateway Interface)通用网关接口

    • 作用:服务动态内容。执行动态内容,将其返回值送回客户端。
    • 判断是否动态内容:服务器常常将所有动态内容放在一个固定的文件夹下,通过判断URI的路径来识别是否需要服务动态内容。
    • CGI的输入输出
      • 服务器子线程通过环境变量将请求参数传送给CGI程序
      • 通过将stdin和stdout重定向至已连接描述符实现CGI对客户端的直接通信。
  • HTTP1.1与HTTP1.0区别

    • 默认长连接;
    • 新增24个状态响应码,HTTP1.0只有16个;
    • 可拓展性:如果HTTP的某个实现接收到了自身未定义的头域,将自动忽略它;
    • 带宽优化。