内容简介:超文本传输协议(
HTTP相关知识
1.HTTP的概念
超文本传输协议( HTTP
)是用于传输诸如 HTML
的超媒体文档的应用层协议。它被设计用于 Web
浏览器和 Web
服务器之间的通信,但它也可以用于其他目的。 HTTP
遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。 HTTP
是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。虽然通常基于 TCP / IP
层,但可以在任何可靠的传输层上使用
2.URL和URI
URI URL
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
数据报进行传输。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
XForms Essentials
Micah Dubinko / O'Reilly Media, Inc. / 2003-08-27 / USD 29.95
The use of forms on the Web is so commonplace that most user interactions involve some type of form. XForms - a combination of XML and forms - offers a powerful alternative to HTML-based forms. By pro......一起来看看 《XForms Essentials》 这本书的介绍吧!