一、HTTP的请求协议(B --> S)
-
HTTP的请求协议包括:
-
请求行
-
请求头
-
空白行
-
请求体
-
-
HTTP请求协议的具体报文:GET请求
GET /servlet05/getServlet?username=lucy&userpwd=1111 HTTP/1.1 请求行(请求方式、URI、HTTP协议版本号) Host: localhost:8080 请求头(请求的主机、主机的端口、浏览器、平台、cookie等信息) Connection: keep-alive sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 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 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 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost:8080/servlet05/index.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 空白行(区分“请求头”和“请求体”) 请求体(向服务器发送的具体数据)
-
HTTP请求协议的具体报文:POST请求
POST /servlet05/postServlet HTTP/1.1 请求行(请求方式、URI、HTTP协议版本号) Host: localhost:8080 请求头(请求的主机、主机的端口、浏览器、平台、cookie等信息) Connection: keep-alive Content-Length: 25 Cache-Control: max-age=0 sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 Origin: http://localhost:8080 Content-Type: application/x-www-form-urlencoded 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 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 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost:8080/servlet05/index.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 空白行(区分“请求头”和“请求体”) username=lisi&userpwd=123 请求体(向服务器发送的具体数据)
二、HTTP的响应协议(S --> B)
- HTTP的响应协议包括:
-
响应体
-
空白行
-
响应头
-
状态行
-
HTTP响应协议的具体报文:
HTTP/1.1 200 ok 状态行(协议版本号、状态码、状态的描述信息) Content-Type: text/html;charset=UTF-8 响应头(响应的内容类型、内容长度、时间等) Content-Length: 160 Date: Mon, 08 Nov 2021 13:19:32 GMT Keep-Alive: timeout=20 Connection: keep-alive 空白行(分隔“响应头”和“响应体”) <!doctype html> 响应体(响应的正文,字符串形式,这个字符串被浏览器渲染解释并执行,最终展示出效果) <html> <head> <title>from get servlet</title> </head> <body> <h1>from get servlet</h1> </body> </html>
-
三、GET请求和POST请求:
- POST请求:使用form表单且form标签中的method属性值为:method="post"
- GET请求:
- 在浏览器地址栏上直接输入URL,敲回车
- 在浏览器上直接点击超链接
- 使用form表单提交数据时,form标签中没有写method属性,默认就是GET
- 使用form表单的时候,form标签中method属性值为:method="get"
- GET请求和POST请求区别:
- GET请求发送数据的时候,数据会挂在URI的后面,数据回显在浏览器的地址栏上。(GET请求在“请求行”上发送数据),例:http://localhost:8080/servlet05/getServlet?username=zhangsan&userpwd=1111;POST请求发送数据的时候,在请求体当中发送,不会回显到浏览器的地址栏上。
- GET请求只能发送普通的字符串,且发送的字符串长度有限制,不同的浏览器限制不同,无法发送大数据量;POST请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片,可以发送大数据量,理论上没有长度限制。
- GET请求比较适合从服务器端获取数据。
- POST请求比较适合向服务器端传送数据。
- GET请求支持缓存(可在访问路径加“时间戳”不走缓存);POST请求不支持缓存。
- 不管是GET请求还是POST请求,发送的请求数据格式是完全相同的,只不过位置不同,都是统一的格式name=value&name=value&name=value。
- GET请求和POST请求使用选择:
- 从服务器上获取资源,建议使用GET请求;向服务器提交数据,建议使用POST请求。
- 表单中有敏感信息,建议使用POST请求(GET请求会回显敏感信息到浏览器地址栏上,例:密码信息)
- 文件上传,一定是POST请求,要传的数据不是普通文本。