我有一个包含以下代码的 html 页面。
<form method="POST" action="https://formspree.io/email">
<input type="submit" value="SEND"/>
</form>
当用户提交表单时,我的浏览器在http请求中不包含referrer标头字段。为什么不呢?
我通过将
<meta name="referrer" content="origin">
添加到 HTML 页面的 <head>
部分来修复此问题。
您正在通过在浏览器中将网站作为计算机文件系统中的静态 HTML 文件打开来测试您的网站。在这种情况下,其 URL 不会以 http:// 或 https:// 开头。这是行不通的,因为浏览器不会将这些页面视为普通的 Web 资源,因此当您提交表单时它们不会自动发送“Referer”标头。 Formspree 需要该标头才能工作。如果您只是从本地 Web 服务器将 HTML 文件作为 Web 资源打开,则可以解决此问题。如果您使用的是 Mac 或 Linux,只需输入 python -m SimpleHTTPServer 8000 或您的 HTML 文件目录,然后在浏览器上访问 http://localhost:8000。如果您使用的是 Windows,请尝试安装以下超级简单的 Web 服务器之一:适用于 Chrome、thttpd 或 Quickshare 的 Web 服务器。
您使用的是旧版 Safari、Safari 移动版或非最新 Chrome、Firefox 或 Edge 的其他浏览器。在这种情况下,您可能是我们在 Formspree 上制定的旧 HSTS 政策的受害者,该政策不允许网站将内容发布到非 https 版本的 Formspree。在这种情况下,请将表单的 action= 属性更改为 https://formspree.io/.
首先使用formspree指定的属性:
<form action="https://formspree.io/[email protected]"
method="POST">
<input type="text" name="name">
<input type="email" name="_replyto">
<input type="submit" value="Send">
</form>
第二:也许您之前在另一个网站(例如 formspree 网站)中尝试过该表单,因此您必须在 formspree 网站中重置它,然后直接在您的网站中尝试,因此您必须再次确认。
希望它对你有用...
正如 statosdotcom 评论的那样,问题发生是因为我在本地打开网页。
从 2020 年开始,如果链接或请求来自 HTTPS -> HTTP(或文件 -> HTTPS),默认情况下“根本”不发送 Referer,如果是 HTTPS -> HTTPS,则仅发送源但不同的网站。
链接也可以指定
rel=noreferrer
来单独禁用它。
您可以使用 HTTP 标头或元标记对其进行调整。
参考:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#integration_with_html