Http协议的讲解(面试相关)


HTTP协议的背景

超文本传输协议是一个简单的请求-响应协议,它通常运行在TCP之上,是互联网上应用最为广泛的一种网络协议。HTTP协议诞生之初主要是应用与WEB端内容获取。
特点:

  • 简单快速。客户向服务器请求服务时,只需传送请求的方法和路径。请求的方法常用的有GET、HEAD、POST、DELETE。每一种方法规定了客户与服务器练习的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活。HTTP协议允许传输任意类型的数据,如json格式数据、表单数据、xml、文件流等待,需要在HTTP报文中指明Content-Type的类型。
  • 无连接。即限制每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后,就会断开连接。采用这种方法可以节省传输时间。
  • 无状态。无状态是指协议对于事务处理没有记忆的能力。缺少状态意味着如果后续处理需要钱买你的信息,则需要重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答会比较快。
    支持B/S和C/S模式。HTTP协议时应用层协议,是TCP/IP协议族内众多协议中的一员,是在TCP协议基础上建立的。HTTP发起请求时,通过底层TCP协议将客户机和服务器连接起来建立通信通道,并进行相应的服务。

缺点:

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

了解TCP协议可以参考这篇博客:TCP/UDP协议的概念及区别

HTTP工作过程

在这里插入图片描述

1、首先,客户端会向服务器发送请求消息。请求消息中包含的内容是“对什么”和“进行怎样的操作”两个部分。其中相当于“对什么”的部分称为 URI。

  • 一般来说,URI 的内容是一个存放网页数据的文件名或者是一个 CGI 程序 的文件名。(例如“/dir1/file1.html“ “/dir1/program1.cgi”等 。不过,URI 不仅限于此,也可以直接使用“http:”开头的 URL来作为 URI。)换句话说:这里可以写各种访问目标,这些访问目标统称为URI。
  • 而对于接下来“进行怎样的操作”的部分称为方法 (更经常听到可能是请求方式)。方法表示需要让Web 服务器完成怎样的工作。(典型的例子包括读取 URI 表示的数据、将客户端输入的数据发送给 URI 表示的程序等。)

2、收到请求消息之后,Web 服务器会对其中的内容进行解析,通过 URI和方法来判断“对什么”“进行怎样的操作”,并根据这些要求来完成自己的工作,然后将结果存放在响应消息中。在响应消息的开头有一个状态码,它用来表示操作的执行结果是成功还是发生了错误。状态码后面就是头字段和网页数据。

HTTP的请求方式

方法 含义
GET 获取URI指定的信息。如果URI指定的是文件,则返回文件的内容,如果URI指定的时CGI程序,则返回该程序的输出数据。
POST 从客户端向服务器发送数据。一般用于发送表单中填写的数据等情况下
HEAD 和GET请求基本相同,不过它只返回HTTP的消息头,而并不返回数据的内容。用于获取文件最后更新时间等属性信息
OPTIONS 允许客户端查看服务器的内容
PUT 替换URI指定的服务器上文件。如果URI指定的文件不存在,则创建该文件
DELETE 删除URI指定的服务器上的文件
TRACE 将服务器收到的请求行和头部直接放回给客户端。用于在使用代理的环境中检查改写请求的情况
CONNECT 使用代理传输加密消息时使用的方法

HTTP1.0定义了GET、POST、HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 和 CONNECT 方法。

GET与POST的区别

  • GET和POST本质上就是TCP链接。但是Get发送的数据大多只有两k字节,(现在有的浏览器可以达到7k多字节),如果表单中的数据超过这一长度,则必须使用Post方法来发送。如果你使用Get请求在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到。另外POST方式传递的数据不受这个长度影响,它的值通过浏览器header传输而不是url。
  • GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100状态码,可以继续后,浏览器再发送data,服务器响应200(返回数据)。

概括:

GET POST
url可见性 参数可见 参数不可见
数据传输上 通过拼接url进行参数传递 通过body体传输参数
缓存性 可以缓存 不可以缓存
后退页面的反应 不产生影响 会重新提交请求
传输数据的大小 一般不超过2k-4k(浏览器不同,限制不一样) 根据配置文件php.ini设定,可以无限大
安全性 相对post请求不安全 相对get请求安全
数据报 一个TCP数据包 两个TCP数据包

注:并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

HTTP请求报文

客户端向服务器发送请求消息,请求消息的第一行称为请求行。而请求行的重点就是开头的方法(请求方式)。它告诉服务器应该进行怎样的操作。(发送请求消息,不一定是在浏览器顶部的地址栏中输入url地址。通过网页中的提交,或者超级链接等都可触发浏览器发送请求消息)。
在这里插入图片描述

  • 第一行为请求行,写好方法后加一个空格,然后写URI。(一般是文件名和程序的路径名。如:/< 目录名 >/…/< 文件名 >)最后再写上Http版本号。表示信息是由什么版本的Http规格编写的。
  • 第二行开始为消息头部分:尽管通过第一行我们就可以大致理解请求的内容,但有些情况下还需要一些额外的详信息,而消息头的功能就是用来存放这些信息。(消息头的规格中定义了很多项目,如日期、客户端支持的数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等。)
  • 写完消息头之后,还需要添加一个完全没有内容的空行,然后写上需要发送的数据。这一部分称为消息体,也就是消息的主体。
    具体应用场景:
    在这里插入图片描述

HTTP中主要的头字段

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

HHTP状态码概要

状态码的第一位数字表示状态类型,第二第三数字表示具体的情况。下表列举了第一位数字的含义。

状态码 含义
1xx 告知请求的处理进度和情况
2xx 成功
3xx 表示需要进一步的操作
4xx 客户端错误
5xx 服务器错误

HTTPS及HTTPS和HTTP的区别

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

HTTPS和HTTP的区别:

  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

猜你喜欢

转载自blog.csdn.net/weixin_45893787/article/details/125919340
今日推荐