前言:作为一个应届毕业生,我在最近面试过程中,经常会被问到是否了解HTTP协议,在经过多渠道了解之后,想做一个简单的总结,希望能对大家有帮助吧!!!
HTTP协议
1、定义:HTTP(Hypertext transfer protocol)超文本传输协议,通过浏览器和服务器进行数据交互,进行超文本(文本、图片、视频等)传输的规定。简而言之,HTTP协议规定了超文本传输所要遵守的规则。
2、HTTP协议的特点:
1)HTTP协议是无状态的:也就是说每一次的HTTP请求都是独立的,任何两个请求之间没有什么必然的联系。但是实际应用当中并不是完全都是这样,可以引入Cookie和Session机制来关联请求。
2)多次HTTP请求:在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先相应的是HTML页面,如果发现代码中存在Link标签,则会向服务器请求相应的CSS、JS代码;继续加载HTML中body标签里的代码,渲染页面;如果此时发现有img标签,会向服务器请求下载,但是这个过程和渲染页面是属于同步的;当服务器返回下载的图片,由于图片占用一定的体积,影响了页面布局,浏览器会重新加载这段代码;当发现script标签,立即执行,执行过程中如果发现有类似display:none/block等控制元素显示隐藏的代码会重新渲染页面,知道发现完整的html标签。目前的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。
3)基于TCP协议:HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互的行为,并不负责数据传输的细节。底层是基于TCP实现的。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求一个TCP连接。
3、HTTP报文
1)请求报文
2)代码示例:
简单来说响应报文由状态行、响应首部字段(响应头)、响应实体组成,其中第一行是状态行,依次包含HTTP版本,状态码和状态短语组成;在一个回车换行之后是响应头,也是键值对的形式,字段名:值;然后会有一个空行也包含回车换行,之后是响应实体,就是要传输的数据。在上面的例子当中就是一个非常简单的HTML页面。对于响应状态码,首部字段键值对稍后会有更加详细的说明。
4、HTTP请求方法
请求方法是客户端用来告知服务器其动作意图的方法。就像下达命令一样。在HTTP1.1版本中支持GET、POST等近10种方法。需要注意的是方法名区分大小写,需要用大写字母。下面详细说明。
1)GET:获取资源:GET方法用来请求访问已被URI识别的资源。也就是指定了服务器处理请求之后响应的内容。
2)POST:传输实体主体:POST方法用来传输实体主体。POST与GET的区别之一就是目的不同,二者之间的区别会在文章的最后详细说明。虽然GET方法也可以传输,但是一般不用,因为GET的目的是获取,POST的目的是传输。
3)PUT:传输文件:PUT方法用来传输文件。类似FTP协议,文件内容包含在请求报文的实体中,然后请求保存到URL指定的服务器位置。
4)HEAD:获得报文首部:HEAD方法类似GET方法,但是不同的是HEAD方法不要求返回数据。用于确认URI的有效性及资源更新时间等。
5)DELETE:删除文件:DELETE方法用来删除文件,是与PUT相反的方法。DELETE是要求返回URL指定的资源。
6)OPTIONS:询问支持的方法:因为并不是所有的服务器都支持规定的方法,为了安全有些服务器可能会禁止掉一些方法例如DELETE、PUT等。那么OPTIONS就是用来询问服务器支持的方法。
7)TRACE:追踪路径:TRACE方法是让Web服务器将之前的请求通信环回给客户端的方法。这个方法并不常用。
8)CONNECT:要求用隧道协议连接代理:CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL/TLS协议对通信内容加密后传输。
5、HTTP常见状态码
200:一切正常
301:当客户端触发的动作引起了资源URI的变化时发送此响应代码
400:客户端问题
500:服务器出问题
404 用于服务器端不知道客户端要请求哪个资源的情况;
410用于服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了的情况。
409当客户端试图执行一个会导致一个或多个资源处于不一致状态的操作时