Linux之Web服务(1)HTTP协议html
前言前端
在说到Web服务配置以前,先要了解一下Httpd服务所在的Tcp/Ip分层中的http协议。linux
http协议为应用层协议,主要是负责处理超文本传输。http是一个客户端和服务端请求和应答的标准(TCP)。客户端是终端客户,服务器端是网站。用户经过Web浏览器、网络爬虫或者其它的工具,客户端发起一个服务器上指定端口(默认为80)的HTTP请求。经过HTTP或者HTTPS协议请求资源由统一资源提示符(Uniform Resourcce Identifiers)及URLs来标识。nginx
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。其内部使用了一些方法和规则来规定主机传输超文本时如何进行传输,怎么判断超文本的类型,传输的优先级等等。web
HTTP虽然是客户端或其余程序与Web服务器之间的应用通讯协议,可是HTTP自己包含命令和传输信息,不只能够用于Web访问,也能够同于其余因特网/内联网应用系统之间的通讯,从而实现各种应用层资源超媒体访问的集成。例如:chrome
平时上网时打开浏览器输入一个地址,好比http://www.badiu.com来访问对应的web服务器,这时最多见的http传输。可是后来出现了更高级的手机app,app的开发者们为了同时实现开发的高效率和并保证app软件自己所占硬盘空间小,在设计软件前端时并不使用一些基于语言来编写的窗体或图形,而是直接使用Html5、Js等前端网页使用的语言来设计出不少一种能够嵌套在一些操做系统支持的调用接口上的网页,而后经过调用HTTP对应的协议功能接口来实现。通常这样的应用称为webApp,及基于Web的系统和应用,而在常见的移动端webapp采用响应式网页设计的大部分技术。当使用手机上网下载并安装了一个这样的webapp会发现大小很小,并且响应速度很快,内存也占用很小,由于这种app就是一堆html的等前端语言的组合啊,想一下一个文件夹里存放了一些文本,也不会占太多空间。apache
固然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请求处理:
一、创建或处理链接请求;
二、接收请求(经过建立多个Socket文件);
三、解析请求,处理请求;
四、加载用户请求的资源;
五、构建响应报表;
六、发送响应报文;
七、记录访问于日志中;
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 /p_w_picpaths/ "/date/imgs/"
/p_w_picpaths/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 |
暂时没法访问服务器 |