一个HTTP请求的详细过程

来源:互联网 发布:域名升级访问中sdashao 编辑:程序博客网 时间:2024/06/06 17:34
1.一个http请求的详细过程
我们来看下当我们在浏览中输入 http://www.mycompany.com:8080/mydir/index.html,背后发生的一切。
首先http是一个应用层的协议,因为双方要通讯,所以事先约定一个规范。
  • 连接
当我们输入这样的一个请求,首先要建立socket连接,因为socket是通过ip地址和端口建立的,所以之前还有一个DNS解析过程。把www.mycompany.com变成ip,如果url里不包含端口号,就是要该协议默认的端口号(80)。
DNS的过程:
     首先本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能知道相应的url则返回ip,否则DNS就继续向该解析请求发送给上级DNS,整个DNS可以看成是树状结构,该请求一直发送到根直到得到结果。现在已经拥有ip和端口号,就可以打开socket连接了。
  • 请求
连接建立成功后,开始向web服务器发送请求,这个请求一般是GET或是POST。GET的格式是:GET 路径/文件名 HTTP/1.0
文件名指出所访问的文件,HTTP/1.0指出web浏览器使用的HTTP版本。现在可以发送GET命令了:GET /mydir/index.hrml HTTP/1.0,
  • 应答
web服务器收到这个请求,进行处理,从它的文档空间中搜索子目录mydir的文件index.html。如果找到文件,web服务器就把该内容传送给相应的web浏览器
为了告知浏览器,web服务器首先会传送一些HTTP头信息,然后会传送具体的内容(HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开(\r\n
常用的HTTP头信息:
     HTTP 1.0 200 OK   这是web服务器答应的第一行,列出服务器的版本号和状态码
     MIME_Version:1.0  它指示MIME类型的版本
     content_type:类型   这个头信息非常重要,它指示HTTP体信息的MIME类型,如:content_type:text/html指示传送的数据是HTML文档
     content_length:长度值 它指示HTTP体信息的长度(字节)
  • 关闭连接
当应答结束后,web浏览器与web服务器必须断开,以保证其他web浏览器能够与web服务器建立连接。
2.现在看数据包在网络中的串行过程
  • 应用层
根据当前的需求和动作,结合应用层的协议,有我们确定发送的数据内容,把这些数据放到一个缓冲区内,然后形成了应用层的报文data
  • 传输层
这些数据通过传输层发送,比如tcp协议。所以它们会被送到传输层处理,在这里报文打上了传输层的包头,主要包含端口号以及tcp的各种制信息。这样就组成了报文段,简称段(segment)。tcp是端到端的协议,当发送一个数据段时,会开启一个计时器,若没有及时收到一个确认,那么将重发这个报文段(超时重传),若接收端接收到的段有错误,那么则丢弃,希望发端重新发送。
  • 网络层
当数据段送到网络层,在网络层加上网络层的包头,包头内部含有源及目的端的ip地址,该层的数据发送单位是数据报。网络层负责将这样的数据报在网络上传输,如何穿过路由器,最终到达目的地。在这里,是根据目的ip地址,就需要查找下一跳路由的地址,首先是本机,要查找本机的路由表,在windows上运行route print就可以看到当前路由表的内容。
整个查找过程是这样的:
    • 根据目的地址,得打目的网络号,如果处在一个内网,则直接发送
    • 如果不是查找路由表,找到一个路由
    • 如果找不到明确的路由,此时的路由表中还有默认网关,也可称为缺省网关,ip用缺省的网关地址将一个数据传送给下一个指定的网关,所以网关有可能是路由器,也可能是内网特定路由器传输数据的网关
    • 路由器收到数据后,它再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址。而数据包中包含一个最大路由跳数,如果超过这个跳数,就会丢弃数据包,这样可以防止无限传递。路由器收到数据包后,只会查看网络层的包裹数据,目的ip。所以说它是工作在网络层,传输层的数据对它来说则是透明的。
  • 链路层
将mac地址及链路层控制信息加到数据包里,形成Frame,Frame在链路层协议下,完成了相邻的节点间的数据传输,完成连接建立,控制传输速度,数据完整。

下一个目的地接受到数据后,从物理层得到数据然后经过逐层的解包 到 链路层 到 网络层,然后开始上述的处理,在经网络层 链路层 物理层将数据封装好继续传往下一个地址。
0 0