当前位置: 首页 > Web前端 > HTML

【译文】发送表单数据

时间:2023-04-02 20:31:06 HTML

系列文章讲解原文大多数时候,HTML表单的目的只是向服务器发送数据,然后由服务器处理数据并发送响应给用户。虽然看起来很简单,但我们必须注意一些事项,以确保发送的数据不会损坏服务器,或给您的用户带来问题。数据去哪儿关于客户端/服务器架构整个网络都是基于一个基本的客户端/服务器架构,可以概括如下:客户端(通常是网络浏览器)使用HTTP协议向服务器发送请求(通常是一个web服务器程序,如Apache、Nginx、IIS、Tomcat等),服务器以相同的协议响应请求。在客户端,HTML表单只是提供了一种方便且用户友好的方式来配置发送到服务器的HTTP请求。这允许用户为自己提供可以通过HTTP请求传输的信息。客户端:定义如何发送数据

元素可以定义它的数据是如何发送的,它的所有功能都是为了让你配置当用户点击发送按钮时要发送的请求。两个最重要的特征是动作和方法。action属性这个属性定义了数据将被发送到哪里,它的值必须是一个有效的URL。如果未指定此属性,则数据将发送到包含表单的页面的URL。示例在下面的示例中,数据被发送到http://foo.com:这里,数据被发送到表单页面所在的服务器,但是到达的是服务器上不同的URL:如下,当没有指定属性时,表单数据将被发送到包含表单的页面:很多旧页面会使用下面的表示法指示应将数据发送到包含表单的页面;这在当时是必要的,因为action属性在HTML5之前是必需的。但现在已经没有必要了。注意:可以使用HTTPS(HTTP安全)协议指定URL,在这种情况下,数据将与请求的其余部分一起加密,即使表单本身位于通过HTTP访问的不安全页面。另外,如果表单在安全页面上,而你为action属性指定了一个不安全的HTTPURL,所有浏览器都会在用户每次要发送数据时给用户一个安全警告,因为此时数据不会被加密。method属性此属性定义数据的发送方式。HTTP协议提供了几种执行请求的方法;至少可以通过以下方式之一发送HTML表单数据:GET和POST。要了解这两种方法之间的区别,我们必须回头看看HTTP是如何工作的。当你想获取Web上的资源时,浏览器会向指定的URL发送请求。一个HTTP请求由两部分组成:请求头包含一系列与浏览器能力相关的全局字段,请求体包含服务器要处理的信息。GET方法浏览器使用GET方法请求服务器发回指定的资源:“嘿服务器,我想获取这个资源”。在这种情况下,浏览器只会发送一个空的请求体,正因为如此,如果浏览器使用这种方法,发送到服务器的数据将附加到URL。示例考虑以下形式:当使用GET方法时,HTTP请求看起来像这样:GET/?say=Hi&to=MomHTTP/1.1Host:foo.comPOST方法POST方法是略有不同,浏览器将此方法发送到服务器以请求响应,其中包含HTTP请求正文中的数据:“嘿服务器,查看此数据并向我发送适当的结果”。如果使用此方法发送表单,数据将附加到HTTP请求正文中。示例考虑以下形式(与上面的相同):使用POST方法时,HTTP请求如下所示:POST/HTTP/1.1Host:foo.comContent-Type:application/x-www-form-urlencodedContent-Length:13say=Hi&to=MomContent-lengthheader字段表示请求体的大小,Content-Type字段标识发送给服务器的资源类型。我们将很快讨论这些请求标头。当然,HTTP请求是不会显示给用户的(如果你想看到它们,你必须使用诸如Firefox的WebConsole或chromeDeveloperTools之类的工具),唯一显示给用户的是访问过的URL。因此,对于GET请求,用户将在他们的地址栏中看到数据,但对于POST请求,他们不会。这一点很重要,原因如下:如果您要发送密码(或与此相关的任何敏感数据),切勿使用GET方法,否则数据将不安全地显示在地址栏上。如果要发送大量数据,最好使用POST方式,因为有些浏览器会限制URL的大小。此外,许多服务器限制它们接受的URL的长度。服务器端:处理数据无论选择哪种HTTP方式,服务器都只会收到一个字符串并解析,然后得到键/值对列表形式的数据。如何访问这个列表取决于你基于哪个开发平台以及你使用哪个框架。您使用的技术还将决定如何处理重复的键,通常首先选择键接收到的最后一个值。示例:本机PHPPHP提供了几个全局对象来处理数据。假设您使用POST方法,下面的示例将直接获取您的数据并将其显示给用户。当然,您如何处理数据由您决定,您可以显示它、将它存储在数据库中、通过电子邮件发送它或其他任何方式。注意:某些浏览器支持元素的多重特性,一个input元素可以发送多个文件。至于服务器如何处理这些文件,则取决于它使用的是什么技术。如前所述,使用框架可以使您的生活更轻松~警告:为防止滥用,许多服务器对文件和HTTP请求设置了大小限制。因此,最好在发送文件之前与您的服务器管理员核实此限制。安全相关每次要向服务器发送数据,都要考虑安全问题。HTML表单是针对服务器的主要攻击媒介之一,但损害的来源不是HTML表单本身,而是服务器处理数据的方式。常见的安全问题众所周知的安全问题有很多,如何划分它们取决于你在做什么:XSS和CSRF跨站点脚本(XSS)和跨站点请求伪造(CSRF)是最常见的攻击类型,当数据从用户发送到用户时,它们将显示在您的Occurs中。XSS允许攻击者将客户端脚本注入到其他用户访问的网页中。攻击者可以利用跨站点脚本漏洞来绕过访问控制策略,例如同源策略。这种攻击可能会产生从轻微的烦恼到严重的安全危机的有害影响。CSRF很像XSS,因为它们都以相同的方式开始——将客户端脚本注入网页,但它们的攻击目标不同。CSRF攻击者会尝试提升权限成为高权限用户(例如网站管理员),然后执行他们不应该执行的操作(例如将数据发送给不受信任的用户)。XSS攻击利用用户对网站的信任,而CSRF攻击利用网站对其用户的信任。为了防止此类攻击,需要始终验证用户发送给服务器的数据;同时(如果需要显示),尽量不显示用户提供的HTML内容,而是对用户提供的数据进行处理,避免原封不动的显示。目前市面上几乎所有的框架都会至少实现一个过滤器,去除用户提交数据中的