学习HTTP相关知识笔记

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报文由报文首部、空行、报文主体构成:

《学习HTTP相关知识笔记》

其中的空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成的。
无论是请求报文还是响应报文都需要有报文首部,而报文主体有些请求报文是没有的。而请求报文的一般格式如下:

《学习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中保存的内容

《学习HTTP相关知识笔记》

请求方式(request method)——常见GETPOST

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

《学习HTTP相关知识笔记》

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

《学习HTTP相关知识笔记》

两者区别:

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
临时重定向,和302303类似,不同的是,不会指定客户端要用什么样的方法请求,

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报文都需要经历上面的拿过过程,无疑将会耗费很多时间在建立和断开连接的过程中,因此HTTP使用了connection属性,用于指定连接的方式,当当设置成keep-alive时,就会建立一条持久化的连接。这样就不需要每次都建立连接在中断连接:

《学习HTTP相关知识笔记》

HTTP1.1connection默认开启keep-alive
报文首部总结

《学习HTTP相关知识笔记》

4.HTTP方法

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

下表是一些常见的HTTP方法:

《学习HTTP相关知识笔记》

PUT传输文件

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

DELETE删除文件

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

HEAD获取报文首部

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

《学习HTTP相关知识笔记》

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 通过 SSL\TLS 进行了加密;
  • HTTP 的端口号是 80HTTPS443
  • HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费;
  • HTTP 的连接很简单,是无状态的。而 HTTPS 协议则是由 SSL+HTTP; 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全;

HTTPS的缺点:

通信的速度变慢,由于需要加密,一个握手就多了好几个往返;

对用户的机器负载的增加。

补充:HTTP协议与TCP协议

TCP协议对应于传输层,而
HTTP协议对应于应用层,从本质上来说,二者没有可比性。
Http协议是建立在
TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次
Http请求。
Http会通过
TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,
Http会立即将
TCP连接断开,这个过程是很短的。所以
Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。

6.TCP与UDP的区别

  1. TCP面向连接(如拨打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接;
  2. TCP提供可靠的服务。即通过TCP连接传送的数据,无差错,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;
  3. TCP面向字节流,实际上是把TCP数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络上出现拥塞不会使源主机的发送效率降低(对实时应用很有用,如IP电话,实时视频会议等);
  4. 每一条TCP连接只能是点到点;UDP支持一对一,一对多,多对一,多对多的交互通信;
  5. TCP的首部开销20字节;UDP的首部开销小,只有个字节;
  6. TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道;

7.流媒体协议:

RTP、RTCP、RTSP、MMS、HLS、HTTP progressive streaming
当前在internet上传送音频和视频等信息主要有两种方式:
下载,完整下载一个视频,再去播放
流式传输,如优酷、爱奇艺等视频网址

作用:
RTP位于传输层(通常是
UDP)之上,应用程序之下,实时语音、视频数据经过模数转换和压缩编码处理后,先送给
RTP封装成为
RTP数据单元,
RTP数据单元被封装为
UDP数据报,然后再向下递交给
IP封装为
IP数据包。这么说
RTP是没有保证传输成功的,要保证成功,就要用到
RTCP
RTCP消息含有已发送数据的丢包统计和网络拥塞等信息,服务器可以利用这些信息动态的改变传输速率,甚至改变净荷的类型。
RTCP消息也被封装为
UDP数据报进行传输。

《学习HTTP相关知识笔记》

部分参考:
https://juejin.im/post/5afad7…

    原文作者:HTTP
    原文地址: https://segmentfault.com/a/1190000018032185
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞