昆明市建设局网站,龙岩企业网站建设制作,wordpress 新网页打开,门户网站模板html51 缘起
有一次#xff0c;听到有人在议论招聘面试的人员#xff0c; 谈及应聘人员的知识深度#xff0c;说#xff1a;问了一些关于Http的问题#xff0c;如Http相关结构、网络结构等#xff0c; 然后又说#xff0c;问没问相关原理、来源#xff1f; 我也是有些困惑了…1 缘起
有一次听到有人在议论招聘面试的人员 谈及应聘人员的知识深度说问了一些关于Http的问题如Http相关结构、网络结构等 然后又说问没问相关原理、来源 我也是有些困惑了Http的相关原理、来源 对于开发者而言有多少用处 当然是有的这是基础必备知识即使在开发过程中不关注这些也能正常实现功能 在知识交流和考核过程中看似不起眼的基础知识就是死穴了。 听到过这么一句很有分量的话连这些基础原理都不知道 说起来惭愧计算机领域有多少基础知识是不知道的以及究其一生仍无法知道以及不得不借鉴抄袭才能得来 但是又大言不惭地说是自主知识产权。 牢骚过后 本文主要分享Http的变迁帮助读者轻松应对知识交流与考核以及当做论文素材。 英文文档为https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
2 Http
HTTP超文本传输协议是万维网的基础底层协议由Tim Berners Lee及其团队于1989-1991年间开发 HTTP经历多次变更使得HTTP得以保持简单、灵活。 本文介绍HTTP是如何从实验室仅为交换文件而设计的一种传输协议演变为现代互联网宫殿的可以通过HTTP携带高分辨率图片、视频和3D模型等。 HTTP的大事年表如下图所示这里没有把RESTful API放进去不过还是提一下 RESTful API的出现推动并规范了互联网的发展总之很重要 RESTful AP首次出现于Roy Thomas在2000年的博士论文https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm。 2.1 万维网的发明
1989年Tim Berners-Lee在CERN欧洲核子研究中心工作期间提出基于互联网构建超文本系统的建议。 最初这套超文本系统称为Mesh后来在1990年实施期间更名为万维网World Wide Web。 万维网基于TCP和IP协议构建由4部分组成 1HTML超文本标记语言以文本形式表示超文本文档 2HTTP超文本传输协议交换超文本文档的简单协议 3客户端展示和编辑超文本文档第一个网络浏览器称为WorldWideWeb 4 服务端为超文本文档提供接入服务httpd的早期版本。
万维网的这4个部分于1990年年底完成构建第一批服务器于1991年初在CERN外运行。 1991年8月6日Tim Berners-Lee在公共alt.hypertext新闻组发帖这被认为是万维网正式作为公共项目的开端。 早期HTTP协议非常简单后来被称为HTTP/0.9有时称为单行协议one-line protocol。
2.2 HTTP/0.9单行协议
HTTP初始版是没有版本号的后来称为0.9以示与后来的版本区分。 HTTP/0.9非常简单请求由一行组成以GET方法开始拼接资源路径。 由于连接到服务器后不需要协议、服务器和端口因此不包含完整的URL。 单行HTTP请求如下
GET /mypage.html请求的响应同样非常简单只包含文件本身。
htmlA very simple HTML page
/html与后续的HTTP不同的是HTTP/0.9没有头部意味着该协议只能传输HTML文件。 没有状态或错误代码如果出现问题将生成一个特定的HTML文件包含问题的描述供用户使用。
2.3 HTTP/1.0构建可扩展性
HTTP/0.9功能非常有限但是浏览器和服务器的发展是HTTP变得更加通用 1每个请求中会发送版本信息HTTP/1.0添加到GET请求行中 2响应的起始部分会发送状态码这样浏览器就可以根据响应识别成功或是失败并调整处理逻辑如可以更新或使用本地缓存 3HTTP头的概念嵌入到请求和响应中可以传输元数据协议的灵活性和可扩展性均有增强 4请求头中使用Content-Type参数HTTP可以传输HTML之外的文档。
2.3.1 样例
请求
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)响应
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
HTML
A page with an imageIMG SRC/myimage.gif
/HTML获取图像的样例
请求
GET /myimage.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)响应
200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
(image content)1991~1995年间HTTP/1.0采用试看的方法在服务器和浏览器中添加新功能看看是否有吸引力。 交互问题是常见的问题为解决这些问题1996年出版了一份信息文档用于描述通用处理方法即RFC1945定义了HTTP/1.0。
2.4 HTTP/1.1标准化协议
与此同时HTTP标准化火热进行中与HTTP/1.0的相关实现并行进行 第一个标准化的HTTP版本是1997年发布的HTTP/1.1仅比HTTP/1.0晚了几个月。
HTTP/1.1阐明了引起歧义的地方并引入了诸多改进 1可重用连接节约时间。无需多次打开嵌入到单个文档中的资源 2添加管道。允许第一个请求收到响应前发送第二个请求降低通信的延迟 3支持分块响应 4引入缓存控制机制 5引入内容协商包括语言、编码和类型。客户端和服务器现在可以根据交换的内容达成一致 6由于主机头的存在服务器具有从同一IP托管不同域的能力。
2.4.1 样例
请求
GET /en-US/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8
Accept-Language: en-US,en;q0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header响应
200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charsetutf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: 547fa7e369ef56031dd3bff2ace9fc0832eb251a
Keep-Alive: timeout5, max1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding(content)请求
GET /static/img/header-background.png HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: en-US,en;q0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header响应
200 OK
Age: 9578461
Cache-Control: public, max-age315360000
Connection: keep-alive
Content-Length: 3077
Content-Type: image/png
Date: Thu, 31 Mar 2016 13:34:46 GMT
Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT
Server: Apache(image content of 3077 bytes)HTTP/1.1与1997年1月首次发表为RFC 2068。
2.5 15年的扩展期
HTTP的可扩展性使创建新的头和方法变得非常容易。 虽然HTTP/1.1经过两次修订1999年6月发布的RFC2616和2014年6月【HTTP/2发布前】发布的RFC7230RFC7235 但是HTTP/1.1历经15年仍非常稳定。
2.5.1 建立安全传输
HTTP最大变更发生于1994年底计算机服务公司Netscape Communications在HTTP上添加了加密传输层SSLSecure Socker Layer安全套接字层 而不是通过基本的TCP/IP栈发送HTTP。SSL1.0并没有向大众发布但是SSL2.0和SSL3.0允许创建电子商务网站。 通过SSL加密保证了服务器和客户端交换信息的真实性。SSL最终成为公认的标准成为TLSTransport Layer Security传输层安全。
与此同时加密传输层是非常必要的。网络不再是一个主要的学术网络而是一个丛林广告商、个人和犯罪分子都在竭尽所能获取更多的私人数据。 随着基于HTTP构建的应用程序日益强大并且需要访问地址簿、电子邮件和用户位置等私人信息TLS在电子商务之外变得非常必要。
2.5.2 面向更复杂的应用
Tim Berners-Lee最初并不认为HTTP是只读介质。他想创建一个可以远程添加和移动文档的网络一种分布式文件系统。 1996年左右HTTP进入创作领域并为之创建了一个名为WebDAV的标准随着标准的推广一些符合标准的应用程序涌现如CardDAV处理通讯录CalDAV处理日历。 但是这些*DAV应用都有一个缺陷只能在服务器实现后使用。
2000年出现了一种新的打开HTTP方式表示状态传输或REST。 API不是基于新的HTTP方法而是依赖于HTTP/1.1的基础方法访问URI。 任何Web应用通过API可以检索和修改数据而无需更新浏览器或服务器。 所有必要的信息都嵌入到网站通过HTTP/1.1提供的文件中。 REST模型的缺点是每个网站都定义了自己的非标准RESTful API并完全的控制权。 与客户端和服务器可交互的*DAV不同RESTful API在21世纪头10年非常通用。
自2005年以来网页可用的API逐渐增多一些API为了特殊的目的而扩展了HTTP协议 1服务器发送事件服务器可以将消息推送到浏览器 2WebSocket一种新的协议以现有的HTTP连接进行升级。
2.5.3 宽松的网络安全模型
HTTP独立于Web安全模型称为同源策略。 实际上当前的Web安全模型是HTTP发明之后才产生的。 多年经验得知某些限制条件下取消同源的限制是有用的服务器使用一组新的HTTP头将解除此类限制的数量时间发送给客户端。 这些都是在跨源资源共享CORS Cross-Origin Resource Sharing和内容安全策略CSPContent Security Policy等规范中定义的。 除了这些大型拓展外HTTP添加了许多其他头部有时只是实验性质的。 需要注意的头有控制隐私的头、X-Frame-Options头和Upgrade-Insecure-Requests头等。
2.6 HTTP/2更高性能的协议
经过多年发展网页日趋复杂其中一些甚至是自己的应用程序 目前的网页可以展示更多的视觉媒体但是增加互动性的脚本数量以及大小也随之增加。 通过大量的HTTP请求传输更多的数据增加了HTTP/1.1的连接的复杂性和开销。 为解决这一问题Google在2010年初实施了一项实验性协议SPDY。 这种在客户端和服务器之间交换数据的方案引起了使用浏览器和服务器开发人员的兴趣 SPDY明确增加响应能力并解决重复传输数据的问题作为HTTP/2协议的基础。
HTTP/2协议与HTTP/1.1有如下几点不同 1二进制协议而不是文本协议。无法手动读取和创建。虽然有这个障碍但是可以通过改进进行优化 2这是一个多路复用协议同一连接可以接受并行请求从而消除HTTP/1.1协议的限制 3压缩头部。由于这些请求在一组请求中通常是相似的压缩头部消除了数据传输的开销 4允许使用服务器推送机制即在客户端段缓存中填充数据。
2015年5月正式标准化HTTP/2使用量在2022年1月达到峰值 占所有网站的46.9%统计数据https://w3techs.com/technologies/details/ce-http2。 为节省数据传输开销和后续预算高流量网站采用的速度最快。
这种快速拥抱HTTP/2的原因可能是因为不需要更改网站和应用程序。 使用HTTP/2只需要更新服务器浏览器即可使用。 只需少量的组织来触发应用随着浏览器和服务器的更新使用量自然会增加而Web开发者无需进行大量工作。
2.7 后HTTP/2时代的演变
HTTP的扩展仍在继续。引用2016年出现的HTTP扩展 1支持Alt-Svc允许分离给定资源的标识和位置意味着更智能的CDN缓存机制 2引入客户端提示允许浏览器或客户端主动向服务器传输有关需求和硬件约束的信息 3Cookie头中引入安全相关的前缀有助于保证Cookie不会被更改。
2.8 HTTP/3通过QUIC实现HTTP
HTTP的下一个主要版本HTTP/3HTTP/3与早起的HTTP版本有相同的语义 只是在传输层使用了QUIC而不是TCP。 截至2022年10月有26%的网站使用HTTP/3。 QUIC为HTTP连接提供更低的延迟。与HTTP/2一样QUIC是一个多路复用协议 但是HTTP/2运行在单个TCP连接上因此TCP在处理丢包检测和重传会阻塞所有流。 QUIC基于UDP运行多个流并对每个流独立地执行丢包检测和重传 如果发生错误只会影响当前包的流。