首页 > 代码库 > Linux之Web服务(1)HTTP协议
Linux之Web服务(1)HTTP协议
Linux之Web服务(1)HTTP协议
前言
在说到Web服务配置之前,先要了解一下Httpd服务所在的Tcp/Ip分层中的http协议。
http协议为应用层协议,主要是负责处理超文本传输。http是一个客户端和服务端请求和应答的标准(TCP)。客户端是终端客户,服务器端是网站。用户通过Web浏览器、网络爬虫或者其它的工具,客户端发起一个服务器上指定端口(默认为80)的HTTP请求。通过HTTP或者HTTPS协议请求资源由统一资源提示符(Uniform Resourcce Identifiers)及URLs来标识。
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。其内部使用了一些方法和规则来规定主机传输超文本时如何进行传输,怎么判断超文本的类型,传输的优先级等等。
HTTP虽然是客户端或其他程序与Web服务器之间的应用通信协议,但是HTTP本身包含命令和传输信息,不仅可以用于Web访问,也可以同于其他因特网/内联网应用系统之间的通信,从而实现各类应用层资源超媒体访问的集成。例如:
平时上网时打开浏览器输入一个地址,比如http://www.badiu.com来访问对应的web服务器,这时最常见的http传输。但是后来出现了更高级的手机app,app的开发者们为了同时实现开发的高效率和并保证app软件本身所占硬盘空间小,在设计软件前端时并不使用一些基于语言来编写的窗体或图形,而是直接使用Html5、Js等前端网页使用的语言来设计出很多一种可以嵌套在一些操作系统支持的调用接口上的网页,然后通过调用HTTP对应的协议功能接口来实现。一般这样的应用称为webApp,及基于Web的系统和应用,而在常见的移动端webapp采用响应式网页设计的大部分技术。当使用手机上网下载并安装了一个这样的webapp会发现大小很小,而且响应速度很快,内存也占用很小,因为这种app就是一堆html的等前端语言的组合啊,想一下一个文件夹里存放了一些文本,也不会占太多空间。
当然Http协议可以解析这些标签类的文本语言,后端功能的实现也需要一些开发语言如Java、Objective-C等,这些开发语言需要操作这些小网页,也就是调用了Http在移动端应用层对于的接口。当然HTTP还有其它各方面层次的功能支持,只要有对应的需要的实现接口的媒体即可与其合并并完成建立在Http协议上的各种应用。
Http的实现
开源实现:httpd(apache), niginx, lighttpd
基于C/S:
C(Client):browser,user agenet
chrome,ie,firefox,safarl,opera,..
elinks, curl, wget,.......
S(Server):httpd(apache) nginx lighttpd
通信模型:
请求(request)/响应(response)
一次完整的http请求处理:
1、建立或处理连接请求;
2、接收请求(通过创建多个Socket文件);
3、解析请求,处理请求;
4、加载用户请求的资源;
5、构建响应报表;
6、发送响应报文;
7、记录访问于日志中;
web资源类型:
URL:统一资源定位符;
scheme://host[:port]/URL
说明:URL的根通常要映射为文件系统上的某路径;
DocumentRoot /var/www/html/
/index.html --> /var/www/html/index.html
/admin/index.html --> /var/www/html/admin/index.html
Alias /images/ "/date/imgs/"
/images/logo.jpg --> /data/imgs/logo.jpg
Page:Page View
UV:Unique View (独立IP预览)
一次通信实例:
在Kongming20主机上运行wget方法客户端程序,在ernest-laptop上运行squid代理服务器程序。客户端通过代理的中转,获取Internet上的主机www.badiu.com的首页文档index.html,如下图:
说明:从上图来看请求数据时从应用层HTTP协议开始调用经过传输层,在请求调用的时候是经过很很多方法的。下面来介绍HTTP请求的一些方法。
HTTP事务:请求(request)与响应(response)
request一般包括的数据:
<method><url><version>
HEADERS#描述数据的原数据类型
<body>#html中本身的网页内容
response一般包含的数据:
<version><status code><reason-phrase>
HEADERS
<body>
补充:其中HEADERS报文头部显示的数据格式为键值对,及name:value
HTTP请求request
一般使用浏览器打开网页发送请求时,可以通过快捷键F12来查看具体的请求报文信息。
解析:这里通过访问百度知道http://jingyan.baidu.com可以在浏览器控制台查看其对应的request报文,这里显示了其中的m.js表示网页里的一个js脚步文件,并显示了其来源URL地址,第二行的GET表示为调用了http请求的GET方法,第三行为响应状态码,最后显示了NDS解析出来的对应的目标IP地址。
HTTP请求方法
当然HTTP请求的方法(request method)不止GET这一种,request方法:
<method>:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH
方法说明:
GET:申请获取资源,而不对服务器产生任何其他影响
HEAD:和GET方法类似,不过仅要求服务器返回头部信息,而不需要传输任何实际内容
POST:客户端向服务器提交数据的方法。这种方法会影响服务器:服务器可能根据收到的数据动态创建新的资源,也可能更新原有的资源。
PUT:上传某个资源
DELETE:删除某个资源
TRACE:要求服务器返回原始 HTTP请求的内容。它可用来查看中间服务器(比如代理服务器)对HTTP请求的影响
OPTIONS:查看服务器对某个特定URL都支持哪些请求方法。也可以把URL设置为*,从而获取服务器支持的所有请求方法。
CONNECT:用于某些代理服务器,它们能把请求的连接数转化为一个安全隧道
PATCH:对某个资源做部分修改
说明:上面的method中,HEAD、GET、OPTIONS和TRACE被视为安全的方法,因为他们只是从服务器获得资源或信息,而不对服务器进行任何修改。而POST、PUT、DELETE和PATCH则影响服务器上的资源。
HTTP响应(reponse)
HTTP响应首先会根据request调用的方法来返回对应的数据报文。
提示:那么当然也可以通过linux上的一些命令工具来获取请求传输报文,如:
#使用curl命令来获取一个http://www2.magedu.com的网站首页的报文首部
[root@root ~]# curl --head http://www2.magedu.com HTTP/1.1 200 OK #1.1表示HTTP 协议版本号,这里为状态码200表示成功 Date: Fri, 30 Sep 2016 12:58:36 GMT #数据建立的时间 Server: Apache/2.4.6 (CentOS) #服务器使用的HTTP协议软件及操作系统 Last-Modified: Tue, 27 Sep 2016 16:20:22 GMT #最后修改的时间 ETag: "11-53d7f9f179beb" #请求标记 Accept-Ranges: bytes #允许大小范围数值为bytes Content-Length: 17 #数据内容的长度 Content-Type: text/html; charset=UTF-8 #网页的类型为html,字符编码为UTF-8
注意:第一行为状态行,”HTTP1,1”表示WEB服务器使用的HTTP协议版本,通常客户端要使用和服务端相同的HTTP协议版本,而”200 OK”表示状态码和状态信息。当然不止这一种状态码了。有关不同的request方法,当然response接收也会得到不同的状态码。
HTTP常见状态码列表介绍:
状态类型 | 状态码和状态信息 | 含义 |
1xx信息 | 100Continue | 服务收到了客户端的请求行和头部信息,告诉客户端继续发送数据部分。客户端通常要先发送Expect:100-continue头部字段告诉服务器自己还有数据要发送。 |
2xx成功响应 | 200 OK | 请求成功 |
3xx重定向响应 | 301 Moved Permanently | 资源被转移了,请求将被重定向 |
304 Found | 表示被申请的资源没有更新,和之前获得的相同 | |
307 Temporary Redirect | 通知客户端资源能在其他地方找到。与302不同的是,客户端可以使用和原始请求相同的请求方法来访问目标资源。 | |
4xx客户端错误 | 400 Bad Request | 通用客户端错误 |
401 Unauthorized | 请求需要认证信息 | |
403 Forbidden | 访问被服务器禁止,通常由于客户端没有权限访问该资源 | |
404 Fot Found | 资源没找到 | |
407 Proxy Authentication | 客户端需要先获得代理服务器的认证 | |
5xx服务端错误 | 500 Intcrnal Server Error | 通用服务器错误 |
503 Server Unavailable | 暂时无法访问服务器 |
本文出自 “孟天霸-IT的垃圾回收站” 博客,转载请与作者联系!
Linux之Web服务(1)HTTP协议