什么是http协议

版权声明:内容版权为CSDN用户:kayseen 所有,若您需要引用、转载,需要注明来源及原文链接 https://blog.csdn.net/m0_43394876/article/details/88776089

1.什么是http协议

1. HTTP协议简介

HTTP协议就是超文本传输协议(HyperText Transfer Protocol),通俗理解是浏览器和web服务器传输数据格式的协议,HTTP协议是一个应用层协议。

HTTP协议是基于TCP协议的,发送数据之前需要建立好连接

2. 网络传输-TCP/IP四层模型

TCP/IP模型又称为TCP/IP协议族,是一系列网络协议的总称。TCP/IP模型一共包括几百种协议,制作协议的目的,就是保证计算机之间可以进行按照一定格式进行数据通信。

  1. 链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡.
  2. 网络层:处理分组在网络中的活动,比如分组的选路.
  3. 运输层:主要为两台主机上的应用提供端到端的通信.
  4. 应用层:负责处理特定的应用程序细节.

在这里插入图片描述

3.浏览器请求一个网站的通信过程

  1. 用户输入网址.
  2. 浏览器请求DNS服务器, 获取域名对应的IP地址.
  3. 请求连接该IP地址服务器.
  4. 发送资源请求. (HTTP协议)
  5. web服务器接收到请求, 并解析请求, 判断用户意图.
  6. 获取用户想要的资源.
  7. 将资源返回给web服务器程序.
  8. web服务器程序将资源数据通过网络发送给浏览器.
  9. 浏览器解析请求的数据并且完成网页数据的显示.

网址是什么呢?

网址有称为URL,URL的英文全拼是(Uniform Resoure Locator),表达的意思是统一资源定位符,通俗理解就是网络资源地址。

URL的组成部分大概分为三部分:

  • 协议部分
  • 域名部分
  • 资源路径部分

比如: http://news.china.com.cn/2018-06/12/content_52060465.htm URL的格式为: http://: 协议部分,news.china.com.cn: 域名部分,/2018-06/12/content_52060465.htm:资源路径部分

2.请求报文的内容

HTTP请求报文可以分为GET请求和POST请求报文,要注意的是GET请求没有请求体,POST请求有请求体信息

在浏览器的调试模式中, Request Headers 中就是请求的报文数据内容. 下面就是我们要请求的报文示例数据:

GET / HTTP/1.1
Host: localhost:10000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
  1. GET / HTTP/1.1 叫做请求行. 里面包含3个信息, 以空格隔开,
    • 第一个叫做请求方法, 除了 GET 方法之外, 还有 POST 方法, 除此之外还有其他方法, 这两种最常用. GET 主要用于从服务器获得数据, POST 主要用于从浏览器提交数据到服务器. 比如像百度首页提供的上传图片的功能, 就是用POST方式.
    • 第二个表示请求的资源路径. 当请求的URL是<https://www.baidu.com/>, 那么我们会发现 路径会显示 ‘/’, 那么如果请求的URL是<https://www.baidu.com/index.html>, 我们会发现路径显示是 ‘/index.html’.
    • 第三个表示 HTTP 协议的版本, 那么既然有 1.1版本, 前置版本肯定是1.0了,那么两个版本有什么区别呢? 1.1版本比1.0的版本主要多个一些请求方法等扩充协议的内容.

问题: 如果用户请求路径是https://www.baidu.com/abc.png, 那么资源路径会显示为什么呢?

  1. 请求头. 除了第一行之外, 剩下的所有数据的格式都是类似的.
    • Host 表示浏览器要请求的主机地址. 这是我们查看下 baidu.com itcastcpp.cn, 请求不同的网站, 会有不同的主机地址.
    • Connection 表示浏览器和服务器之间的连接方式, 浏览器和服务器连接是长连接还是短连接, 稍后会讲解.
    • User-Agent 用户代理, 我们使用谷歌浏览器和火狐浏览器分别请求百度, 那么会发现 User-Agent 的值是不一样的, 它主要是用于浏览器告诉服务器自己的身份, 比如浏览器端使用的操作系统是什么版本, 浏览器是什么版本等等. 服务器端为什么需要知道这个信息呢? 我们后面会讲到爬虫,爬虫程序主要是从服务器端获取数据, 那么服务器端就会有反爬机制, 服务器不希望爬虫来获取数据, 所以通过该项可以知道客户端是否是爬虫程序. 如果爬虫程序想伪装成一个浏览器的请求, 就必须设置此项.
    • Accept 表示浏览器告诉服务器, 自己能够接收并识别的文件类型.
    • Accept-Encoding 表示浏览器能够处理的压缩方式. 为什么需要压缩呢? 当网页数据量大的时候, 压缩之后可以提高传输速率, 提高用户体验.
    • Accept-Language 浏览器可以接收的文本语言, 如果非中文编码可能会出现乱码

在这里插入图片描述

3.HTTP 响应报文协议分析

如何使用开发者工具查看请求报文, 以请求 Baidu.com 为例:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 14 Mar 2018 09:52:48 GMT
Server: BWS/1.1
  • 第一行 HTTP/1.1 200 OK 叫做响应行, 共分成3部分, 第一部分 HTTP/1.1 表示 HTTP协议的版本, 第二部分是一个数字, 这个数字表示响应状态码, 用户向服务器发出了请求, 如果服务器正常返回响应报文, 那么状态码一般都是200, 第三部分的 “OK” 表示原因短语, 表示对前面状态码的简单描述. 这里需要说的是, 响应的状态码除了 200 之外, 还有其他的状态码, 下面是常见的状态码:

    • 302 redirect, 我们通过 302 状态码可以指示浏览器跳转到某一个 URL.
    • 404 NOT FOUND, 当我们访问一个不存在的 URL 时, 一般会返回404状态码, 告诉浏览器, 你访问的 URL 是不存在的.
    • 500 Internal Server Error, 服务器遇到了一个未曾预料的状况, 导致了它无法完成对请求的处理. 一般来说, 这个问题都会在服务器端的源代码出现错误时出现.
  • 第二行下面的所有内容, 我们叫做响应头. Content-Type 表示响应内容的文本格式和编码方式.

小结

在这里插入图片描述

HTTP协议响应报文分为4部分,每部分之间使用\r\n进行分割

  • 响应行
  • 响应头
  • 空行(\r\n)
  • 响应体

4.长连接和短连接

HTTP/1.0中, 默认使用的是短连接.也就是说, 浏览器和服务器每进行一次HTTP操作, 就建立一次连接, 但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的 Web 页中包含有其他的Web资源,如js文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:

Connection:keep-alive

在真正的读写操作之前,server与client之间必须建立一个连接,

当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,

连接的建立通过三次握手,释放则需要四次握手,

所以说每个连接的建立都是需要资源消耗和时间消耗的。

1. TCP短连接

模拟一种TCP短连接的情况:

  1. client 向 server 发起连接请求
  2. server 接到请求,双方建立连接
  3. client 向 server 发送消息
  4. server 回应 client
  5. 一次读写完成,此时双方任何一个都可以发起 close 操作

在步骤5中,一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。

从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作!

2. TCP长连接通信过程

  1. client 向 server 发起连接
  2. server 接到请求,双方建立连接
  3. client 向 server 发送消息
  4. server 回应 client
  5. 一次读写完成,连接不关闭
  6. 后续读写操作…
  7. 长时间操作之后client发起关闭请求

3. TCP长/短连接的优点和缺点

  • 长连接可以省去较多的TCP建立和关闭的操作,节约时间。但是如果用户量太大容易造成服务器负载过高最终导致服务不可用
  • 短连接对于服务器来说实现起来较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但是如果用户访问量很大, 往往可能在很短时间内需要创建大量的连接,造成服务器响应速度过慢

小结

  • 长连接: 连接建立成功后,可以发送多次请求和响应,等双方不进行通信的时候,服务端做好断开连接的操作
  • 短连接: 连接建立成功后,一次请求和响应完成以后连接就会断开,每次发送请求需要先建立好连接
  • 长连接减少了用户的等待时间,提升了访问速度,但是增加了服务端的资源开销
  • 短连接不会占用服务端过多的资源,但是增加了用户的等待时间,减慢了访问速速

猜你喜欢

转载自blog.csdn.net/m0_43394876/article/details/88776089