HTTP协议

1.HTTP协议简介

HTTP协议是W3C指定的一种超文本传输协议,是一种通信协议,这种协议游走B(Browser)和S(Server)之间,B想S发送数据要遵循HTTP协议,S向B发数据同样需要遵循HTTP协议,这个S和B才能解耦合,即S不依赖于B,B也不依赖于S;

超文本:不是普通的文本,还包括声音、视频、图像等;

Http协议包括:

  • 请求协议

    浏览器向web服务器发送数据的时候,这个发送的数据需要遵循的一套标准,这套标准中规定了发送的数据的具体形式;

    包括4部分:

    • 请求行
      • 包括三部分
        • 请求方式(get/post/head/delete/put/options/trace)
        • uri–统一资源标识符,代表网络中某个资源的名字,但是通过uri是无法定位资源的
          • url–统一资源定位符,代表网络中某个资源,同时,通过url是可以定位到资源的
          • url包括uri
            • url:http://localhost:8080/Servlet02/getServlet
            • uri:/Servlet02/getServlet
        • 协议版本号
    • 请求头
      • 请求的主机
      • 主机端口
      • 浏览器信息
      • 平台信息
      • cookie信息
    • 空白行
      • 是用来区分请求头和请求体的
    • 请求体
      • 向服务器发送的具体数据

    http请求协议具体报文

    ​ get请求

    GET /Servlet02/getServlet?				请求行	username=%E5%95%8A%E5%AE%9E%E6%89%93%E5%AE%9E%E5%A4%A7&password=dsasdas HTTP/1.1								
        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
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh,zh-CN;q=0.9,en;q=0.8
    Cache-Control: no-cache
    Connection: keep-alive
    Cookie: _bl_uid=3zky1xteqzOvFF5F657LkOLcet59
    Host: localhost:8080
    Pragma: no-cache
    Referer: http://localhost:8080/Servlet02/index.html
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: same-origin
    Sec-Fetch-User: ?1
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
    sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Windows"
    					空白行
    					请求体
    

    ​ post请求

    POST /Servlet02/getServlet HTTP/1.1				请求行	
    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
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh,zh-CN;q=0.9,en;q=0.8
    Cache-Control: no-cache
    Connection: keep-alive
    Content-Length: 54
    Content-Type: application/x-www-form-urlencoded
    Cookie: _bl_uid=3zky1xteqzOvFF5F657LkOLcet59
    Host: localhost:8080
    Origin: http://localhost:8080
    Pragma: no-cache
    Referer: http://localhost:8080/Servlet02/index.html
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: same-origin
    Sec-Fetch-User: ?1
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
    sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Windows"
    									  空白行
    username: 撒大大						请求体
    password: sada sd 
    
  • 响应协议

    we服务器向浏览器发送数据的时候,这个发送的数据需要遵循的一套标准,这套标准中规定了发送的数据的具体形式;

    包括4部分:

    • 状态行
      • 三部分组成
        • 协议版本号(http/1.1)
        • 状态码(
          • 200:请求成功
          • 404:资源不存在,通常是因为路径写错了,或者路径写对了,但是服务器对应的资源没有请求成功,总之404是前端错误
          • 405:前端发送的请求方式与后端对请求的处理方式不一致,比如前端是get请求,后端是post处理,或者前端是post请求,后端是get处理;
          • 500:服务器端的程序出现了异常,一般是服务器端错误导致
          • 以4开头的,一般是浏览器端的错误导致
          • 以5开头的,一般是服务器端的错误导致
        • 状态描述信息
          • ok 表示正常成功结束
          • not found 表示资源找不到
    • 响应头
      • 响应的内容类型
      • 响应的内容长度
      • 响应的时间
    • 空白行
      • 用来分隔响应头和响应体的
    • 响应体
      • 响应的正文,这些内容是一个长的字符串,被浏览器渲染并执行,最终展示出效果

    http响应协议具体报文

    HTTP/1.1 200			状态行
    Content-Type: text/html;charset=utf8		响应头
    Content-Length: 11
    Date: Thu, 05 May 2022 11:10:59 GMT
    Keep-Alive: timeout=20
    Connection: keep-alive
    						空白行
    get请求					响应体
    

2.GET与POST

get请求与post请求的区别

  • get请求在请求行上发送数据,get请求发送数据的时候,数据会挂在uri的后面,并且在uri后面加一个?,?后面是数据,这样会导致发送的数据显示在浏览器上面
  • post请求在请求体上发送数据,数据不会显示到浏览器地址栏上
  • get与post请求发送数据的个数是相同的,都是key=value&key2=value2
  • get请求只能发送普通的字符串,并且发送的字符串的长度有限制。不同的浏览器限制不同,没有明确规定,get请求无法发送大数据量
  • post请求可以发送任何类型的数据,包括流媒体:图片、声音、视频等等,post请求可以发送大数据量,理论上没有长度限制
  • get请求在W3C中是这样说的:get请求比较适合从服务器获取数据
  • poset请求在W3C中是这样说的:post请求比较适合向服务器传送数据
  • get请求是绝对安全的,因为get请求只是为了从服务器获取数据
  • post请求是危险的,因为post请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器当中,服务器是很危险的,另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分拦截(监听)post请求;
  • get请求支持缓存,post请求不支持缓存,任何一个get请求最终的响应结果都会被浏览器缓存起来,在浏览器缓存当中,一个get请求对应一个资源,实际上,只要发送get请求,浏览器都会先从本地缓存中寻找这个资源,找不到再去服务器获取,这样做是为了提高用户的体验,post请求之后,服务器的响应结果不会被浏览器缓存起来,因为这个缓存没有意义;
  • 只要每次的get请求路径不同,就可以避免浏览器去缓存中查找资源
  • 大部分form表单提交都是post,因为form表单提交的数据比较多,并且数据不希望显示在浏览器地址栏上,如果提交的是流媒体文件,一定是post,因为get只能传字符串;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

y_w_x_k

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

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

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

打赏作者

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

抵扣说明:

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

余额充值