http就是一种协议,计算机之间要共同遵守协议的规则,彼此之间才能相互通信。
协议的使用流程:
http客户端发起请求(比如用浏览器打开一个网页),然后就创建了到服务器的一个端口,默认是80端口,然后http服务器就在端口监听客户端请求,一旦收到请求,http服务器就会像客户端返回一个状态和内容。
在输入网址后回车,在很短的时间内整个页面就被渲染出来了,但在这个里面计算机和浏览器做了许许多多事情。
首先,进行域名解析,比如说谷歌浏览器,首先他会搜索自身的DNS缓存,看有没有缓存的域名解析,如果有缓存,那就看有没有过期,如果过期,这个解析就结束了,在浏览器中可以通过在地址栏中输入chrome://net-internet/#dns来查看。
如果浏览器中没有缓存,那么他会搜索操作系统自身的DNS缓存。
如果操作系统也没有找到DNS缓存,那么就会常试读取本地的HOST文件。
如果在host文件里也没有找到对应的配置项,那么浏览器就会发起一个DNS的一个系统调用,就会向本地主库服务器,一般来说是宽带运营商来提供的,发起的一个域名解析请求。
而宽带运营商服务器首先会查看本身的缓存。
如果没有找到本地缓存,运营商服务器就会发起一个迭代DNS解析的请求,这样呢运营商的DNS服务器就拿到了ip地址,并返回给操作系统内核同时缓存起来。
而操作系统内核把结果返回给浏览器,最终浏览器拿到了对应域名的IP地址。
(可以看出资源请求时所耗费的时间成本)
浏览器获得域名对应的IP地址后,就会发起HTTP的三次握手。
那浏览器就会以一个随机端口向服务器的Web程序发起一个TCP的连接请求,这个TCP请求通过层层的路由设备,到达服务器端以后,进入到网卡,然后进入到内核的TCP/IP协议栈,还有可能要经过防火墙的过滤,最终到了Web服务端,然后就建立起TCP和IP的连接。
三次握手都做了些什么,
客户端向服务器端说,咱俩可以唠唠吗?然后服务器端说,咱俩可以唠唠,然后客户端说,那咱俩开唠吧!
TCP/IP建立起连接后,浏览器就可以向服务器发送HTTP请求了。
服务器端接收到这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器。
浏览器拿到了完整的HTML页面代码,在解析和渲染这个页面的时候,里面的,js,css,图片等静态资源,他们也是一个个HTTP请求,都需要经过上面的步骤。
浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户。
HTTP协议主要有哪些组成部分?
我们可以把HTTP请求拆分开,分为请求和响应。
无论请求和响应都会发送http头和正文信息。
http头发送的是一些附加信息:内容类型,服务器发送响应的时间,http状态吗。
正文就是用户提交的表单数据或者返回的数据。
HTTP的请求方法:
GET方法,是用于读取数据。
POST方法,是向指定的资源提交数据,比如新上传一个视频,新添加一个用户等。
PUT方法,更新,比如更新用户的一个头像等。
DELETE方法,删除,我们请求服务器来删除我们标识的某个资源。
状态码:
状态就是在服务器端返回给浏览器的时候,告诉浏览器我当前的一个请求的成功与否。
一般由3位数字组成,第一个数字定义了一个响应的类别,并且有5中可能的取值1,2,3,4,5.
1xx表示请求已经接收了,正在进行处理。
2xx表示请求已经成功,并且成功地处理掉了。
3xx表示重定向,表示完成请求需要其他的一些资源。
4xx表示客户端错误,请求时有语法错误等。
5xx表示服务器端的错误,服务器端不能实现这个合法的请求。
常用的状态码的值:
200表示客户端请求时成功的。
400表示客户端请求的语法错误,服务器端不能理解。
401表示这个请求没有经过授权。
403表示服务器端收到这个请求,但是拒绝为他服务。
404表示没找到,请求的资源不存在。
500表示服务器端发生一个不可预期的错误。
503表示服务器端当前还不能处理这个请求。