web服务器访问流程

标签: web 服务器 访问 | 发表时间:2014-08-24 12:28 | 作者:
出处:http://www.iteye.com

 



 问题1:DNS解析是什么,简述如图步骤1、2做了什么?

人们习惯记忆域名,但机器间互相只认ip,域名和ip可以是多对一的关系,他们之间的转换工作称为域名解析,域名解析需要有专门的域名解析服务器来完成。举例说明:

在浏览器中输入域名www.iteye.com,操作系统会向检查自己本地的hosts

是否有这个网址映射,如果有就直接调用这个ip地址,完成域名解析。如果没有就查找本地DNS解析器缓存,是否有这个网址映射关系,如果有直接返回,完成域名解析。如果咩有相应的网址映射关系,则会查找本地DNS服务器,如果要查询的域名包含在本地配置区域资源中,则返回结果给客户机,完成域名解析。如果未找到,本地DNS就会把请求发至根DNS,根DNS收到请求后会判断这个域名并返回负责该域名服务器的ip,最后会返回到本地DNS服务器,由DNS服务器在返回给客户机。

步骤1是客户端向服务器发出DNS请求。

步骤2是服务器向客户端返回ip响应。

问题2:简述如何与服务器建立TCP连接

在TCP/IP协议体系结构中的TCP协议使用三次握手机制来建立传输连接,具体步骤如下:

(1)首先是服务器初始化的过程,从CLOSED(关闭)状态开始通过顺序调用SOCKET、BIND、LISTEN和ACCEPT原语创建Socket套接字,进入LISTEN(监听)状态,等待客户端的TCP传输连接请求。

(2)客户端最开始也是从CLOSED状态开始调用SOCKET原语创建新的Socket套接字,然后在需要在调用CONNECT原语,向服务器发送一个将SYN字段置1(表示为同步数据段)的数据段,主动打开端口,进入到SYN SENT(已发送连接请求,等待对方确认)状态。

 

(3)服务器在收到来自客户端的SUN数据段后,发回一个SYN字段置1(表示此为同步数据段),ACK字段置1(表示此为确认数据段),ACK(确认号)=i+1的应答数据段(假设初始序号为j),被动打开端口,进入到SYN RCVD(已收到一个连接请求,但未进行确认)状态。这里要注意的是确认号是i+1,而不是i,表示服务器希望接收的下一个数据段序号为i+1.

(4)客户端在收到来自服务器的SYN+ACK数据段后,向服务器发送一个ACK=1(表示此为确认数据段),序号为i+1,ack=J+1的确认数据段,同时进去ESTABLISHED(连接建立)状态,建立单向连接。要注意的是,此时序号为i+1,确认号为j+1,表示客户端希望收到服务器的下一个数据段的序号为j+1.

服务端在收到客户端的ACK数据段后,进入ESTABLISHED状态,完成双向连接的建立。

一旦连接建立,数据就可以双向对等的流动,没有所谓的主从关系。

问题3:简述客户端与服务端传送数据。

在建立连接最后一次“握手”时,客户端发送的数据稍带着http请求报文,服务器在给客户端的http响应报文中稍带着要浏览的数据。

问题4:http协议与tcp协议之间的关系。

TCP协议是传输层协议,主要解决数据如何在网络中传输。而HTTP是应用层协议,主要解决如何包装数据。HTTP建立在TCP的基础上。

问题5:简述Http get请求过程,并举例。

get请求用于从服务器上获取资源,是默认的请求方法。当客户端向服务器发送http请求是可以稍带上要请求的数据,服务器在响应http请求是可以向客户端返回要访问的数据。

例如使用get方法读取路径为/usr/bin/image的图像。请求行给出了方法GET,URL,与HTTP协议版本号。报文头部有2行,给出了浏览器可以接收GIF与JPEG格式的图像。请求报文中没有正文.应答报文包括状态码和4行的报头。报头表示了日期,服务器,MIME版本号和文档长度:

请求:

GET/usr/bin/image1  HTTP/1.1

         Accept:  image/gif

         Accept:  image/jpeg

 应答:

 HTTP/1.1  200  ok

        Date: San,1-Feb-09  8:30:10  GMT

        Server:  xxx

        MIME-version:  1.0

        Content-length: 2048

             (文档内容)

问题6:简述Http post请求过程,并举例

post与get基本一致,post请求是客户端向服务器发送http请求是稍带上要上传到服务器处理的数据。

请求:

POST/cgi-bin/doc.pl  HTTP/1.1

        Accept: */*

        Accept: image/gif

        Accept: image/jpeg

        Content-length:64

应答:

HTTP/1.1  200 OK(状态行)

Last-Modified(应答首部) : Mon,20 Dec 2001 23 :26 :42 GMT

Date:Tue,11 Jan 2002 20:53:12 GMT

Status:200

Content-Type: Text/html

Servlet-Engine:

Content-Length:59

<html>(应答主体)

……

</html>

 

问题7:nginx是什么

Nginx是一个跨平台的Web服务器,可运行在Linux、FreeBSD、Solaris、AIX、Mac OS、Windows等操作系统上。相比Apache等,占有内存少,并发能力强,安装简单,bugs少。

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx的模块从结构上分为核心模块、基础模块和第三方模块。用户根据自己的需要开发的模块都属于第三方模块。

问题8:简述nginx的工作流程

当它接收到一个HTTP请求是,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看作是nginx的真正劳动工作者。通常一个location中的指令会涉及一个handler模块和多个fiflter模块(多个location可以复用同一个模块)。handler模块负责处理请求,完成响应内容的生成,而filter模块对影响内容进行处理。

问题9:简单的将图中内容填充。

端口(80)

dns服务器

nginx工作原理:

Nginx的模块从功能上分为如下三类。

Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。

Filters (过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。

Proxies (代理类模块)。此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。

nginx工作原理参考:http://wuzhengfei.iteye.com/blog/2026998



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [web 服务器 访问] 推荐:

web服务器访问流程

- - ITeye博客
 问题1:DNS解析是什么,简述如图步骤1、2做了什么. 人们习惯记忆域名,但机器间互相只认ip,域名和ip可以是多对一的关系,他们之间的转换工作称为域名解析,域名解析需要有专门的域名解析服务器来完成. 在浏览器中输入域名www.iteye.com,操作系统会向检查自己本地的hosts. 是否有这个网址映射,如果有就直接调用这个ip地址,完成域名解析.

浅谈web服务器—Nginx

- - CSDN博客推荐文章
常见的web服务器有apache,Nginx,lighttpd等. 但Nginx作为一款高性能的Http和反向代理服务器,由于其高效率、简配置等优势在业内被广泛使用. 目前Taobao、新浪、赶集网、金山、豆瓣网、网易新闻等众多知名互联网企业的服务器都是采用Nginx. 根据url的不同,将HTTP请求转发到后端的应用服务器集群.

简易的python web服务器用途

- Ruby - Erlang非业余研究
原创文章,转载请注明: 转载自Erlang非业余研究. 本文链接地址: 简易的python web服务器用途. 我们在工作中经常会需要看下报表,如tsung的统计报表或者lcov的覆盖情况,这些报表通常为了方便都会作成html格式的. 我们可以把这些html网页打包拉回去用浏览器慢慢看,但是每次都要打包,拉数据非常麻烦.

Node.js 的简易web服务器

- bingo - 走走停停看看
网上关于Node.js的介绍已经铺天盖地了,但我就没找到一个简单的web服务器给我做测试用. 实际上Node.js只需要一个exe文件和一个js文件就可以搭建服务器了,用来随便测试页面之类的用起来比nginx还方便. 只可用于http服务,没有更多功能的js文件. 1,先去 http://nodejs.org/下载最新的Node.js可执行的exe文件.

优秀的轻量级Web服务器

- - Solidot
Alison Neville 写道 "Web服务器是一种使用超文本传输协议(HTTP)响应客户端请求提供网页的计算机软件,以HTML文件、图像、样式表和脚本的形式构成网页内容. Apache是​​最流行的Web服务器软件,提供了最新的协议实现,优秀的特性集,具有高可配置和可扩展性. Apache被一半以上的活跃网站所使用.

centos7作为web服务器优化

- - 操作系统 - ITeye博客
centos7作为web服务器优化. 1、关闭firewalld:. systemctl stop firewalld.service #停止firewall. systemctl disable firewalld.service #禁止firewall开机启动. 2、安装iptables防火墙.

Web服务器的工作原理

- - 极客521 | 极客521
Web服务器工作原理概述. 很多时候我们都想知道, web容器或web服务器(比如Tomcat或者jboss)是怎样工作的. 它们是怎样处理来自全世界的http请求的. Java Servlet API(例如ServletContext,ServletRequest,ServletResponse和Session这些类)在其中扮演了什么角色.

Web服务器的性能估计

- - 鸟窝
在给客户做方案的时候,或者在软件设计的时候,或者在软件测试的时候,我们经常会估算我们的web应用程序的性能. 如果估算误差太大,你给客户的方案是10台服务器,实际部署时确需要20台机器,客户绝对要疯了. 同样对我们的代码设计和测试方案影响重大. 那么在带宽和内存都很充足的情况下我们如何大致估算出一个web应用程序的性能呢.

嵌入式Web服务器暴露企业机密

- anamewing 喵呜 - Solidot
联网的扫描仪、打印机、VoIP系统等设备使用的嵌入式服务器都有可能暴露企业机密. 安全公司Zscaler Labs的副总裁Michael Sutton将在下月举行的Black Hat USA 2011会议上演示他的发现. Sutton利用Amazon EC2云计算资源持续扫描大块地址段,探测出任何嵌入式Web服务器.

Go 和 Python Web 服务器性能对比

- Ken - python.cn(jobs, news)
我通常使用 Python 来构建 Web 应用. 一年前,在兴趣的驱使下,我开始学习 Go. 在此期间,我重写了一些原本由 C 开发的 CGI 应用,包括运行于 chroot 环境下的同 thttpd 服务器一起的应用. 我开始寻找可以开发易于 chroot、且内置 Web 服务器的独立 Web 应用的工具.