Web服务器和HTTP请求
一、web服务器
目前最主流的三个Web服务器是Apache、Nginx、 IIS。 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。
1、Web服务器具有以下特点:
Web服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应。
Web服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因。
Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序。
2、客户/服务器传输过程可分为四个基一步骤:
浏览器与服务器建立连接;
浏览器向服务器请求文档;
服务器响应浏览器请求;
断开连接。
a) 浏览器向服务器请求
客户请求包含以下信息:请求方法(method )、请求头(request-URI )、请求数据(http-version);
(1)请求方法是用于特定URL或Web页面的程序HTTP请求方法:
(2)请求头信息是可选项,它用于向服务器提供客户端的其他信息。
如果客户采用某种方法获取数据(如post),数据就放在头( header )之后;否则客户机等待从服务器传来的响应。
b)服务器响应浏览器请求
服务器响应包括以下关键部分:状态码、响应头、响应数据;
(1)HTTP定义了多组返回给浏览器的状态码。
(2)响应头向客户方提供服务器和/或请求文档的信息HTTP响应头:
如果有客户方请求的数据,数据放在响应头之后,否则服务器断开连接。
3、常见的web服务器和其特点 :
Apache:属于重量级web服务器(重量级主要是在软件包的大小上比较大,软件的耦合度大),但是速度、性能不及其他轻量级web服务器,并且消费内存较高。世界上用得最多的Web服务器,它的优势主要在于源代码开放、支持跨平台的应用(可以运行在几乎所有的Unix, Windows. Linux系统平台上),以及其可移植性等。
Lighttpd:轻量级web服务器,cpu占用低,效能好,模块丰富,开源。支持FastCGI、CGI.Auth、输出压缩(output compress )、URL重写及Alias等重要功能。
Tomcat:运行Servlet和Jsp web的应用软件的容器,静态和高并发处理弱。
Nginx:轻量级,高性能http和反向代理服务器。高并发连接达到2-4万个,内存、cpu等系统资源消耗低。Rewrite重写规则(根据域名,URL的不同将HTTP请求分到不同的后端服务器群组),内置的健康检查功能(Nginx Proxy 后端的某台web服务器宕机也不会影响前端访问),节省带宽、支持GZIP压缩。Nginx是一个高性能的 HTTP 和 反向代理服务器,也是一个IMAP/POP3/SMTP 代理服务器,其特点是占有内存少,并发能力强。
Microsoft IIS 服务器:Microsoft的Web服务器产品为Internet Information Server C IIS ) . IIS是允许在公共Intranet上发布信息的Web服务器。IIS提供了一个图形界面的管理工具,可用于监视配置和控制Internet服务。 IIS是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。它提供ISAPI ( Intranet Server API)作为扩展Web服务器功能的编程接口;同时,它还提供一个Internet数据库连接器,可以实现对数据库的查询和更新。
二、http 请求
http 是一种让 Web 服务器与浏览器(客户端)通过 Internet 发送与接收数据的协议。Web 服务器也被称为 http服务器,它通过 http协议与客户端通信。
1、http特点:
在 http中,客户端总是通过建立一个连接与发送一个http请求来发起一个事务。服务器不能主动去与客户端联系,也不能给客户端发出一个回叫连接。
http不维护与客户方的连接,它使用可靠的TCP连接,通常采用TCP 80端口。
2、常用的请求方式:
一般我们在浏览器输入一个网址访问网站都是GET请求;在使用FORM表单提交数据中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。
HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。
根据HTTP规范,POST可能会修改服务器上的资源的请求。比如CSDN的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了。
三、浏览器中GET和POST请求的区别
在HTTP请求中,第一行必须是一个请求行,包括请求方法,请求URL,报文所用HTTP版本信息。紧接着是一个herders小节,可以有零个或一个首部,用来说明服务器要使用的附加信息。在首部之后就是一个空行,最后就是报文实体的主体部分,包含一个由任意数据组成的数据块。但是并不是所有的报文都包含实体的主体部分。
1、两种请求方式的区别:
GET请求:
请求的数据会附加在URL之后,
例如 http://127.0.0.1:8400/map/getmeta?id=1213&name=lrmap
,其中?后的数据就是请求的数据,参数之间以&相连;若有%,%XX中的XX为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:
POST请求会把请求的数据放置在HTTP请求包的包体中。上面的get请求中id=1213&name=lrmap就是两个实际的传输数据键值对。因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。并且post请求头多了Content-Type
和 Content-Length。
传输数据的大小:
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
安全性:
POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site
request frogery攻击,但是真正重要的数据在传的过程中还会更换协议http–>https,比如在网上支付的过程中。
HTTP中的GET,POST,SOAP协议都是在HTTP上运行的。
当数据是中文或者不敏感的数据,则用get.因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用post;
2、 请求头包含:
Accept:指浏览器或其他客户可以接爱的MIME文件格式。Servlet可以根据它判断并返回适当的文件格式。
User-Agent:是客户浏览器名称
Host:对应网址URL中的Web名称和端口号。
Accept-Langeuage:指出浏览器可以接受的语言种类,如en或en-us,指英语。
connection:用来告诉服务器是否可以维持固定的HTTP连接。http是无连接的,HTTP/1.1使用Keep-Alive为默认值,这样,当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都建立连接
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能。
Referer:表明产生请求的网页URL。如比从网页/icconcept/index.jsp中点击一个链接到网页/icwork/search,在向服务器发送的GET/icwork/search中的请求中,Referer是http://hostname:8080/icconcept/index.jsp
。这个属性可以用来跟踪Web请求是从什么网站来的。
User-Agent:是客户浏览器名称。
Content-Type:用来表名request的内容类型。可以用HttpServletRequest的getContentType()方法取得。
Accept-Charset:指出浏览器可以接受的字符编码。英文浏览器的默认值是ISO-8859-1.
Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式。