HTTP详解(get和post)

前言:

B站学习之后笔记:

动力节点最新JavaWeb视频教程,javaweb零基础入门到精通IDEA版-【已完结】_哔哩哔哩_bilibili

HTTP协议

  • 什么是协议?

    • 协议实际上是某些人,或者某些组织提前制定好的一套规范,大家都按照这个规范来,这样可以做到沟通无障碍。

    • 协议就是一套规范,就是一套标准。由其他人或者其他组织负责制定的。

  • 什么是HTTP协议?

    • HTTP协议:是W3C制定的一种超文本传输协议。(通信协议:发送消息的模板提前被制定好。)

    • 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请求协议(B->S)

    • HTTP的请求协议包括:4部分

      • 请求行

        • 包含三个部分

          • 第一部分:请求方式(7种)

            • get(常用的)

            • post(常用的)

            • delete

            • put

            • head

            • options

            • trace

          • 第二部分:URI

            • 什么是URI:统一资源标识符。表示网络种某个资源的名字,但是通过URI是无法定位资源的。

            • 什么是URL:统一资源定位符。表示网络中的某个资源,通过URL是可以定位到资源的。

            • URL和URI什么关系,有什么区别?

              • URL包括URI

          • 第三部分:HTTP协议版本号

      • 请求头

        • 请求的主机

        • 主机的端口

        • 浏览器信息

        • 平台信息

        • cookie等信息

        • ....

      • 空白行

        • 空白行用来区分请求头和请求体

      • 请求体

        • 向服务器发送的具体数据

  • HTTP响应协议(S->B)

    • HTTP的响应协议包括:4部分

      • 状态行

        • 三部分组成

          • 第一部分:协议版本号

          • 第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码)

            • 200 表示请求响应成功,正常结束。

            • 404 表示访问的资源不存在,通常是因为要么是路径写错了,要么是路径写对了,但是服务器中对应的资源并没有启动成功。总之404错误是前端错误。

            • 405 表示前端发送的请求方式与后端请求的处理方式不一致发生:

              • 比如:前端是POST请求,后端处理的方式是get方法处理时,发生405

              • 比如:前端是GET请求,后端处理的方式是post方法处理时,发生405

            • 500 表示服务器端的程序出现异常。一般会认为是服务器端的错误导致的。

            • 以4开头,一般认为是浏览器错误导致的。

            • 以5开头,一般认为是服务器错误导致的。

          • 第三部分:状态的描述信息

            • ok 表示正常成功结束。

            • not found 表示资源找不到。

      • 响应头

        • 响应的内容类型

        • 响应的内容长度

        • 响应的时间

        • ....

      • 空白行

        • 用来分隔响应头和响应体。

      • 响应体

        • 响应体就是响应的正文,这些内容是一个长的字符串,这个字符串被浏览器渲染,解释并执行,最终展示效果。

  • 怎么向服务器发送GET请求,怎么向服务器发送POST请求?

    • 到目前为止,只有一种情况可以发送POST请求:使用form表单,并且form标签中的method属性值为:method=”post“。

    • 其他所有情况一律都是get请求:

      • 在浏览器直接输入URL,敲回车,属于get请求。

      • 在浏览器上直接点击超链接,属于get请求。

      • 使用form表单提交数据时,form标签中没有写method属性,默认都是get。

      • 或者使用form的时候,form标签中method属性值为:method=”get“

      • ....

  • get请求和post请求如何选择,什么时候使用get请求,什么时候使用post请求?

    • get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面加了”?“,”?“后面是数据。这样会导致发送的数据会显示在浏览器的地址栏上(get请求在请求行上发送数据)

    • post请求发送数据的时候,在请求体当中发送。不会显示到浏览器的地址栏上。也就是说post发送数据,在浏览器的地址栏上看不到。(post在请求体上发送数据)

    • get请求发送的是普通字符串,并且发送的字符串长度有限制,不同浏览器限制不同。

    • get请求无法发送大数据量。

    • post请求可以发送任何类型的数据,包括字符串,流媒体等信息:视频,声音,图片。

    • post请求可以发送大量数据量,理论上没有长度限制。

    • get请求比较适合从服务器中获取数据。

    • post请求比较适合从服务器传送数据。

    • get请求是安全的。因为get请求只是为了从服务器上获取数据,不会对服务器造成威胁。

    • post请求是危险的。因为post请求是向服务器提交数据,如果这些数据通过后门方式进入到服务器当中,服务器是很危险的。另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截(监听)post请求。

    • get请求支持缓存。

      • 任何一个get请求最终的响应结果都会被浏览器缓存起来。

      • 实际上,你只要发送get请求,浏览器第一件事就是从本地浏览器的缓存中找,找不到的时候才会去服务器上获取。提高用户的体验。

      • 不希望走get缓存:只需要get请求的请求路径不同即可。加一个时间戳,这样每一次的请求都不一样,就不会走浏览器缓存。

    • post请求不支持缓存。

      • post请求之后,服务器响应的结果不会被浏览器缓存起来,因为这个缓存没有意义。

  • get请求和post请求如何选择?

    • 如果是从服务器获取资源就用get请求,如果是向服务器提交数据就用post请求。

    • 大部分form表单提交,都是post方式,因为form表单需要填写大量的数据,这些数据都是为了收集用户信息,发送给服务器的。

    • 如果表单中有敏感信息,还是建议用post请求,因为get请求会回显敏感信息到浏览器的地址栏上。(例如:密码信息)

    • 做文件上传,一定是post请求。传送的数据不是普通文本。

    • 其他情况下都可以使用get请求。

  • 不管你是get请求还是post请求,发送的请求数据格式时完全相同的,只不过位置不同,格式都是统一的:

    • name=value&name=value

    • String s = ”name=value&name=value“;

    • s.split(”&“)

    • name=value

    • 进行后续操作

    • name是什么?

      • 以form表单为例:form表单中input标签的name。

    • value是什么?

      • 以form表单为例:form表单中input标签的value。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值