HTTP

2016-12-16  本文已影响85人  饥人谷_任磊

问答

1.OSI七层模型指什么?
模型对比.png
2.HTTP的工作原理是什么?

在说明HTTP的工作原理之前,要先介绍在TCP/IP协议族中与HTTP协议密不可分的3个协议。

结合以上三种协议,具体的HTTP协议的通信过程可以用下图表示:


http.jpg
3.URI的格式是什么?常见的协议有哪些?

URI是Uniform Resource Identifier的缩写,它指的是某个协议方案表示的资源定位标识符
协议方案指的是访问资源所使用的协议类型名称。常用的协议有http,https、file,mailto,telnet等。

URI有两个子集,分别是URL(uniform resource location)统一资源定位符和URN(uniform resource name)统一资源命名。我们更常用的是URL,关于URI和URL的关系可以这么理解:URI描述了一个资源在网上的一切信息,包含这个资源的名字,这个资源在哪里等等。而URL描述了在网上如何找到这个资源,也就是这个资源在哪里。所以从逻辑上来讲URL是URI的子集,在充分理解的基础上,URL是可以替换URI的。

URI格式如下:

URI
4.HTTP协议有几种和服务器交互的方法
5.状态码200,301, 304,403,404,500,503分别代表什么意思

服务器的响应类别有下面5种:

状态码类别
6.报文有那几部分组成?

总体上HTTP报文是由报文首部+空行(回车)+报文实体组成。由于HTTP协议服务于请求端和响应端,所以HTTP报文也分为两种,请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文,二者的具体内容可见下图:

HTTP请求报文 HTTP响应报文
7.请求头的格式和作用是什么?给个范例截图说明
Request Header

这里解释一下,如果一个用https协议承载的页面加载一些用http协议定义的资源,是会报错的,所以往往在服务器端的响应头中,会加入header("Content-Security-Policy: upgrade-insecure-requests")这么一句话,让浏览器自动将http协议升级成https协议,而在请求头中的Upgrade-Insecure-Requests:1表明该浏览器支持该操作。

8.首部的格式和作用是什么?给个范例截图说明
首部
9.主体的作用是什么?给个范例截图说明

主体就是HTTP报文实质要传输的数据,并不是所有的报文都有主体,例如get方法的请求报文就没有主体。
主体可以承载很多类型的数据,我们最熟悉的html文档,图片、视频、应用程序、电子邮件等。
当我打开B站的首页,由于是get方法,并没有请求报文主体,但是响应报文就会返回响应主体,就是B站首页的HTML文档,如下图:


响应主体

当我进入B站的登陆页面时,输入我的账号密码点击登陆后,可以看到POST方法请求的请求报文就有请求主体,如下图:

请求主体

此时我的用户名和密码就上传到了服务器。

10.简述浏览器缓存是如何控制的

浏览器缓存分为强缓存和协商缓存,协商缓存是配合强缓存来使用的。
当浏览器第一次请求资源时,根据开发者的要求或者协议的默认,服务器端会在响应头中添加一些跟缓存有关的字段,最终这个资源和响应头会绑定在一起缓存到浏览器中。
当浏览器再次请求这个资源时,首先判断它是否命中了强缓存,判断依据来自于之前响应头中的Expires或Cache-Control字段:

如果这个资源没有命中强缓存,浏览器就会发送一个请求到服务器,验证协商缓存是否命中,如果命中,也是能够在缓存中直接读取资源了。协商缓存是依靠Last-Modified,If-Modified-SinceETag , If-None-Match这个两队字段来控制。

通过一张图更好的理解缓存:


缓存.png
11.下图各个参数是什么意思
Paste_Image.png

补充一下:form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。 当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。 当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)


本文版权归本人和饥人谷所有,转载请注明来源。

上一篇 下一篇

猜你喜欢

热点阅读