HTTP
1、什么是TCP/IP
不同的硬件、操作系统之间进行通信,需要一种规则,我们把这种规则称做,网络传输的各个阶段有不同的,这些的集合总称为TCP/IP。http是TCP/IP的子集。
2、TCP/IP分层及各层的作用?
分为四层:应用层、传输层、网络层、链路层。
应用层:http属于这一层,在这一层根据http生成针对目标服务器的http请求报文,服务器端根据http解析报文。
传输层:TCP属于这一层,在这一层将根据TCP将http的请求报文分割成报文段,在服务器端会根据TCP合并报文段。建立和断开TCP连接的过程就是三次握手,四次挥手。
网络层:IP属于这一层,网络层的作用是确定数据传输的路线。根据IP搜索对方地址,并一边中转一边传送。IP地址指明了节点被分配的地址,MAC地址是网卡所属的固定地址,IP地址可以变,MAC一般不变。整个中转的过程像是送快递,用户把数据送到快递站,快递公司再送到一个个大型中转站。
链路层:网络传输过程中的硬件部分。
过程:客户端发出请求->应用层发送http请求报文->传输层建立TCP连接,将报文分成报文段->网络层根据请求的ip地址,进行处理并加上MAC地址后交给链路层->链路层将数据送到请求的ip地址->请求ip的服务器根据IP,TCP,HTTP对数据进行拼接等处理->服务器收到请求。
3、DNS是什么?
DNS是和http一样位于应用层的,用于解析域名,DNS提供通过域名查找IP地址或者IP地址反查域名的服务。
4、URI和URL的区别
URI是统一资源标识符,URL是统一资源定位符,URL是URI的子集。
URI格式:名/方案名+登录信息(可选)+服务器地址(网址或ip)+端口号(可选)+文件路径+参数(可选)+片段标识符(可选,哈希值)
两者区别就就是URL是确定了文件的路径,而URI只是的标识出文件,但是不一定是该文件的路径。
5、什么是持久连接?
如果一个请求就建立一次TCP连接,那么过程太费时间,资源,效率低下。所以,持久化连接就是三次握手建立TCP连接后,一直保持连接,直到四次挥手,才断开连接。
6、什么是管线化?
因为持久连接,所以不必等一个请求响应后再发起下一个请求,可以同时发送多个请求。大大节省了时间。
7、cookie的诞生原因?
http是无状态的,不会保存之前一切请求的报文信息,所以假设有一个网站需要登录,用户登录之后,在之后的访问过程中怎么保持登录状态,就成为一个问题。解决方法就是引入cookie技术。
8、关于cookie的知识
cookie是为了用户识别和状态管理,web网站为了管理用户状态,会把一些数据临时写入用户的计算机内,当用户访问该网站时,可取回之前存放的cookie。
1)cookie是不可跨域的,每个域名下的cookie是单独保存的,不会混用。在一个页面下发送的请求,带的都是当前域名下的cookie。
2)cookie的重要属性
name:cookie的名字,同域名下name不能相同,否则会被覆盖
value:cookie的值
path:路由
secure:打钩时,只会在https等安全下传输这个cookie
HttpOnly:打钩时,则不能通过js获取,防止xss攻击
Expires/Max-age:cookie有效期,当为session时,关闭浏览器(非页面)就会清除。
若为过期时间,则到时间时浏览器自动删除。
复制代码
3)服务端一旦通过set-cookie将cookie存储到客户端,就没有方法可以直接删除,而只能通过覆盖的方式删除。
9、状态码
状态码分为5大类:
1XX:信息状态类
2XX:成功类
3XX:重定向类
4XX:客户端错误类
5XX:服务端错误类
复制代码
不能完全相信状态码,有时候返回的状态码和实际情况是不一致的!!
200:正常处理
301:永久重定向,浏览器自动再次发送新的请求
302:临时重定向,浏览器自动再次发送新的请求
303:与302相似,但表示客户端应该采用get方法获取新的资源,浏览器自动再次发送新的请求
304:附带条件未满足,和重定向没有关系,服务器可通过此状态码高速客户端,使用本地缓存
403:服务端拒绝了请求,但没有给具体原因
404:服务器上没有请求的资源
500:服务器在执行的时候发生了错误
503:服务器超负载或停机维护
复制代码
10、一台服务器多个域名,IP地址一样,怎么区分
利用虚拟主机的技术,可以实现一台物理服务器上,部署多个域名,但是用DNS服务解析多个域名的时候,解析成的ip地址是一样的,那怎么区分请求的是哪个资源呢?
利用请求头里的host字段来指定主机名或者是域名的URI,host一般只是发送域名,而referer则是完整的url地址,origin则是跨域的时候发送的。
11、代理服务器
代理服务器:接收客户端请求,转发给其他服务器,代理服务器根据两个维度,可分为缓存代理,非缓存代理。透明代理和非透明代理(对数据进行处理)。
12、常用报文头部字段
cache-control:控制缓存的行为
connection:管理连接,keep-alive持久连接
cookie:
set-cookie:设置cookie
referer:当前请求的原始页面
cache-control:控制浏览器缓存
Last-Modified:较后一次新时间
if-Modified-Since
Etag
If-None-Match
复制代码
13、get和post的区别
get和post是http中规定的,告知服务器意图的方法。使用get方法用来请求已被URI识别的资源,而post方法用来传输实体主体,但get请求也可以发送实体,post请求也可以在url上加参数。本质上,两者都是TCP连接,区别是get发送一次数据包,post发送两次数据包。
在表面上,get和post的区别如下:
1、关于传入参数的大小限制,http里没有规定,只不过是浏览器和服务器的约定俗称。
2、关于传递参数的安全性,get请求的url是在服务器上有日志记录,在浏览器也能查到历史记录,但是post请求的参数都在body里面,服务器日志记录不到,浏览器历史也记录不到,所以相对来说安全些。
3、get请求可以缓存,post请求不能缓存