欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GET请求与POST请求

程序员文章站 2024-01-20 19:02:58
...

GET请求与POST请求

HTTP协议的详细内容

什么是HTTP协议?

  • 超文本传输协议
  • 浏览器和服务器之间的一种通讯协议
  • 该协议时W3C负责制定的,其本质上就是数据传送格式,提前指定好了的。浏览器和服务器都必须按照这种格式接收与发送数据

你们使用的HTTP协议版本号是多少

  • HTTP1.1

HTTP协议包括几部分

  • 请求协议:从Browser发送到Server的时候采用的数据传送格式
  • 响应协议:从Server发送到Browser时时候采用的数据传送格式

请求协议

请求协议包括四部分

  • 请求行
  • 消息报头
  • 空白行
  • 请求体

请求行包括:请求方式 URI 协议版本号 POST /webapp10/login HTTP/1.1

空白行:专门用来分离消息报头和请求体的

如下是通过Httpwatch软件抓取的请求响应流

GET请求与POST请求

GET请求:如下是一个GET请求的登陆页面的请求,由于请求方式为GET,所以发送数据在请求行上发送!故请求体为空

GET /webapp10/login?username=admin&password=123 HTTP/1.1 请求行
Accept: text/html, application/xhtml+xml, image/jxr, */* 消息报头
X-HttpWatch-RID: 50301-10022
Referer: http://localhost:8080/webapp10/
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
														 空白行
														 请求体

POST请求:如下是一个POST请求的登陆页面的请求,请求体展示了请求的内容username=admin&password=***

POST /webapp10/login HTTP/1.1 请求行						
Accept: text/html, application/xhtml+xml, image/jxr, */* 消息报头
X-HttpWatch-RID: 50301-10054
Referer: http://localhost:8080/webapp10/
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 27
Connection: Keep-Alive
Cache-Control: no-cache
						空白行
username=admin&password=123 请求体

响应协议

响应协议包括四部分

  • 状态行
  • 响应报头
  • 空白行
  • 响应体

状态行:协议版本号 状态码

空白行:是用来分离响应报头和响应体的

响应协议中重点掌握状态码:

  • 200 响应成功正常结束

  • 404 资源未找到

  • 500 服务器内部错误

如下是服务器的响应

HTTP/1.1 200 OK 状态行
Server: Apache-Coyote/1.1 响应报头
Content-Type: text/html;charset=UTF-8
Content-Length: 21
Date: Thu, 13 Aug 2020 10:15:13 GMT
	空白行
<h1>登陆成功</h1> 响应体

GET请求与POST请求区别

  • 什么情况下浏览器发送的请求是GET请求,什么情况下浏览器发送的请求是POST请求?

    只有当使用表单form,并且讲form的标签的method属性设置为method=“post”,才是POST请求方式,其余剩下的所有请求都是基于GET请求

  • GET请求和POST请求有什么区别?

    • GET请求在请求行上提交数据,格式uri?name=value&name=value,这种提交方式最终提交的数据会显示在浏览器地址栏上

    • POST请求在请求体中提交数据,相对安全,提交格式name=value&name=value,这种提交方式最终不会显示在浏览器地址栏上

    • POST请求在请求体中提交数据,所以POST请求提交的数据没有长度限制【POST可以提价大数据】

    • GET请求在请求行上提交数据,所以GET请求提交的数据长度有限制

    • GET请求只能提交字符串数据,POST请求可以提交任何类型的数据,包括视频…,所以文件上传必须使用POST请求

    • GET请求最终的结果,会被浏览器缓存收纳,而POST不会被缓存收纳(为什么GET会被缓存?)

  • GET请求和POST请求应该如何选择?

    • 有敏感数据 POST
    • 传送的数据不是普通字符串 POST
    • 传送的数据非常多 POST
    • 这个请求是为了修改服务器端资源 POST
    • GET请求多数情况下是从服务器中读取资源,这个读取的资源在短时间内不会发送变化,所以GET请求最终的结果会被浏览器缓存起来
    • POST请求是为了修改服务器端的资源,而每一次修改结果都是不同的,最终结果没有必要被浏览器缓存