要说http就绕不开tcp,TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。但是,http是基于tcp协议的。
TCP三次握手和四次挥手?
被问烂了的问题了,这里不详细讲了,三次握手:
四次挥手:
还不懂的童鞋,去找别人的文章好好看看!
TCP和UDP的区别?
仔细阅读上面传输层里写的内容,懂了吗?(不懂?不懂背下来啊,混蛋!)
我们微信聊天时候经常会有这种情况。
是不是感同身受,这种情况就是对方用了TCP协议来聊天,要经过--在吗?--在--巴拉巴拉,才能成功的传递信息。 而如果对方使用UDP,则会有事直接说,不管我收没收到。(以后找我请用UDP协议,着急直接打电话!)
Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。
所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。
发送端在层与层间传输数据时,没经过一层都会被加上首部信息,接收端每经过一层都会删除一条首部
HTTP的英文全称?
开玩笑的,这个显然不是重点,但是不排除有人会去问,还是要知道的: 超文本传输协议(HyperText Transfer Protocol)
状态码?
状态码就那些,常用的记住就行了:
2XX 成功
3XX 重定向
4XX 客户端错误
5XX 服务器错误
HTTP协议格式?
HTTP的请求和响应的消息协议是一样的,分为三个部分,起始行、消息头和消息体。这三个部分以CRLF作为分隔符。最后一个消息头有两个CRLF,用来表示消息头部的结束。
HTTP请求的起始行称为请求行,形如GET /index.html HTTP/1.1
HTTP响应的起始行称为状态行,形如200 ok
消息头部有很多键值对组成,多个键值对之间使用CRLF作为分隔符,也可以完全没有键值对。形如Content-Encoding: gzip 消息体是一个字符串,字符串的长度是由消息头部的Content-Length键指定的。如果没有Content-Length字段说明没有消息体,譬如GET请求就是没有消息体的,POST请求的消息体一般用来放置表单数据。GET请求的响应返回的页面内容也是放在消息体里面的。我们平时调用API返回的JSON内容都是放在消息体里面的。
HTTP的无状态性?
所谓HTTP协议的无状态性是指服务器的协议层无需为不同的请求之间建立任何相关关系,它特指的是协议层的无状态性。但是这并不代表建立在HTTP协议之上的应用程序就无法维持状态。应用层可以通过会话Session来跟踪用户请求之间的相关性,服务器会为每个会话对象绑定一个唯一的会话ID,浏览器可以将会话ID记录在本地缓存LocalStorage或者Cookie,在后续的请求都带上这个会话ID,服务器就可以为每个请求找到相应的会话状态。
输入url到页面加载都发生了什么事情?(最最常问的来了)
这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存...