HTTP中的GET和POST请求

2020-03-16  本文已影响0人  暮秋moco

当用户首次登录一个网站时,会出现这个网站的登录页,用户输入账号和密码后,单击“提交”按钮,如果认证通过则登录成功。这个过程中网页和后台服务器进行了多次交互,这中间到底发生了哪些事情呢?

用户在浏览器的地址栏中输入一个网站的登录页地址,目的是从服务器上拉取登录页的 HTML 文件。在这个过程中,浏览器向后台发起了 HTTP GET 的请求(这个请求也可能是从其他页面中的链接发起的),登录页比较常见的 URL 形式是 http://xxx/login

从 GET 请求这个名字中,读者大致可以猜到,这种类型的请求是从服务器拉取资源而不改变服务器的资源。

浏览器收到登录页的 HTML 文件并解析后,用户看到的是用户名和密码的输入界面,输入后单击“提交”按钮,这时浏览器又向服务器发了一个请求,不过发起这次请求时,用户并没有在地址栏输入什么,地址栏的内容也没有立刻发生改变(一般情况下,打开链接后,地址栏的内容会立刻发生改变)。

这次向服务器发起的是 HTTP POST 请求,从 POST 的名字中读者可以大致猜到,这种类型的请求会带一些发起者的数据并让服务器发生一些改变。

通常认为 GET 就是拉取服务器的数据,POST 就是向服务器提交数据,但实际上两者并没有这种明确的界限,前端开发人员有时很任性,怎么操作方便怎么来,所以用户经常会在登录页输入账号和密码,登录后看到地址栏立刻从 http://xxx/login 变成了 http://xxx/login?usemame=xxxx&password=xxxx

当然,敏感信息是经过加密的,上述例子中,页面直接将登录信息补到 URL 中 并发起了一次 HTTP GET 的请求。

有时,因为有的操作用 HTTP GET 不太方便,所以前端开发人员更依赖 HTTP POST 的操作。以上传一张图片为例,将图片数据编码后添加到 URL 后面的参数中传给服务器是可行的,只是有的浏览器(比如 IE)对 URL 的长度有限制,所以前端开发会觉得一会用 POST 传数据,一会用 GET 传数据太麻烦,传数据干脆全用 POST 好了。

HTTP POST 请求将需要携带的信息放在 HTTP 请求的数据字段中,在 URL 中是看不到的,所以有时用户在页面里操作,页面一直在变化,但是地址栏的 URL 却一直没变过(这只是一种原因,很多 Web 技术都可以实现这种效果)。

后台开发人员则会做兼容处理,一般都会同时支持 HTTP GET 和 HTTP POST 来取或传数据,做到只关心数据内容而不关心传送形式。

上一篇下一篇

猜你喜欢

热点阅读