【Java web】-HTTP协议

作者:学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请求的区别:
  1. 请求行不同:GET请求的请求行格式为:请求方式 URI?name=value&name=value... 版本号 ,POST的请求方式是: 请求方式 URI 版本信息
  2. 请求体不同:GET方式输入的账户密码等数据直接在请求行中了,最终会直接显示在地址栏上;而POST方式是在请求体中发送,最终不会显示在地址栏上。,所以POST方式请求体格式为 neme=value&name=value...
  3. 格式相同:不管是GET还是POST请求,发送的请求数据格式是完全相同的,只不过位置不同,格式都是统一的。
  4. 发送内容限制不同:get只能发送普通的字符串,并且字符串的长度有限,因此get请求无法发送大量数据;post可以发送任何类型数据,包括普通字符串,流媒体等信息,视频、声音、图片,因此post请求可以发送大量数据,理论上没有限制。
  5. get和post适用:在w3c(世界万维网组织)中这样说,get请求适合从服务器端获取数据post请求适合向服务器发送数据
  6. get请求是安全的,因为get请求只是从服务器获取数据;post请求是危险的,因为post请求是向服务器提交或修改数据,所以一般拦截请求的时候,一般都会监听和拦截post请求。
  7. 对缓存的支持:get请求支持缓存,post请求不支持缓存。 比如在浏览器地址栏输入一个资源(比如照片),回车,第一次访问的时候比再次访问时慢很多,原因就是第一次时,浏览器向服务器提出get请求,然后把资源放在了缓存中,第二次访问时,就直接在缓存中找到了这个资源,直接显示出来。
  8. 取消get请求缓存的操作:可以在这个资源的路径(URL)后面加上时间戳,地址不同,浏览器就不走缓存了。
@ 怎么选择GET和POST
  1. 怎么查看协议内容:使用浏览器->按F12->network
  2. 怎么发送POST请求:如form表单,form表单中method属性值:method=“post”。
  3. 怎么发送get请求:1> 在地址栏输入URL,回车;2>在浏览器上直接点超链接;3>使用form表单,form表单中没有写method属性值(或者属性值为"get"),默认为get。
  4. GET:从服务器获取资源,POST:发送数据到服务器。
  5. 大部分的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开头是后端错误。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学Java的冬瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值