网络上几乎所有的东西都是通过http发送的,即使是非开发者在使用互联网作为关键字端URL或链接时也看到了它。
超文本传输协议(Hypertext Transfer Protocol)是超文本传输协议(Hypertext Transfer Protocol)的缩写,它使我们能够在浏览器和服务器之间传输超文本。这是一项伟大的技术,几乎从网络发明以来就存在了,而且还在不断发展,并提供了越来越多的强大功能。
作为一名开发人员,您可能听说过http头文件,至少在听说CORS政策的时候是这样。这是您在开发网站时一定听说过的问题。但是,http头文件到底是什么,还有什么其他方法可以使用它们呢?
当浏览器请求资源(例如此博客的页面)时,它会向服务器发出请求。此请求如下所示:
FETCH(";https://www.lorenzweiss.de/race_conditions_explained/";,{Credentials:";Include";Include";,Header:{Accept:";Text/HTML,Application/xhtml+xml,APPLICATION/xml;q=0.9,Image/WebP,Image/apng,*/*;q=0.8,应用程序/签名交换;v=b3";,";Accept-Language";:";en,en-US;Q=0.9,de-DE;q=0.8,de;q=0.7";,";缓存控制";:";max-age=0";,";秒获取模式";:";导航";,";秒获取站点";:";同源";,";秒获取用户";:";?1";,";升级-不安全-请求";:";1";,},referrerPolicy:";降级时不推荐";,body:空,方法:";获取";,模式:";CORS";,});
因此,您可以看到资源的URL或位置、有关请求的一些信息以及许多头文件,其中包含有关请求的一些信息。这就是浏览器告诉服务器有关请求的更多信息的方式。例如,它接受哪种数据类型或客户端如何处理缓存。
发送请求后,服务器进行回复,并在回复中设置一些标头,如下所示:
:AUTHORITY:www.lorenzweiss.de:Method:Get:PATH:/RACE_CONSTANCES_EXPLAINED/:方案:Https Accept:文本/HTML,应用程序/xhtml+xml,应用程序/xml;q=0.9,IMAGE/WebP,Image/apng,*/*;q=0.8,application/signed-exchange;v=b3accept-encoding:gzip,DEFate,br Accept-Language:en,en-US;q=0.9,de-DE;q=0.8,de;q=0.7缓存控制:max-age=0cookie:_ga=GAcept-language。_gid=GA1.2.2076192721.1594044231sec-fetch-mode:导航EC-FETCH-SITE:Same-Originsec-Fetch-User:?1升级-不安全-请求:1用户代理:Mozilla/5.0(Macintosh;英特尔Mac OS X 10_15_1)AppleWebKit/537.36(KHtm,如壁虎)Chrome/78.0.3904.70Safari/537.36
还有一些信息是服务器希望告诉浏览器如何处理资源的,例如,如果有cookie,则必须确定使用了哪种编码,等等。
基本上,在http上下文中,浏览器和服务器的通信报头用于扩展资源的simpleRequest。你可以把它看作是添加在你从网上商店订购的包裹上的一张纸,为你提供关于你订购的上下文和资源的更多信息。大多数标题都有非常好的默认设置,这是你不需要考虑的,但也有一些标题可能会变得非常重要,比如CORS标题。但是,还有很多你可能从未听说过的标题,它们非常有用,而且知道如何使用非常有用。
别担心,本文不会讨论CORS标头。以下是很少使用的http头文件,但它们非常强大,有助于显著改善服务器和浏览器之间的通信。
因此,让我们深入研究一下吧。下面是一些您可以设置的标题,它们非常有用和实用。
假设您开始下载一个大型资源,如视频、图像等,但由于连接问题而在两者之间停止下载。使用IF-Range,您可以告诉服务器表示是否未更改,以发送Range中请求的部分。这意味着只下载丢失的部分,而不再发送全部内容。
这在处理大量资源以及移动设备等通常连接不良的情况时非常有用,因为即使在连接中断的情况下,也可以部分下载资源。
它既可以与上次修改资源的日期一起使用,也可以与ETag一起使用,ETag是在资源无效时提供帮助的关键字。
Variable起源于网络或http被用来做各种事情的时代,而不仅仅是网页。它基于使用http以多种不同的格式交换信息的想法。它是如何做到这一点的?它告诉服务器在哪个头中查找信息,如何显示信息。
现在,如果您为不同的客户(例如移动设备、平板电脑或台式机)拥有不同的资源,这真的很有帮助。设想同一资源的三个不同图像存储在服务器上,具体取决于设备。然后,您只需使用Variable标头通知服务器检查设备,然后决定发送哪个图像大小。
对于与设备相关的图像的示例,您只需传递用户代理,告诉服务器它应该检查用户代理以获取设备信息。
如果我们回到请求服务器的例子,例如加载这个网站,浏览器很清楚,它必须显示答案的资源。但也可能是服务器向用户的计算机发送浏览器应该自动下载的资源,如图片或PDF等。服务器可以通过内容处置标头告诉浏览器应该如何处理附加的资源。
通过定义附件的内容部署,浏览器知道这是一个要下载的资源,而不是仅仅显示。
您可以将标题定义为内联或附件,其中“内联”始终是默认设置。
这是一个相当新的标题,因此仅受现代浏览器支持(抱歉,所有IE用户)。不过,我还是想提一下这一点,因为我认为它对一些用例真的很有帮助。基本上,Feature-Policy告诉浏览器应该向文档及其框架提供哪些功能或API来使用。
例如,它可以禁止本网站内的所有脚本或IFRAME等,以允许相机或麦克风等敏感API。
该指令是功能的名称。您可以在此处看到功能的完整列表。允许列表定义了允许使用该指令的原点。
假设我们希望我们的网站既不使用麦克风,也不使用摄像头。使用此头,文档或包含的IFRAME无法访问这些功能。
HTTPS标题很棒,也非常有用!但有时它们可能相当复杂,很难全面了解哪些标题可用,以及它们带来了什么好处。此外,在开发网站时,尤其是在前端,你不会经常与它们接触,或许除了CORS标题。但我认为这错过了一些可能性。HTTP报头更好地代表了服务器和客户之间的通信,我们都知道通信是建立良好关系的关键。
我希望我能为您揭开http头文件的神秘面纱。如果我错过了一个好的和有帮助的标题,请不要犹豫,给我发邮件或以任何方式联系我。
你喜欢、讨厌甚至喜欢这个帖子吗?让全世界都知道你的感受,并在推特上分享