web客户端
发出请求报文一方的用户称之为web客户端;常见的客户端,有Internet Explorer、Microsoft edge、chrome 、火狐等等
web服务端
发出响应报文一方的用户称之为web服务端;常见的服务端,有Apache、nginx、IIS及谷歌公司开发的web服务等等
web资源
web服务器上对外提供访问的内容,Web服务器是Web资源的宿主;web资源是web内容的源头。常见的web资源是服务器上面的静态文件,这些文件可以包含任意内容,如:文本文件、压缩文件、HTML页面、word文档等等,所有其他一切你所能够想到的格式。
web媒体类型
HTTP仔细的给每种要通过web传输的对象都打上名为MIME类型的数据格式标签;web浏览器通过获取响应的MIME标签类型,来决定如何处理这个文件,比如可以在web浏览器上面播放视频、听音乐、看文档等等;
URI
统一资源标识符(Uniform Resource Identifier,简写URI),采用特定语法标识一个资源的字符串,例如:https://www.baidu.com/index.html;不过也可能是其他内容,能用来唯一标识资源的字符串都可以称之为URI,像邮件地址、ftp文件等等;
URI支持的协议有:http、https、ftp、mailto、magnet、telnet、data、file、nfs、gopher、ldap等。
URL
统一资源定位符(Uniform Resource Locators,简写URL),URL唯一地标识一个资源在Internet上的位置。不管用什么方法表示,只要能定位一个资源,就叫URL;需要注意的是,URL与URN都是URI的子集,URL能表示的几乎URI都能表示,但URI能表示的URL并不一定能表示。URL遵循一个标准格式,这个标准格式包含三块内容,方案、主机地址、URN;
方案:说明了访问资源所使用的协议类型,如:http://
主机地址:给出了服务器在internet上访问的地址,如:www.baidu.com
资源:值web服务器上的某块资源,如:/index.html
URN
统一资源名称(Uniform Resource Names,简写URN),URN它命名资源但不指定如何定位资源,好比上面的/index.html,又或者一个邮编urn:issn:1535-3613 (国际标准期刊编号)
事务
一个完整的HTTP请求开始至一个完整的HTTP响应结束。简单点说就是用户访问一个网址,并且web浏览器得到相应的展示这个过程就叫事务。
方法
HTTP请求支持不同的操作命令,这些命令称之为HTTP方法(HTTP method),简称方法;每一个HTTP请求都会包含一个方法,下面列出一些常见的HTTP方法
- GET:GET请求会向服务器请求指定的资源;一般来说GET方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。它期望的应该是而且应该是安全的和幂等的。这里的安全指的是,请求不会影响到资源的状态。
- PUT:PUT请求会向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。
- HEAD:HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。
- POST:POST请求会向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。POST方法是非幂等的方法,因为这个请求可能会创建新的资源或/和修改现有资源。
- DELETE:DELETE请求用于请求服务器删除所请求URI(统一资源标识符,Uniform Resource Identifier)所标识的资源。DELETE请求后指定资源会被删除,DELETE方法也是幂等的。
- CONNECT:CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。
- OPTIONS:OPTIONS请求与HEAD类似,一般也是用于客户端查看服务器的性能。 这个方法会请求服务器返回该资源所支持的所有HTTP请求方法,该方法会用'*'来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常。JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限。
- TRACE:TRACE请求服务器回显其收到的请求信息,该方法主要用于HTTP请求的测试或诊断。
- PATCH:PATCH方法出现的较晚,它在2010年的RFC 5789标准中被定义。PATCH请求与PUT请求类似,同样用于资源的更新。二者有以下两点不同:
- PATCH一般用于资源的部分更新,而PUT一般用于资源的整体更新。
- 当资源不存在时,PATCH会创建一个新的资源,而PUT只会对已在资源进行更新。
状态码
每条HTTP响应报文返回时都会携带一个状态码,用来告知客户端请求的结果。下面列出常见的状态码:
分类 | 分类描述 |
1 | 信息,服务器收到请求,需要请求者继续执行操作 |
2 | 成功,操作被成功接收并处理 |
3 | 重定向,需要进一步的操作以完成请求 |
4 | 客户端错误,请求包含语法错误或无法完成请求 |
5 | 服务器错误,服务器在处理请求的过程中发生了错误 |
状态码 | 状态码描述 |
100 | 继续。客户端应继续其请求 |
101 | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | 请求成功。一般用于GET与POST请求 |
201 | 已创建。成功请求并创建了新的资源 |
202 | 已接受。已经接受请求,但未处理完成 |
203 | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | 部分内容。服务器成功处理了部分GET请求 |
300 | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | 使用代理。所请求的资源必须通过代理访问 |
306 | 已经被废弃的HTTP状态码 |
307 | 临时重定向。与302类似。使用GET请求重定向 |
400 | 客户端请求的语法错误,服务器无法理解 |
401 | 请求要求用户的身份认证 |
402 | 保留,将来使用 |
403 | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | 客户端请求中的方法被禁止 |
406 | 服务器无法根据客户端请求的内容特性完成请求 |
407 | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | 服务器等待客户端发送的请求时间过长,超时 |
409 | 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突 |
410 | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | 客户端请求信息的先决条件错误 |
413 | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | 服务器无法处理请求附带的媒体格式 |
416 | 客户端请求的范围无效 |
417 | 服务器无法满足Expect的请求头信息 |
500 | 服务器内部错误,无法完成请求 |
501 | 服务器不支持请求的功能,无法完成请求 |
502 | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
协议版本
HTTP 0.9
- 只支持
GET
请求方式:由于不支持其他请求方式,因此客户端是没办法向服务端传输太多的信息 - 没有请求头概念:所以不能在请求中指定版本号,服务端也只具有返回 HTML字符串的能力
- 服务端相响应之后,立即关闭TCP连接
HTTP 1.0
- 请求方式新增了POST,DELETE,PUT,HEADER等方式
- 增添了请求头和响应头的概念,在通信中指定了 HTTP 协议版本号,以及其他的一些元信息 (比如: 状态码、权限、缓存、内容编码)
- 扩充了传输内容格式,图片、音视频资源、二进制等都可以进行传输
- 长连接:新增Connection字段,可以设置keep-alive值保持连接不断开
- 管道化:基于上面长连接的基础,管道化可以不等第一个请求响应继续发送后面的请求,但响应的顺序还是按照请求的顺序返回
- 缓存处理:新增字段cache-control
- 断点传输
HTTP 2.0
- 二进制分帧
- 多路复用: 在共享TCP链接的基础上同时发送请求和响应
- 头部压缩
- 服务器推送:服务器可以额外的向客户端推送资源,而无需客户端明确的请求
上述内容均来自摘抄:https://juejin.im/post/5d5fe4cb51882569d64b9228
web的结构组件
代理:位于客户端与服务器之间的HTTP中间实体;
缓存:HTTP的仓库,常用来使常用页面的副本保存在离客户端更近一些的地方;
网关:连接其他应用程序的特殊web服务器
隧道:对HTTP通信协议报文进行盲转发的特殊代理
Agent代理:发起自动HTTP请求的半智能Web客户端
后面会一一对这些结构组件进行详细讲解。