- 什么是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请求
GET /servlet05/getServlet?username=lucy&userpwd=1111 HTTP/1.1 请求行Host: localhost:8080 请求头Connection: keep-alivesec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"sec-ch-ua-mobile: ?0sec-ch-ua-platform: "Windows"Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36Accept: 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.9Sec-Fetch-Site: same-originSec-Fetch-Mode: navigateSec-Fetch-User: ?1Sec-Fetch-Dest: documentReferer: http://localhost:8080/servlet05/index.htmlAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9空白行请求体
HTTP请求协议的具体报文:POST请求
POST /servlet05/postServlet HTTP/1.1 请求行Host: localhost:8080 请求头Connection: keep-aliveContent-Length: 25Cache-Control: max-age=0sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"sec-ch-ua-mobile: ?0sec-ch-ua-platform: "Windows"Upgrade-Insecure-Requests: 1Origin: http://localhost:8080Content-Type: application/x-www-form-urlencodedUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36Accept: 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.9Sec-Fetch-Site: same-originSec-Fetch-Mode: navigateSec-Fetch-User: ?1Sec-Fetch-Dest: documentReferer: http://localhost:8080/servlet05/index.htmlAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9空白行username=lisi&userpwd=123 请求体
请求行
- 包括三部分: 
- 第一部分:请求方式(7种) 
- get(常用的)
 - post(常用的)
 - delete
 - put
 - head
 - options
 - trace
 
 - 第二部分:URI 
- 什么是URI? 统一资源标识符。代表网络中某个资源的名字。但是通过URI是无法定位资源的。
 - 什么是URL?统一资源定位符。代表网络中某个资源,同时,通过URL是可以定位到该资源的。
 - URI和URL什么关系,有什么区别? 
- URL包括URI
 - http://localhost:8080/servlet05/index.html 这是URL。
 - /servlet05/index.html 这是URI。
 
 
 - 第三部分:HTTP协议版本号
 
 - 第一部分:请求方式(7种) 
 
- 包括三部分: 
 - 请求头 
- 请求的主机
 - 主机的端口
 - 浏览器信息
 - 平台信息
 - cookie等信息
 - ….
 
 - 空白行 
- 空白行是用来区分“请求头”和“请求体”
 
 - 请求体 
- 向服务器发送的具体数据。
 
 
- HTTP的请求协议包括:4部分 
 HTTP的响应协议(S —> B)
- HTTP的响应协议包括:4部分 
- 状态行
 - 响应头
 - 空白行
 - 响应体
 
 HTTP响应协议的具体报文:
HTTP/1.1 200 ok 状态行Content-Type: text/html;charset=UTF-8 响应头Content-Length: 160Date: Mon, 08 Nov 2021 13:19:32 GMTKeep-Alive: timeout=20Connection: keep-alive空白行<!doctype html> 响应体<html><head><title>from get servlet</title></head><body><h1>from get servlet</h1></body></html>
状态行
- 三部分组成 
- 第一部分:协议版本号(HTTP/1.1)
 - 第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码。) 
- 200 表示请求响应成功,正常结束。
 - 404表示访问的资源不存在,通常是因为要么是你路径写错了,要么是路径写对了,但是服务器中对应的资源并没有启动成功。总之404错误是前端错误。
 - 405表示前端发送的请求方式与后端请求的处理方式不一致时发生: 
- 比如:前端是POST请求,后端的处理方式按照get方式进行处理时,发生405
 - 比如:前端是GET请求,后端的处理方式按照post方式进行处理时,发生405
 
 - 500表示服务器端的程序出现了异常。一般会认为是服务器端的错误导致的。
 - 以4开始的,一般是浏览器端的错误导致的。
 - 以5开始的,一般是服务器端的错误导致的。
 
 - 第三部分:状态的描述信息 
- ok 表示正常成功结束。
 - not found 表示资源找不到。
 
 
 
- 三部分组成 
 - 响应头: 
- 响应的内容类型
 - 响应的内容长度
 - 响应的时间
 - ….
 
 - 空白行: 
- 用来分隔“响应头”和“响应体”的。
 
 - 响应体: 
- 响应体就是响应的正文,这些内容是一个长的字符串,这个字符串被浏览器渲染,解释并执行,最终展示出效果。
 
 
- HTTP的响应协议包括:4部分 
 - 怎么查看的协议内容? 
- 使用chrome浏览器:F12。然后找到network,通过这个面板可以查看协议的具体内容。
 
 - 怎么向服务器发送GET请求,怎么向服务器发送POST请求? 
- 到目前为止,只有一种情况可以发送POST请求:使用form表单,并且form标签中的method属性值为:method=”post”。
 - 其他所有情况一律都是get请求: 
- 在浏览器地址栏上直接输入URL,敲回车,属于get请求。
 - 在浏览器上直接点击超链接,属于get请求。
 - 使用form表单提交数据时,form标签中没有写method属性,默认就是get
 - 或者使用form的时候,form标签中method属性值为:method=”get”
 
 
 
