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

其中的空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成的。
不管是请求报文仍是响应报文都须要有报文首部,而报文主体有些请求报文是没有的。而请求报文的通常格式以下:浏览器

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

其中最多见的属性以下:服务器

  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)——常见GETPOSTcookie

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

POST方法能够用来传输实体的主体。网络

二者区别:ide

1.使用目标不一样
POSTGET都用于获取信息,可是 GET方式仅仅是查询,并不对服务器上的内容产生任何做用结果;每次 GET的内容都是相同的。 POST则经常使用于发送必定的内容进行某些修改操做。
2.大小不一样
因为不一样的浏览器对 URL的长度大小有必定的字符限制,所以因为 GET方式放在 URL的首部中,具体的大小要依浏览器而定。 POST方式则是把内容放在报文内容中,所以只要报文的内容没有限制,它的大小就没有限制。
3.安全性不一样
上面也说了 GET是直接添加到 URL后面的,直接就能够在 URL中看到内容。而 POST是放在报文内部的,用户没法直接看到。

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

常见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使用了connection属性,用于指定链接的方式,当当设置成keep-alive时,就会创建一条持久化的链接。这样就不须要每次都创建链接在中断链接:

HTTP1.1connection默认开启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获取报文首部
HEADGET方法同样,只是不返回报文主体部分,一般用于确认 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 经过 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是没有保证传输成功的,要保证成功,就要用到 RTCPRTCP消息含有已发送数据的丢包统计和网络拥塞等信息,服务器能够利用这些信息动态的改变传输速率,甚至改变净荷的类型。 RTCP消息也被封装为 UDP数据报进行传输。

欢迎关注

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

相关文章
相关标签/搜索