网络:HTTP基础

在TCP/IP协议族中跟HTTP协议有三个密不可分的协议。

IP协议(网络层)

  1. TCP/IP协议族中的IP指的的就是网际协议(不是IP地址哦)。

    IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,需要满足各类条件。其中两个重要的条件是IP地址和MAC地址(Media Access Control Address)。

    • IP地址:指明了节点被分配到的地址。
    • MAC地址:指网卡所属的固定地址。

    IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本不会更改。

  2. 使用ARP协议凭借MAC地址进行通信

    IP间的通信依赖MAC地址。网络上通信的双方很少在同一局域网内,通常要经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时就需要采用ARP协议(Address Resolution Protocol)。ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。

  3. 路由选择

    在传输过程中,要经过很多计算机和网络设备中转,所以,计算机和路由器等网络设备只能获取很粗略的传输路线。

TCP协议(传输层)

  1. 提供可靠的字节流服务。

    字节流服务:为了方便传输,将大块数据分割成以报文段(Segment)为单位的数据包进行管理,并确认数据能够准确可靠地送达到对方。

  2. 确保数据能够到达目标

    TCP协议采用三次握手策略。用TCP协议把数据包送出去后,TCP会向对方确认是否成功送达。

  3. TCP三次握手

    TCP的flag:SYN(Synchronize)和ACK(Acknowledgement)

    握手过程:

    1. 发送端发送一个带SYN标志的数据包给对方。
    2. 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
    3. 发送端在回传一个带ACK标志的数据包,表示握手结束。

DNS服务(应用层)

DNS协议提供域名到IP地址之间的解析服务。

用户通常通过使用主机名或域名来访问对方的计算机,但计算机则擅长处理数字式的IP。

HTTP通信过程

  • 请求过程
    1. 客户端发起对某个网页的请求
    2. DNS负责解析请求网页的IP地址
    3. HTTP协议负责生成针对目标web服务器的HTTP请求报文
    4. TCP协议为了方便通信,将HTTP请求报文按序号分割成报文段,把每个报文段可靠地传送给对方
    5. IP协议搜索对方的地址,一边中转一边传送到达服务端
    6. 在服务端,TCP协议将从对方那里接收到的报文段按顺序进行重组得到完整报文信息。
    7. 在服务端HTTP协议负责对Web服务器请求的内容进行处理
  • 以上是请求的通信过程,响应的过程同样是利用TCP/IP通信协议向用户进行回转。

HTTP协议

  1. 请求从客户端发出,最后服务器端响应该请求并返回

    请求报文包括请求方法、请求URI、协议版本、可选的请求首部字段和内容实体。

    1
    2
    3
    4
    5
    6
    POST /form/entey  HTTP/1.1			**依次是请求方法 URI和协议版本
    Host: hackr.jp **请求首部字段
    Connection: keep_alive **请求首部字段
    Content_Type: application/x-www_form_urlencoded **请求首部字段
    Content-Length: 16 **请求首部字段
    name=jiang&age = 16 **内容实体

    响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的首部字段以及实体主题构成。

    1
    2
    3
    4
    5
    6
    HTTP/1.1  200  OK				**协议版本、状态码、原因短语
    Date: Tue, 10 Jul 2012 08:20:23 GMT **响应首部字段
    Content-Length:362 **同上
    Content-Type:text/html **同上
    <html> **主体
    ...
  2. HTTP是一种无状态协议

    使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这时为了更快地处理大量事务,确保协议的可伸缩性。

    现在很多网站为了能够保存用户状态引入了Cookie技术,可以管理用户状态。

  3. URI准确定位请求资源

    当客户端请求访问资源而发送请求时,URI需要把作为请求报文中的请求URI包含在内。

    URI:Uniform Resource Identifier统一资源标识符,用字符串标识某一互联网资源。使用统一格式(遵守某种协议)的方便可处理的文档、图像、服务等能够区别于其他类型的资源(Resource)构成的标识符(Identifier)。

    比如:ftp://ftp.is.co.za/rfc/rfc1808.txt

    http://www.ietf.org/rtf/rtf2396.txt

    URL:Uniform Resource Locator统一资源定位符,标识资源的在互联网上所处的位置。是URI的子集。是使用浏览器访问web页面时需要输入的网页地址

    比如:https://zhengry.github.io

  4. HTTP常用的方法

    • GET:获取资源

      GET方法用来请求访问已经被URI识别的资源,指定的资源经服务器端解析后返回响应内容。

    • POST:传输实体主体

      POST的主要目的不是获取响应的主体消息,而是向服务端发送信息实体。

    • PUT:传输文件

    • HEAD:获得报文首部,跟GET相似,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间等

    • DELETE:按请求URI删除指定的资源

    • OPTIONS:查询针对请求URI指定的资源支持的方法(比如支持GET和HEAD方法)

    • CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。(也就是HTTPs)

  5. HTTP/1.1的持久连接

    HTTP/1.1以前,每进行一次HTTP通话就要断开一次TCP连接,在浏览同一个页面的不同资源时,每次的请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。

    HTTP/1.1增加了持久连接的方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

    持久连接技术出现后使管线化成为可能:可以同时并行发送多个请求,而不需要一个接一个等待响应。

  6. 使用Cookie管理状态

    Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务端发送的响应报文内一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务端发现客户端发送过来的Cookie后,会检查究竟是从哪一个客户端发送来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。