【综-网】Http浅析【1】——流程|请求头|响应头|状态码

本文如有疏漏,后续将继续补充。

Http浅析【2】——ajax跨域问题

HTTP知识

Http工作的基本流程

(1)http客户端发起请求,创建端口;

(2)http服务器在端口监听客户端 请求;

(3)http服务器向客户端返回状态和内容;

当我们在浏览器中输入一个网址时,浏览器和服务器之间发生了如下的事情:

(1)域名解析。浏览器首先搜索自身的DNS缓存,查看自身缓存中是否有域名对应的ip地址,缓存的时间大概是1min。以chrome浏览为例子,我们在

chrome当中输入chrome://net-internals/#dns

就能查看当前chrome缓存的dns

(2)如果浏览器没有缓存或者缓存已经失效,那么操作系统会搜索操作系统自身的一个dns缓存。

(3)读取本地的host文件;

(4)浏览器发起一个dns的系统调用,向本地址库dns服务器,一般是宽带域名商,发起一个域名解析请求。在这一步中以imooc.com为例子,运营商服务器又将经过如下的几个步骤:

 1. 宽带运行商查看本身的缓存

 2. 运营服务商代替浏览器发起一个迭代的dns解析请求。也就是说运营商会向根域发送一个域名解析请求,根域发现这是一个com的顶级域域名,就会告诉运营商com域域名的地址。

 3. 运营商接着向com域的dns服务器询问域名的ip地址,com域服务器会告诉运营商imooc.com所在域的地址,这个地址一般是域名注册商的服务器地址,例如万网、新网之类。这时注册商服务器就会查找自身的dns列表,将域名的ip地址返回给运营商服务器。

 4. 运营商拿到域名的ip地址,把结果返回给操作系统内核缓存起来;

 5. 操作系统内核把结果返回给浏览器;

(5)浏览器最终拿到ip地址,发起经典的Http“三次握手”,此时浏览器以一个随机端口向服务器的web程序,例如80端口连接请求。这个连接请求通过层层的路由设备到达服务器端后进入到网卡,然后进入到内核的TCP/IP协议栈,当然还可能经过防火墙的过滤,最终到达web服务端,紧接着就建立了TCP和IP的连接;

(6)TCP/IP连接建立起来之后,浏览器就可以向服务器发送Http请求了;

(7)服务器端接受到请求,根据路径参数,经过后端一些处理之后,把处理后的一个结果数据返回给浏览器,如果是页面的话,那就是返回完整的HTML代码。

(8)浏览器拿到了网站完整的HTML页面代码后,通过渲染引擎解析和渲染JS、CSS、图片静态资源等等,这个过程实际上也是一个个的Http请求,它们都需要经过上面的主要七个步骤。

(9)浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现在用户的面前。

这里的Http请求知识一个大概的梳理,更多详细的细节需要再去查阅专门的书籍和文章,这里推荐一本讲解Http的书籍:
图解http-下载地址

http组成部分

我们可以简单地把http协议拆分成【请求】和【响应】。

无论是请求还是响应都会发送http头和正文的信息。


【综-网】Http浅析【1】——流程|请求头|响应头|状态码_第1张图片

Http Header 和 body

在整个网络传输资源的过程,header分为message-header和message-body,首先传递message-header 即Http header消息。

http header又分为四个部分,general header ,request header, reponse header ,entity header。大体上可以分为request和response。

【1】http的请求方式:

【综-网】Http浅析【1】——流程|请求头|响应头|状态码_第2张图片

【2】Host 请求web服务器的地址

【3】User-agent http客户端运行的浏览器的详细信息。通过此头信息,服务器可以判断浏览器的类型

【4】Accept 指客户端可以接受的消息类型,内容的先后顺序表示客户端接受的先后顺序

【5】content-type 表示此http请求提交的内容类型。一般只有post提交时,才需要设置该属性 。content-type的属性值有以下两种设置:

(1)“application/x-www-form-urlencoded”: 表单数据向服务器提交时所采用的编码类型,默认的缺省值就是“application/x-www-form-urlencoded”。 然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。

(2)“multipart/form-data”: 在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。

当提交为表单数据时,可以使用“application/x-www-form-urlencoded”;当提交的是文件时,就需要使用“multipart/form-data”编码类型。

注意-content-type和accept的区别是:accept是表示客户端希望接收的类型,属于请求报文头,content-type是发送消息的类型,属于实体报文头

http报文头结构:通用报文头 | 请求报文头 | 响应报文头 | 实体报文头
请求方的http报文头:通用报文头 | 请求报文头 | 实体报文头
响应方的http报文头:通用报文头 | 响应报文头 | 实体报文头

【6】Keep-Alive:表示是否需要持久连接。如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点

【7】 Accept-Encoding 指定客户端浏览器可以支持的web服务器返回内容压缩编码类型。表示允许服务器在将输出内容发送到客户端以前进行压缩,以节约带宽。而这里设置的就是客户端浏览器所能够支持的返回压缩格式。

【8】Accept-Charset HTTP客户端浏览器可以接受的字符编码集

【9】Accept-Lanuage 指定HTTP客户端浏览器用来展示返回信息优先选择的语言

Reponse 响应头

【综-网】Http浅析【1】——流程|请求头|响应头|状态码_第3张图片

【综-网】Http浅析【1】——流程|请求头|响应头|状态码_第4张图片

Http状态码

  • 1XX
    请求已经接受,正在处理。
  • 2XX
    请求成功,并已经处理。例如:
    200-请求成功
  • 3XX
    表示请求重定向,需要进一步的操作
  • 4XX
    客户端错误,请求时存在语法错误,或者请求无法实现,例如:
    400-客户端请求语法错误;
    401-请求没有经过授权;
    403-服务端拒绝服务,可能是没有权限;
    404-服务页面没有找到
  • 5XX
    服务器端错误,服务端可能无法实现合法的请求,例如:
    500-服务器端发生不可预知错误
    503-服务端当前还不能处理请求

笔者个人订阅号~欢迎小伙伴们关注


微信公众号-感谢关注

若有疑问可以QQ联系笔者,虽然不一定100%解决你的问题,但是可以交流探讨一波:2276604211

你可能感兴趣的:(【综-网】Http浅析【1】——流程|请求头|响应头|状态码)