HTTP相关知识

Posted lhh520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP相关知识相关的知识,希望对你有一定的参考价值。

1.HTTP的概念

超文本传输协议(HTTP)是用于传输诸如html的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的。 HTTP遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。 HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。虽然通常基于TCP / IP层,但可以在任何可靠的传输层上使用
2.URL和URI
  • URI:uniform resource identifier 统一资源标识符,一种资源的标识,它是一种抽象的资源标识,即可以是相对的,也可以是绝对的。
  • URL:uniform resource location 统一资源定位符,一用来标识抽象或物理资源的一个紧凑字符串。

3.HTTP报文

HTTP报文由报文首部、空行、报文主体构成:

技术分享图片

 

 

 

 

 

 

 

 

 

 

 

 

 

其中的空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成的。

无论是请求报文还是响应报文都需要有报文首部,而报文主体有些请求报文是没有的。而请求报文的一般格式如下:

技术分享图片

而响应报文的格式是这样的:

技术分享图片

 

其中最常见的属性如下:

  1. URL, 即http访问的地址
  2. request method, 报文的请求方式
  3. status code, 状态码以及状态短语
  4. Accept Encoding, 内容编码
  5. Connection, 连接方式
  6. Cookie, 添加的cookie内容
  7. Host, 目标主机
  8. User-Agent, 客户端浏览器的相关信息
  9. Set-Cookie, 指定想要在Cookie中保存的内容

技术分享图片

 

请求方式(request method)——常见GET和POST

GET方法可以用来请求访问已经被URL识别的资源。指定的资源经过服务端解析后返回响应的内容。简单来说,就是请求的资源是文本的话,那么就保持原样返回。

技术分享图片

POST方法可以用来传输实体的主体。

技术分享图片

两者区别:

1.使用目标不同

POST与GET都用于获取信息,但是GET方式仅仅是查询,并不对服务器上的内容产生任何作用结果;每次GET的内容都是相同的。POST则常用于发送一定的内容进行某些修改操作。

2.大小不同

由于不同的浏览器对URL的长度大小有一定的字符限制,因此由于GET方式放在URL的首部中,具体的大小要依浏览器而定。POST方式则是把内容放在报文内容中,因此只要报文的内容没有限制,它的大小就没有限制。

3.安全性不同

上面也说了GET是直接添加到URL后面的,直接就可以在URL中看到内容。而POST是放在报文内部的,用户无法直接看到。

总的来说,GET用于获取某个内容,POST用于提交某种数据请求,从使用场景来看,一般用户注册的内容是私密的,应该使用POST方式来保持私密,而当需要查询某个内容时,需要快速响应,则使用GET。

 

常见status code状态码

  • 200 通常的成功 OK

GET:请求的对应资源会作为响应返回。响应将包含描述或操作的结果。 POST:返回处理对应请求的结果

  • 204 成功处理请求,没有返回任何内容 No Content

表示服务器接收到的请求已经处理完毕,但是服务器不需要返回响应。比如,客户端是浏览器的话,那么浏览器显示的页面不会发生更新。

  • 206 Partial Content

成功处理了部分GET请求

  • 301 Moved Permanently

请求的网页已永久移动到新位置,永久性重定向

  • 302 Found

网站临时性重定向,暂时不能访问(备案、被查)

  • 303 See Other

该状态码表示由于请求对应的资源存在另一个URI,并指定必须使用GET方法定向获取请求的资源。和302不同的是,302是不会改变上次的请求方法

  • 304 Not Modified

访问不了,并返回和上次一样的话,表示资源未被修改过,还是和上次访问时一样。

  • 307 Temporary Redirect

临时重定向,和302、303类似,不同的是,不会指定客户端要用什么样的方法请求,

  • 400 Bad Request

表示客户端中存在语法错误,导致服务器无法理解该请求。客户端需要修改请求的内容后再次发送请求。

  • 401 Unauthorized

即用户没有必要的凭据。该状态码表示当前请求需要用户验证。

  • 403 Forbidden

服务器已经理解请求,但是拒绝执行它。

  • 404 Not Found

服务器找不到请求的网页。

  • 500 Internal Server Error

服务器遇到错误,无法完成请求。

  • 503 Service Unavailable

由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是暂时的.

 

内容编码 Accept Encoding

由于有些报文的内容会过大,为了减少传输时间,HTTP会采取一些压缩的措施,例如上面的报文信息中,Accept-Encoding就定义了内容编码的格式gzip。

总的来说内容编码的格式有以下几种:

  • gzip:GNU压缩格式
  • compress:UNIX系统的标准压缩格式
  • deflate:是一种同时使用了LZ77和哈夫曼编码的无损失压缩格式
  • identity:不进行压缩

 

持久化connection

正常发送HTTP时,我们需要建立TCP的连接,然后再发送报文:

技术分享图片

 

 

如果每次都要发送HTTP报文都需要经历上面的拿过过程,无疑将会耗费很多时间在建立和断开连接的过程中,因此HTTP使用了connection属性,用于指定连接的方式,当当设置成keep-alive时,就会建立一条持久化的连接。这样就不需要每次都建立连接在中断连接:
技术分享图片

 

(HTTP1.1中connection默认开启keep-alive)
 
报文首部总结
技术分享图片

 

4.HTTP方法

HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法(HTTP method)。每 条 HTTP 请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取 一个 Web 页面、运行一个网关程序、删除一个文件等)。下表是一些常见的HTTP方法:
技术分享图片

PUT传输文件

PUT方法用于传输文件,就像FTP协议的上传一样,要求在请求报文的主题中包含文件内容,然后保存到请求URI指定的位置。由于PUT方法不带验证机制,任何人都可以任何人都可以上传文件,存在安全性问题,因此一般的web网站不适用该方法。

 

DELETE删除文件

DELETE方法用来删除文件,是与put相反的方法,DELETE方法按照请求url删除指定的资源。其本质和PUT方法一样不带验证机制,所以建议少用DELETE方法。

 

HEAD获取报文首部

HEAD和GET方法一样,只是不返回报文主体部分,通常用于确认url的有效性及资源更新的日期时间等。

技术分享图片

 

5.HTTPS的概念

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来说就是是HTTP的安全版本,即在HTTP下加入SSL层,HTTPS的安全基石是SSL,因此加密的详细内容就需要SSL。
 由于HTTP有以下几个缺点:
  • 传输的时候使用明文,这显然会被不法者截取干一些见不得人的勾当。
  • 没有认证机制,这样我们就可以伪造一些HTTP访问,这显然会造成一些困扰。比如Jmeter就是典型的例子,伪造一大堆的HTTP URL然后压力测试,这也就是DOS攻击的一种。
  • 无法验证报文的完整性,比如一个HTTP的报文已经被不法者截取并且篡改,而服务器端却无法验证。


HTTP与HTTPS的区别

正是由于以上这些缺点,HTTPS作出了以下一些改变:

  • HTTP 是明文传输,HTTPS 通过 SSLTLS 进行了加密;
  • HTTP 的端口号是 80,HTTPS 是 443;
  • HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费;
  • HTTP 的连接很简单,是无状态的。而 HTTPS 协议则是由 SSL+HTTP; 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全
HTTPS的缺点:
  • 通信的速度变慢,由于需要加密,一个握手就多了好几个往返;
  • 对用户的机器负载的增加。
补充:
HTTP协议与TCP协议
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。
 
TCP与UDP的区别
1.TCP面向连接(如拨打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2.TCP提供可靠的服务。即通过TCP连接传送的数据,无差错,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3.TCP面向字节流,实际上是把TCP数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络上出现拥塞不会使源主机的发送效率降低(对实时应用很有用,如IP电话,实时视频会议等)
4.每一条TCP连接只能是点到点;UDP支持一对一,一对多,多对一,多对多的交互通信
5.TCP的首部开销20字节;UDP的首部开销小,只有8个字节
6.TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道
 
流媒体协议:RTP、RTCP、RTSP、MMS、HLS、HTTP progressive streaming

当前在internet上传送音频和视频等信息主要有两种方式:

  1. 下载,完整下载一个视频,再去播放
  2. 流式传输,如优酷、爱奇艺等视频网址
作用:RTP位于传输层(通常是UDP)之上,应用程序之下,实时语音、视频数据经过模数转换和压缩编码处理后,先送给RTP封装成为RTP数据单元,RTP数据单元被封装为UDP数据报,然后再向下递交给IP封装为IP数据包。这么说RTP是没有保证传输成功的,要保证成功,就要用到RTCP,RTCP消息含有已发送数据的丢包统计和网络拥塞等信息,服务器可以利用这些信息动态的改变传输速率,甚至改变净荷的类型。RTCP消息也被封装为UDP数据报进行传输。
 
 
 
 
部分参考:
https://juejin.im/post/5afad7f16fb9a07abf72ac30?utm_medium=fe&utm_source=weixinqun



以上是关于HTTP相关知识的主要内容,如果未能解决你的问题,请参考以下文章

http协议的相关知识

HTTP缓存原理及相关知识-流媒体主流格式及相关协议

HTTP http相关知识点详解

知识储备相关

HTTP缓存原理及相关知识-CDN

Node.js——HTTP相关知识