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
报文由报文首部、空行、报文主体构成:
其中的空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成的。
无论是请求报文还是响应报文都需要有报文首部,而报文主体有些请求报文是没有的。而请求报文的一般格式如下:
而响应报文的格式是这样的:
其中最常见的属性如下:
-
URL
, 即http
访问的地址 -
request method
, 报文的请求方式 -
status code
, 状态码以及状态短语 -
Accept Encoding
, 内容编码 -
Connection
, 连接方式 -
Cookie
, 添加的cookie
内容 -
Host
, 目标主机 -
User-Agent
, 客户端浏览器的相关信息 -
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
通过SSL\TLS
进行了加密; -
HTTP
的端口号是80
,HTTPS
是443
; -
HTTPS
需要到CA
申请证书,一般免费证书很少,需要交费; -
HTTP
的连接很简单,是无状态的。而HTTPS
协议则是由SSL+HTTP
; 协议构建的可进行加密传输、身份认证的网络协议,比HTTP
协议安全;
HTTPS
的缺点:
通信的速度变慢,由于需要加密,一个握手就多了好几个往返;
对用户的机器负载的增加。
补充:HTTP协议与TCP协议
TCP
协议对应于传输层,而HTTP
协议对应于应用层,从本质上来说,二者没有可比性。Http
协议是建立在TCP
协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http
请求。Http
会通过TCP
建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http
会立即将TCP
连接断开,这个过程是很短的。所以Http
连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。
6.TCP与UDP的区别
-
TCP
面向连接(如拨打电话要先拨号建立连接);UDP
是无连接的,即发送数据之前不需要建立连接; -
TCP
提供可靠的服务。即通过TCP连接传送的数据,无差错,不重复,且按序到达;UDP
尽最大努力交付,即不保证可靠交付; -
TCP
面向字节流,实际上是把TCP
数据看成一连串无结构的字节流;UDP
是面向报文的,UDP
没有拥塞控制,因此网络上出现拥塞不会使源主机的发送效率降低(对实时应用很有用,如IP电话,实时视频会议等); - 每一条
TCP
连接只能是点到点;UDP
支持一对一,一对多,多对一,多对多的交互通信; -
TCP
的首部开销20
字节;UDP
的首部开销小,只有8
个字节; -
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
数据报进行传输。
部分参考:
https://juejin.im/post/5afad7f16fb9a07abf72ac30?utm_medium=fe&utm_source=weixinqun