HTTP 协议及基本概念

HTTP 协议

什么是 HTTP 协议

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网( World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP 是一个基于 TCP/IP 通信协议来传递数据( HTML 文件, 图片文件, 查询结果等 )。

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

HTTP 协议工作于客户端-服务端架构为上。浏览器作为 HTTP 客户端通过 URLHTTP 服务端即 WEB 服务器发送所有请求。WEB 服务器根据接收到的请求后,向客户端发送响应信息。

特点

简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GETPOSTHEADPUT 等等。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。

灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。

无连接:一次请求一次连接。服务器处理完客户的请求,并收到客户的应答后,即断开连接。

无状态:在 HTTP 协议中,客户端的每次请求,对于服务端来说,都是一次新的请求。

多种模式:支持 B/SC/S 模式。

如何标志网络中的资源

URI

URIUniform Resource Identifier,统一资源标志符,用来唯一的标识一个资源,最常见形式是统一资源定位符。Web 上可用的每种资源如 HTML 文档、图像、视频片段、程序等都是通过 URI 来标志的 URI 一般由三部组成:

  • 访问资源的命名机制

  • 存放资源的主机名

  • 资源自身的名称,由路径表示,着重强调于资源。

URL

URLUniform Resource Locator,统一资源定位符,它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

https://developer.mozilla.org
https://developer.mozilla.org/en-US/docs/Learn
https://developer.mozilla.org/en-US/search?q=URL

采用 URL 可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL 一般由三部组成:

  • 协议

  • 存有该资源的主机IP地址(有时也包括端口号)

  • 主机资源的具体地址。如目录和文件名等

URN

URNUniform Resource Name,统一资源命名符,是通过名字来标识资源。URN urn:isbn:0-395-36341-1

URI 是以一种抽象的,高层次概念定义统一资源标识,而 URLURN 则是具体的资源标识的方式。URLURN 都是一种 URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 ( URN ),它命名资源但不指定如何定位资源。上面的 isbn 都是 URN 的示例。

URI 与 URL 和 URN 之间的关系

引用

URI 可被视为定位符( URL ),名称( URN )或两者兼备。统一资源名URN )如同一个人的名称,而统一资源定位符URL )代表一个人的住址。换言之,URN 定义某事物的身份,而 URL 提供查找该事物的方法。

用于标识唯一书目的 ISBN 系统是一个典型的URN使用范例。例如,ISBN 0-486-27557-4 无二义性地标识出莎士比亚的戏剧《 罗密欧与朱丽叶 》的某一特定版本。为获得该资源并阅读该书,人们需要它的位置,也就是一个 URL 地址。在 类Unix 操作系统中,一个典型的URL地址可能是一个文件目录,例如file:///home/username/RomeoAndJuliet.pdf。该 URL 标识出存储于本地硬盘中的电子书文件。因此,URLURN 有着互补的作用。

请求 / 响应 模型

request

客户端发送一个 HTTP 请求到服务器的请求消息包括以下格式:

请求行、请求头部、空行和请求体四个部分组成。

以下为 GET 请求报文:

GET /index.html?a=1&b=2 HTTP/1.1
Host: localhost.charlesproxy.com:3000
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: _ga=GA1.2.448607888.1557887884; _gid=GA1.2.2022442462.1557887884
Connection: keep-alive
  • 1 行为 请求行,用来说明请求类型 ( GET ),要访问的资源( /index.html?a=1&b=2 )以及所使用的 HTTP 版本( HTTP/1.1 )。

  • 从第 2 行开始,也就是紧接着请求行(即第一行)之后的部分,是 请求头,用来说明服务器要使用的附加信息。

    • HOST :服务器的域名。

    • User-Agent :浏览器的浏览器身份标识字符串

    • Accept:能够接受的回应内容类型( Content-Types )。参见内容协商

    • Accept-Encoding:能够接受的编码方式列表。参考HTTP压缩

    • Accept-Language:能够接受的回应内容的自然语言列表。参考 内容协商

    • Cookie:之前由服务器通过 Set- Cookie 发送的一个 超文本传输协议 Cookie

    • Connection:该浏览器想要优先使用的连接类型。

  • 10 行为空行,实际上有回车符和换行符。

  • 11 行为请求体,因为这次请求为 GET,请求的参数保存在请求行的 URL 中。即使是没有数据也必须有空行。

以下为 POST 请求报文:

POST /users/login HTTP/1.1
Host: localhost.charlesproxy.com:3000
Content-Length: 43
Accept: application/json, text/plain, */*
Origin: http://localhost.charlesproxy.com:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://localhost.charlesproxy.com:3000/index.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: _ga=GA1.2.448607888.1557887884; _gid=GA1.2.2022442462.1557887884
Connection: keep-alive

{"username":"zhangsan","password":"111111"}

POST 类型的请求,参数是保存在请求体中。

状态码

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

请求类型

HTTP 事务

HTTP 事务用来描述一次完整的从请求到响应的过程:

① 到用户发起请求时,首先进行域名解析

② 拿到域名所对应的 IP 地址之后,通过 TCP 协议建立与服务端的通信连接。( 三次握手,建立连接 )

③ 服务接收到用户请求之后,进行业务处理,随后将请求之后的结果返回给浏览器

④ 浏览器接收到后台的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值