HTTP协议

188 阅读10分钟

HTTP协议介绍

HTTP概念

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下:

  1. 支持客户/服务器模式
  2. **简单快速:**客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  3. **灵活:**HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  4. **无连接:**无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  5. **无状态:**HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP协议之URL

HTTP使用统一资源标识符 ( Uniform Resource Identifiers, URI ) 来传输数据和建立连接,URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息

URL 全称是 Uniform Resource Locator,中文名叫统一资源定位符,是互联网上用来标识某一处资源的地址,以下面这个URL为例,介绍下普通URL的各个部分

www.xxx.com:8080/news/1.html…

上面的URL可以看出,一个完整的URL包括以下几部分

  1. 协议部分:http:,在internet中还有多种协议,如 https、ftp,后面的 // 为分隔符
  2. 域名部分:www.xxx.com,一个URL中,也可以使用IP地址作为域名使用
  3. 端口部分:跟在域名后面,使用 : 作为分隔符,端口不是一个URL的必须部分,如果省略。将采用默认端口
  4. 虚拟目录部分:从域名后的第一个 / 到最后一个 / 为止,虚拟目录也不是URL的必须部分
  5. 文件名部分:从域名的最后一个 / 开始到 ?为止,这里为 1.html,这也不是URL的必须部分,如果省略,则使用默认的文件名
  6. 参数部分:从 ?到 # 为止的部分,又称搜索部分、查询部分,参数可以允许有多个,之间用 & 作为分隔符
  7. 锚部分:从#开始到最后,都是锚部分

HTTP 请求响应详讲

HTTP请求

http请求由请求状态行、消息报头、请求正文三部分构成

请求状态行

请求行由请求 methord,url 字段和 HTTP Version 三部分构成,它定义了本次的请求方式、请求地址,以及所遵循的http协议版本,例如:

GET /example.html HTTP/1.1 (CRLF)
image-20211003114139580

HTTP协议方法有:

  • GET:请求获取Request-URL所标识的资源
  • POST:在Request-URL所标识的资源后增加新的数据
  • HEAD:获取Request-URL请求资源的响应消息报头
  • PUT:请求服务器对Request-URL对应资源做出存储或修改
  • DELETE:请求服务器删除Request-URL所标识的资源
  • TRACE:请求服务器回送给浏览器收到的请求信息,主要用于测试或诊断
  • CONNECT:保留将来用
  • OPTIONS:请求服务器的性能,或查询与资源相关的选项和需求

POST/增、DELETE/删、PUT/改、GET/查

HTTP请求头

消息报头由一系列键值对组成,允许客户端向服务器端发送一些附加信息或客户端自身的信息

image-20211003121334062

请求头的信息,可以在前端发起请求的时候指定,比如说axios

HTTP请求正文

只有在发送 POST/增 请求时才会有请求正文,GET 方法没有请求正文

image-20211003122744283

HTTP响应

HTTP响应也由三部分组成,包括状态行、消息报头、响应正文

响应状态行

状态行也由三部分组成,包括HTTP协议版本,状态码 以及状态码的文本描述

例如:

HTTP/1.1 200 OK	(CRLF)
HTTP响应状态码

状态码有三位数字组成,第一个数组定义了响应的类别,且有无照片那可能取值

  • 1xx — 指示信息 - 表示请求已接收,继续处理,基本见不到
  • 2xx — 成功 - 表示请求已被成功接收、理解、接受
  • 3xx — 重定向 - 完成请求必须进行更进一步处理
  • 4xx — 客户端错误 - 请求由语法错误或请求无法实现
  • 5xx — 服务器端错误 - 服务器未能实现合法的请求

常见状态码、状态描述、说明:

  • 200:OK - 客户端请求成功
  • 400:Bad Request - 客户请求有语法错误,不能被服务器所理解
  • 401:Unauthorized - 请求未经授权,这个状态码必须和 WWW-Ahthenticate 报头域一起使用
  • 403:Forbidden - 服务器收到请求,但是拒绝提供服务
  • 404:Not Found - 请求资源不存在,eg:输入了错误的url
  • 500:Internal Server Error - 服务器发生了不可预期的错误
  • 503:Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常
HTTP响应状态码说明

1xx 代码说明 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx 代码说明 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 201 (已创建) 请求成功并且服务器创建了新的资源。 202 (已接受) 服务器已接受请求,但尚未处理。 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。 206 (部分内容) 服务器成功处理了部分 GET 请求。

3xx 状态说明 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx 状态说明 400 (错误请求) 服务器不理解请求的语法。 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 403 (禁止) 服务器拒绝请求。 404 (未找到) 服务器找不到请求的网页。 405 (方法禁用) 禁用请求中指定的方法。 406 (不接受) 无法使用请求的内容特性响应请求的网页。 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。 408 (请求超时) 服务器等候请求时发生超时。 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。 415 (不支持的媒体类型) 请求的格式不受请求页面的支持。 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。 417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

5xx 状态说明 500 (服务器内部错误) 服务器遇到错误,无法完成请求。 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

HTTP响应报文
image-20211003142859663

开发者工具 — 网络 — 例子

image-20211003143239977

另一个例子 Response 为响应正文,Preview则是预览

image-20211003143121427

HTTP 和 HTTPS 的优缺点

HTTP的不足

  • 通信使用明文 (不加密),可能被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文完整性,所以有可能遭篡改

HTTPS介绍

HTTP 协议中没有加密机制,但可以通过和SSL ( Secure Socket Layer,安全套接层 ) 或 TLS ( Transport Layer Security,安全层传输协议 ) 的组合使用,加密 HTTP的通信内容,属于通信加密,即在整个通信线路中加密

HTTP + 加密 + 认证 + 完整新保护 = HTTPS (HTTP Secure)
image-20211003154700261

HTTP 与 HTTPS 的区别 | 菜鸟教程 (runoob.com)

HTTPS的不足

  • 加密解密过程复杂,导致访问速度变慢
  • 加密需要向认证机构付费
  • 整个页面的请求都要使用https

用户访问网站原理和流程

在网页输入 www.163.com 打开网易首页,整个过程发生了什么的

dns解析流程

IP协议----负责传输

TCP协议 ---- 确保可靠性(三次握手,四次挥手)

DNS服务 ---- 负责域名解析

各种协议与HTTP协议之间的关系