作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏:【Java Web】
分享:天命孤星独望苍穹,无所待而游无穷,可谓真仙人。——侯卿
主要内容:HTTP协议,request和response,get请求和post请求
文章目录
一、HTTP协议
1. 什么是HTTP协议
?
-
用来在浏览器(
Browser
) 服务器(Server
)之间传输数据的协议。 -
HTTP协议包括:
请求协议(request
):浏览器 向 WEB服务器发送数据。
响应协议(response
):WEB服务器 向 浏览器发送数据。 -
这套协议中制定了发送数据的规范,在B/S系统中,B和S之间传输数据时,都需要遵循这套规范。浏览器不依赖于服务器,服务器也不依赖浏览器。也就是说,不管什么浏览器或者什么服务器,在传输数据时,都是遵循这一套规范,与浏览器种类和服务器厂商无关。
注意:以下例子都是以getServlet和postServlet两个类来演示:
2. HTTP请求协议:
- 包括4部分,分为两种用法:
请求行:
请求头
空白行
请求体
@ GET请求
- GET /http/get?username=123&password=1223 HTTP/1.1 ---------请求行
Host: localhost:8080 ---------请求头
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v=“99”, “Chromium”;v=“8”
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.12022 SLBChan/103
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/http/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
----------空白行
----------请求体 - 请求行:()
@ POST请求
- 请求行(请求方式、URI,版本协议号):POST请求方式是POST,GET请求方式是GET,其它还有delete,put,head,options,trace,共七种方式,get和post最常用。
- URI和URL的区别:URI(Identify):统一资源标识符,网络中某一资源的名称,无法通过URI定位资源;URL(Locator):统一资源定位符,网络中某一资源,可以通过URL定位资源。URL包括URI。如:URL:http://localhost:8080/oa/index.html;URI:/oa/index.html。
@GET请求和POST请求的区别:
- 请求行不同:GET请求的请求行格式为:
请求方式 URI?name=value&name=value... 版本号
,POST的请求方式是:请求方式 URI 版本信息
- 请求体不同:GET方式输入的账户密码等数据直接在请求行中了,最终会直接显示在地址栏上;而POST方式是在请求体中发送,最终不会显示在地址栏上。,所以POST方式请求体格式为
neme=value&name=value...
。 - 格式相同:不管是GET还是POST请求,发送的请求数据格式是完全相同的,只不过位置不同,格式都是统一的。
- 发送内容限制不同:get只能发送普通的字符串,并且字符串的长度有限,因此get请求无法发送大量数据;post可以发送任何类型数据,包括普通字符串,流媒体等信息,视频、声音、图片,因此post请求可以发送大量数据,理论上没有限制。
- get和post适用:在w3c(世界万维网组织)中这样说,get请求适合从服务器端获取数据,post请求适合向服务器发送数据。
- get请求是安全的,因为get请求只是从服务器获取数据;post请求是危险的,因为post请求是向服务器提交或修改数据,所以一般拦截请求的时候,一般都会监听和拦截post请求。
- 对缓存的支持:get请求支持缓存,post请求不支持缓存。 比如在浏览器地址栏输入一个资源(比如照片),回车,第一次访问的时候比再次访问时慢很多,原因就是第一次时,浏览器向服务器提出get请求,然后把资源放在了缓存中,第二次访问时,就直接在缓存中找到了这个资源,直接显示出来。
- 取消get请求缓存的操作:可以在这个资源的路径(URL)后面加上时间戳,地址不同,浏览器就不走缓存了。
@ 怎么选择GET和POST
- 怎么查看协议内容:使用浏览器->按F12->network
- 怎么发送POST请求:如form表单,form表单中method属性值:method=“post”。
- 怎么发送get请求:1> 在地址栏输入URL,回车;2>在浏览器上直接点超链接;3>使用form表单,form表单中没有写method属性值(或者属性值为"get"),默认为get。
- GET:从服务器获取资源,POST:发送数据到服务器。
- 大部分的form表单提交都是用POST,因为是收集用户信息;敏感信息(账号密码)的提交用POST,因为不会显示在地址栏上;文件上传用POST,因为不是普通文本。 其它情况适用GET。
3. HTTP的响应协议:
-
也包括四部分:
状态行
响应头
空白行
响应体 -
HTTP/1.1 200 ok ----------状态行
Content-Type: text/html;charset=utf-8 ----------响应头
Content-Length: 21
Date: Mon, 27 Feb 2023 03:05:38 GMT
Keep-Alive: timeout=20
Connection: keep-alive
-----------空白行
测试响应!!! -----------响应体 -
状态行:(协议版本号、HTTP状态码、状态描述信息):HTTP/1.1是协议版本号;200是HTTP状态码;ok是描述状态信息,还有如not found。
-
响应协议中状态行的状态码的理解是重中之重,
200
表示请求响应成功正常结束;404
表示访问资源不存在,遇到404要么是路径访问错了,要么是路径对了,但服务器的对应资源没有启动成功;405
表示前端发送的请求与后端处理的方式不一致,比如前端用 POST(GET) 发送请求,后端用 GET(POST) 方式处理;500
表示服务器端的程序出现异常。==一般来说,状态行中4开头
的状态码是前端错误,5开头
是后端错误。