HTTP相关知识
1.HTTP的概念
- 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的连接,然后再发送报文:
![](https://img2018.cnblogs.com/blog/1332080/201901/1332080-20190115150004847-1627686626.png)
(HTTP1.1中connection默认开启keep-alive)
![](https://img2018.cnblogs.com/blog/1332080/201901/1332080-20190115150057410-1409419882.png)
4.HTTP方法
![](https://img2018.cnblogs.com/blog/1332080/201901/1332080-20190115150156841-1552042708.png)
PUT传输文件
PUT方法用于传输文件,就像FTP协议的上传一样,要求在请求报文的主题中包含文件内容,然后保存到请求URI指定的位置。由于PUT方法不带验证机制,任何人都可以任何人都可以上传文件,存在安全性问题,因此一般的web网站不适用该方法。
DELETE删除文件
DELETE方法用来删除文件,是与put相反的方法,DELETE方法按照请求url删除指定的资源。其本质和PUT方法一样不带验证机制,所以建议少用DELETE方法。
HEAD获取报文首部
HEAD和GET方法一样,只是不返回报文主体部分,通常用于确认url的有效性及资源更新的日期时间等。
5.HTTPS的概念
- 传输的时候使用明文,这显然会被不法者截取干一些见不得人的勾当。
- 没有认证机制,这样我们就可以伪造一些HTTP访问,这显然会造成一些困扰。比如Jmeter就是典型的例子,伪造一大堆的HTTP URL然后压力测试,这也就是DOS攻击的一种。
- 无法验证报文的完整性,比如一个HTTP的报文已经被不法者截取并且篡改,而服务器端却无法验证。
正是由于以上这些缺点,HTTPS作出了以下一些改变:
- HTTP 是明文传输,HTTPS 通过 SSL\TLS 进行了加密;
- HTTP 的端口号是 80,HTTPS 是 443;
- HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费;
- HTTP 的连接很简单,是无状态的。而 HTTPS 协议则是由 SSL+HTTP; 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全
- 通信的速度变慢,由于需要加密,一个握手就多了好几个往返;
- 对用户的机器负载的增加。
当前在internet上传送音频和视频等信息主要有两种方式:
- 下载,完整下载一个视频,再去播放
- 流式传输,如优酷、爱奇艺等视频网址