0%

GET方法与POST方法

什么是 HTTP 协议

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议 (HTTP) 是一种通信协议,它允许将超文本标记语言 (HTML) 文档从 Web 服务器传送到客户端的浏览器

网页请求流程

当我们打开浏览器,在地址栏中输入 URL,然后我们就看到了网页。 原理是怎样的呢?

实际上我们输入 URL 后,我们的浏览器给 Web 服务器发送了一个 Request, Web 服务器接到 Request 后进行处理,生成相应的 Response,然后发送给浏览器, 浏览器解析 Response 中的 HTML, 这样我们就看到了网页

打开一个网页需要浏览器发送很多次 Request

  1. 当你在浏览器输入 URL http://www.bing.com 的时候,浏览器发送一个 Request 去获取 http://www.bing.com 的 html.  服务器把 Response 发送回给浏览器.

  2. 浏览器分析 Response 中的 HTML,发现其中引用了很多其他文件,比如图片,CSS 文件,JS 文件。

  3. 浏览器会自动再次发送 Request 去获取图片,CSS 文件,或者 JS 文件。

  4. 等所有的文件都下载成功后。 网页就被显示出来了。

网页请求方法

Http 协议定义了很多与服务器交互的方法,最基本的有 4 种,分别是GET,POST,PUT,DELETE.一个 URL 地址用于描述一个网络上的资源,而 HTTP 中的 GET, POST, PUT, DELETE 就对应着对这个资源的查,改,增,删 4 个操作。 我们最常见的就是 GET 和 POST 了。GET 一般用于获取 / 查询资源信息,而 POST 一般用于更新资源信息。

GET和POST方法的区别

我们看看 GET 和 POST 的区别

  1. GET 提交的数据会放在 URL 之后,以? 分割 URL 和传输数据,参数之间以 & 相连,如 EditPosts.aspx?name=test1&id=123456.  POST 方法是把提交的数据放在 HTTP 包的 Body 中,不会在URL中显示参数。

  2. GET 提交的数据大小有限制(因为浏览器对 URL 的长度有限制),而 POST 方法提交的数据没有限制。

  3. GET 方式需要使用 Request.QueryString 来取得变量的值,而 POST 方式通过 Request.Form 来获取变量的值。

  4. GET 方式提交数据,会带来安全问题,比如一个登录页面,通过 GET 方式提交数据时,用户名和密码将出现在 URL 上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

  5. GET产生一个TCP数据包,浏览器会把http header和data一并发出去,服务器响应200(返回数据),POST产生2个TCP数据包,浏览器先发送header,服务器响应100(continue),浏览器再发生data,服务器响应200(返回数据)

GETPOST
后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。
历史参数保留在浏览器历史中。参数不会保存在浏览器历史中。
对数据长度的限制是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。无限制。
对数据类型的限制只允许 ASCII 字符。没有限制。也允许二进制数据。
安全性与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性数据在 URL 中对所有人都是可见的。数据不会显示在 URL 中。

HTTP协议是无状态的

http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态。

HTTP协议是无状态的和Connection: keep-alive的区别

无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系

HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)

从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接

 Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间