HTTP协议简介

  1. 超文本传输协议是一种用于分布式,协作式和超媒体信息系统的应用层协议,HTTP是万维网的数据通信的基础
  2. 蒂姆·伯纳斯-李提交
  3. 1999年6月发布——HTTP1.1
  4. 2015年5月发布 HTTP/2 取代HTTP1.1

HTTP协议概述

  1. HTTP是一个客户端(终端,客户端)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器或者其他工具,客户端发起一个HTTP请求到服务器上指定端口。我们称这个客户端为用户代理程序(user agent)。应答服务器上存储着一些资源,比如js,css,html,图片之类。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器,网关,隧道
  2. 尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或者它支持的层,事实上,HTTP可以在任何互联网协议上,或者其他网络上实现。HTTP假定其下层协议提供可靠的传输,因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层
  3. 通常由HTTP客户端发起一个请求,创建一个到服务器指定端口的TCP链接,HTTP服务器则在哪个端口监听客户端的请求,一旦收到请求,服务器端会向客户端返回一个状态,比如:‘HTTP/1.1 200 ok’,以及返回的内容

HTTP工作原理

	HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及夫区其如何把Web页面传送到客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文(包含请求方法,URL,协议版本,请求头部和请求数据),服务器以一个状态行作为响应(包括协议版本,成功or错误代码,服务器信息,响应头部和响应数据)
HTTP请求/响应的步骤
  1. 客户端链接到Web服务器
  2. 发送HTTP请求(客户端向服务器发送一个文本的请求报文)
  3. 服务器接收请求并返回HTTP响应(解析请求,定位资源)
  4. 释放链接TCP链接,若链接(connection)模式为close,则服务器主动关闭链接,客户端被动关闭链接,释放TCP请求。若链接模式为keepalive,则这个链接会保持一段时间,在该时间内可以继续接受请求
  5. 客户端浏览器解析HTML内容。客户端首先解析状态行,查看是否成功,然后解析每一个响应头。
在浏览器输入网址按下回车后发生了什么?
  1. 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址
  2. 解析出IP地址后,根据该IP地址和默认端口,与服务器建立TCP链接
  3. 浏览器发出读取文件的HTTP请求(URL域名后对应的文件),该请求报文作为TCP三次握手的第三个报文的数据发送给服务器
  4. 服务器对浏览器请求做出响应,并把对应的文件发送给浏览器
  5. 释放TCP链接
  6. 浏览器使用该文件

在这里插入图片描述
HTTP协议是基于TCP/IP协议之上的应用层协议
基于 请求-响应 的模式

  • HTTP协议规定,请求从客户端发出,最后在服务器端响应并返回。换句话说,HTTP请求肯定是先从客户端开始建立通信的

在这里插入图片描述
无状态保存

  1. HTTP是一种不保存状态(无状态stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存,也就是说在HTTP这个级别,协议对于发送过的请求或者响应都不做持久化处理
  2. 使用HTTP协议,每当有新的请求发送时,就会有对应的响应产生。协议并不保存之前一切的请求或者响应报文信息。HTTP/1.1虽然是无状态协议,但是为了实现保持状态功能,于是引入了Cookie技术,有了Cookie再用HTTP协议就可以管理状态了

无连接
3. 无连接的含义是限制每次链接值处理一个请求。服务器初恋完客户端请求后就会断开连接,目的是为了节省传输时间,并且可以提高并发性能。
4. 无连接第一种方式:早期的HTTP协议是一个请求一个响应之后,直接就断开了
5. 无连接第二种方式:现在的HTTP/1.1协议不是直接断开了,而是等待几秒钟,如果这几秒钟之内还有新的请求,那么还是通过这个通道来收发消息,目的是为了减少短时间内建立连接的次数

HTTP请求方法

HTTP/1.1协议中定义了8中方法(动作)至少实现GET和HEAD请求

  1. GET 请求的内容拼接在URL地址后面,数据大小也有限制,所以使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中
  2. POST 向指定资源提交数据,请求服务器进行处理(提交表单)。数据被包含在请求体文本中
  3. HEAD 和GET方式差不多,都是向服务器发出指定资源的请求,只不过服务器将不穿会资源的本文部分。使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(原信息,元数据)
  4. PUT 向指定资源位置上传其最新内容
  5. DELETE 请求服务器删除Request-URL(请求)所标识的资源
  6. TRACE 会显示服务器受到的请求,主要用于测试或者诊断
  7. OPTIONS 让服务器返回该资源所支持的所有HTTP请求方法。用" * "来代替资源的名称,向Web服务器发送这个请求,可以测试服务器功能是否正常运作
  8. CONNECT HTTP/1.1中预留给能够将链接改为管道方式的代理服务器,通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)

HTTP状态码

所有HTTP响应的第一行都是状态码,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔
状态码的第一个数字代表当前响应的类型

  • 1xx消息——请求已被服务器接收,继续处理
  • 2xx成功——请求已成功被服务器接收、理解、并接受
  • 3xx重定向——需要后续操作才能完成这一请求
  • 4xx请求错误——请求含有词法错误或者无法被执行
  • 5xx服务器错误——服务器在处理某个正确请求时发生错误

虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK",“404 Not Found”,但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。
在这里插入图片描述

URL

HTTP的统一资源定位符将从因特网获取信息的5个基本元素包括在一个简单的地址中

  • 传送协议
  • 层级URL标记符号(/ ,固定不变)
  • 访问资源需要的凭证信息(可省略)
  • 服务器(域名orIP地址)
  • 端口号(80可省略)
  • 路径(以/区别每个目录)
  • 查询(GET模式,以?为起点,参数以&隔开,在以=分开参数名称和数据)
  • 片段(以#为起点)

例子 http://www.baidu.com:80/news/index.html?id=250&page=1

  • http => 协议
  • www.baidu.com => 服务器
  • 80 => 端口号
  • /news/index.html => 对应资源路径
  • ?id=250&page=1 => 查询

由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分,比如 www。从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地址是否通,服务器必须完成重定向的任务。

HTTP请求格式(请求协议)

在这里插入图片描述
URL包含:/index/index2?a=1&b=2;路径和参数都在这里。
在这里插入图片描述

HTTP响应格式(相应协议)

在这里插入图片描述
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐