• 什么是HTTP协议?
      • HTTP协议:是W3C制定的一种超文本传输协议。(通信协议:发送消息的模板提前被制定好。)
      • W3C:
        • 万维网联盟组织
        • 负责制定标准的:HTTP HTML4.0 HTML5 XML DOM等规范都是W3C制定的。
        • 万维网之父:蒂姆·伯纳斯·李
      • 什么是超文本?
        • 超文本说的就是:不是普通文本,比如流媒体:声音、视频、图片等。
        • HTTP协议支持:不但可以传送普通字符串,同样支持传递声音、视频、图片等流媒体信息。
      • 这种协议游走在B和S之间。B向S发数据要遵循HTTP协议。S向B发数据同样需要遵循HTTP协议。这样B和S才能解耦合。
      • 什么是解耦合?
        • B不依赖S。
        • S也不依赖B。
      • B/S表示:B/S结构的系统(浏览器访问WEB服务器的系统)
      • 浏览器 向 WEB服务器发送数据,叫做:请求(request)
      • WEB服务器 向 浏览器发送数据,叫做:响应(response)
      • HTTP协议包括:
        • 请求协议
          • 浏览器 向 WEB服务器发送数据的时候,这个发送的数据需要遵循一套标准,这套标准中规定了发送的数据具体格式。
        • 响应协议
          • WEB服务器 向 浏览器发送数据的时候,这个发送的数据需要遵循一套标准,这套标准中规定了发送的数据具体格式。
      • HTTP协议就是提前制定好的一种消息模板。
        • 不管你是哪个品牌的浏览器,都是这么发。
        • 不管你是哪个品牌的WEB服务器,都是这么发。
        • FF浏览器 可以向 Tomcat发送请求,也可以向Jetty服务器发送请求。浏览器不依赖具体的服务器品牌。
        • WEB服务器也不依赖具体的浏览器品牌。可以是FF浏览器,也可以是Chrome浏览器,可以是IE,都行。
    • HTTP的请求协议(B —> S)

      • HTTP的请求协议包括:4部分
        • 请求行
        • 请求头
        • 空白行
        • 请求体
      • HTTP请求协议的具体报文:GET请求

          1. GET /servlet05/getServlet?username=lucy&userpwd=1111 HTTP/1.1 请求行
          2. Host: localhost:8080 请求头
          3. Connection: keep-alive
          4. sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
          5. sec-ch-ua-mobile: ?0
          6. sec-ch-ua-platform: "Windows"
          7. Upgrade-Insecure-Requests: 1
          8. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
          9. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
          10. Sec-Fetch-Site: same-origin
          11. Sec-Fetch-Mode: navigate
          12. Sec-Fetch-User: ?1
          13. Sec-Fetch-Dest: document
          14. Referer: http://localhost:8080/servlet05/index.html
          15. Accept-Encoding: gzip, deflate, br
          16. Accept-Language: zh-CN,zh;q=0.9
          17. 空白行
          18. 请求体
      • HTTP请求协议的具体报文:POST请求

          1. POST /servlet05/postServlet HTTP/1.1 请求行
          2. Host: localhost:8080 请求头
          3. Connection: keep-alive
          4. Content-Length: 25
          5. Cache-Control: max-age=0
          6. sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
          7. sec-ch-ua-mobile: ?0
          8. sec-ch-ua-platform: "Windows"
          9. Upgrade-Insecure-Requests: 1
          10. Origin: http://localhost:8080
          11. Content-Type: application/x-www-form-urlencoded
          12. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
          13. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
          14. Sec-Fetch-Site: same-origin
          15. Sec-Fetch-Mode: navigate
          16. Sec-Fetch-User: ?1
          17. Sec-Fetch-Dest: document
          18. Referer: http://localhost:8080/servlet05/index.html
          19. Accept-Encoding: gzip, deflate, br
          20. Accept-Language: zh-CN,zh;q=0.9
          21. 空白行
          22. username=lisi&userpwd=123 请求体
      • 请求行

        • 包括三部分:
          • 第一部分:请求方式(7种)
            • get(常用的)
            • post(常用的)
            • delete
            • put
            • head
            • options
            • trace
          • 第二部分:URI
            • 什么是URI? 统一资源标识符。代表网络中某个资源的名字。但是通过URI是无法定位资源的。
            • 什么是URL?统一资源定位符。代表网络中某个资源,同时,通过URL是可以定位到该资源的。
            • URI和URL什么关系,有什么区别?
          • 第三部分:HTTP协议版本号
      • 请求头
        • 请求的主机
        • 主机的端口
        • 浏览器信息
        • 平台信息
        • cookie等信息
        • ….
      • 空白行
        • 空白行是用来区分“请求头”和“请求体”
      • 请求体
        • 向服务器发送的具体数据。
    • HTTP的响应协议(S —> B)

      • HTTP的响应协议包括:4部分
        • 状态行
        • 响应头
        • 空白行
        • 响应体
      • HTTP响应协议的具体报文:

          1. HTTP/1.1 200 ok 状态行
          2. Content-Type: text/html;charset=UTF-8 响应头
          3. Content-Length: 160
          4. Date: Mon, 08 Nov 2021 13:19:32 GMT
          5. Keep-Alive: timeout=20
          6. Connection: keep-alive
          7. 空白行
          8. <!doctype html> 响应体
          9. <html>
          10. <head>
          11. <title>from get servlet</title>
          12. </head>
          13. <body>
          14. <h1>from get servlet</h1>
          15. </body>
          16. </html>
      • 状态行

        • 三部分组成
          • 第一部分:协议版本号(HTTP/1.1)
          • 第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码。)
            • 200 表示请求响应成功,正常结束。
            • 404表示访问的资源不存在,通常是因为要么是你路径写错了,要么是路径写对了,但是服务器中对应的资源并没有启动成功。总之404错误是前端错误。
            • 405表示前端发送的请求方式与后端请求的处理方式不一致时发生:
              • 比如:前端是POST请求,后端的处理方式按照get方式进行处理时,发生405
              • 比如:前端是GET请求,后端的处理方式按照post方式进行处理时,发生405
            • 500表示服务器端的程序出现了异常。一般会认为是服务器端的错误导致的。
            • 以4开始的,一般是浏览器端的错误导致的。
            • 以5开始的,一般是服务器端的错误导致的。
          • 第三部分:状态的描述信息
            • ok 表示正常成功结束。
            • not found 表示资源找不到。
      • 响应头:
        • 响应的内容类型
        • 响应的内容长度
        • 响应的时间
        • ….
      • 空白行:
        • 用来分隔“响应头”和“响应体”的。
      • 响应体:
        • 响应体就是响应的正文,这些内容是一个长的字符串,这个字符串被浏览器渲染,解释并执行,最终展示出效果。
    • 怎么查看的协议内容?
      • 使用chrome浏览器:F12。然后找到network,通过这个面板可以查看协议的具体内容。
    • 怎么向服务器发送GET请求,怎么向服务器发送POST请求?
      • 到目前为止,只有一种情况可以发送POST请求:使用form表单,并且form标签中的method属性值为:method=”post”。
      • 其他所有情况一律都是get请求:
        • 在浏览器地址栏上直接输入URL,敲回车,属于get请求。
        • 在浏览器上直接点击超链接,属于get请求。
        • 使用form表单提交数据时,form标签中没有写method属性,默认就是get
        • 或者使用form的时候,form标签中method属性值为:method=”get”