Linux学习笔记<二十九>——http服务

基础概念:

HTTP:Hyper Text Transfer Protocol 超文本传输协议

versions:

HTTP/0.9:只接收GET一种请求方法,只支持纯文本

HTTP/1.0:支持PUT、POST、DELETE和HEAD,支持MINE

HTTP/1.1:在HTTP/1.0的基础上,增加了缓存功能,支持长连接,支持管道方式同时                  发送多个请求

HTTP请求方法:获取资源的方法

HTTP/0.9:GET

HTTP/1.0:PUT(修改服务器上的内容),POST,DELETE(请求删除服务器上的request-URL),HEAD

其他:TRACE,OPTIONS,CONNECTION

MINE:Mutipurpose Internet Mail Extension 多用途互联网邮件扩展

将非文本数据在传输前重新编码为文本格式,使得HTTP可以传输非文本文件并展示

方法:将非文本数据交给指定的进程在传输前重新编码为文本格式,接收方能够用相反的方法          将其重新还原为原来的文件,还能够对用相应的程序来打开此文件

HTML:HyperText Mark Language 超文本标记语言,用来开发超文本

Browser:浏览器,客户端,用于解析HTML

Web资源(Web对象):多个资源可以被整合成一个html文档

URL:Uniform Resource Locator,定位Web资源

格式:protocol://HOST:port/path/to/fole

动态网页:服务器端存储的文档非HTML格式,而是编程语言开发的脚本

客户端通过GET请求发送相关参数给服务器端

脚本接受参数之后在服务器运行一次,运行完成后会生成HTML文档,把生成的文档发给客户端

HTTP报文:请求报文、响应报文

请求报文格式:

<method> <request-URL> <version>

<headers>

<request-body>

method:请求方法

GET:请求参数和对应的值都附加在URL后面,一般不包含<request-body>请求数据

限制:参数长度受限,不适合传输大量数据

不适合传送私密数据

POST:将请求参数封装在<request-body>字段中,参数长度不受限

HEAD:用法和GET,但服务器端接收到HEAD请求方法后只返回响应头,而不会返回

<response-body>响应数据

request-URL:即请求的URL

version:HTTP版本号

headers:请求头部,格式 关键字:值

Accept:告诉服务器,本客户端能够接受的响应类型/响应工具

Cookie:发送客户端的Cookie

Referer:表示此次请求是从那个URL过来的

Cache-Control:对本次请求所返回的数据缓存进行控制

User-Agent:客户端的浏览器信息

GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>  Connection: Keep-Alive  
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
POST /search HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>  Connection: Keep-Alive  
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r  

hl=zh-CN&source=hp&q=domety

响应报文语法:

<version> <status> <reson-phrase>

<headers>

<response-body>

version:HTTP版本号

status reson-phrase:状态码 原因描述

1xx:指示类的信息

100 Continue:表示服务器仅收到部分请求,继续接收客户端的请求

101 Switching Protocols:服务器遵循从客户的请求转换到另一种协议

2xx:成功类的信息

200 OK:请求成功

201 Create:请求已被创建,同时新的资源被创建

202:Accepted:请求已被接收,但是处理未完成

3xx:重定向类的信息

301 Moved Permanently:请求的页面已经转移至新的url

302 Found:请求的页面已经临时转移至新的url

304 Not Modified:服务器告诉客户端,原来缓存的文档还可以继续使用

4xx:客户端错误类的信息

400 Bad Request:服务器未能理解请求

401 Unauthorized:请求的页面需要用户密码认证

403 Forbidden:禁止客户端访问请求的页面

404 Not Found:服务器无法找到客户端请求的页面

5xx:服务器端错误类的信息

500 Internal Server Error:请求未完成,服务器端遇到不可预知的错误

503 Server Unavailable:请求未完成,服务器当前不能处理客户端的请求

504 Gateway Timeout:网关超时

HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122

<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

常见的Client:

IE

Firefox

Chrome

Opera

Safari

常见的Server:

Apache->httpd

IIS

nginx

lighttpd

thttpd:嵌入式

常见的应用程序服务器

IIS(微软)

tomcat(apache,JSP,source)

Websphere(IBM,JSP,commodity)

Weblogic(Oracle,JSP,commodity)

JBoss(RedHat)

Web服务器的主要操作

1、建立连接——接受或拒绝客户端连接请求;

2、接收请求——通过网络读取HTTP请求报文;

3、处理请求——解析请求报文并做出相应的动作;

4、访问资源——访问请求报文中相关的资源;

5、构建响应——使用正确的首部生成HTTP响应报文;

6、发送响应——向客户端发送生成的响应报文;

7、记录日志——当已经完成的HTTP事务记录进日志文件;

详细讲解用户访问web服务器的整个过程

简单点访问原理:客户端用户发送一个http请求,http请求到达服务器之后。先进入服务器的内核空间,服务器的内核空间,将其进行解析。发现其实一个web请求。然后将其给本机的用户进程http进程。http进程再发送一个请求,到内核空间,内核空间将我们要访问的数据从硬盘上提取出来。返回给我们的用户空间进程。用户空间进程再将其内容发送给内核空间。内核空间经过层层转换发送给客户端。

复杂点访问原理:客户端用户发送一个http请求,http请求到达服务器之后。先进入服务器的内核空间,服务器的内核空间,将其进行解析。发现其实一个web请求。然后将其给本机的用户进程http进程。http进程发现其要访问的是动态网页,通过其他协议,首先调用动态网页的程序即动态网页解释器再将内容给送到内核空间,内核空间将我们要访问的数据从硬盘上提取出来进行处理。返回给我们的用户空间的的解释器进程。解释器进程再将生成的文档再通过协议返回给web用户进程。web服务器再将其发送给我们的内核。内核空间经过层层转换发送给客户端。

Web服务器处理并发连接请求的架构方式

1、单线程web服务器(Single-threaded web servers)

此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。

2、多进程/多线程web服务器

此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。

3、I/O多路复用web服务器

为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。

4、多路复用多线程web服务器

将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。

Web代理服务器

Web代理服务器工作于web客户端和web服务器之间,它负责接收来自于客户端的http请求,并将其转发至对应的服务;而后接收来自于服务端的响应,并将响应报文回送至客户端。

时间: 2024-10-16 03:42:00

Linux学习笔记<二十九>——http服务的相关文章

Linux学习笔记&lt;二十五&gt;——openssh服务

ssh:Secure SHell ssh特点: 基于TCP22号端口: 密文认证: 密文传输数据 openssh是ssh的开源实现,支持ssh v1和ssh v2 但ssh v1无法解决中间层攻击,建议不要使用 客户端: Linux:ssh Windows:putty,SecureCRT,SSHSecureShellClient,Xmanager 服务器端: Linux:sshd openssh相关命令 1.ssh -X:enable X11 forwarding -Y:enable trust

Linux学习笔记&lt;二十五&gt;——openssl服务

openssl服务:SSL的开源实现,官方站点 www.openssl.org 组成: libcrypto:通用加密库 libssl:TLS/SSL的实现库 基于会话的,实现了身份认证,数据机密性和会话完整性的TLS/SSL库 openssl:多用途命令工具 可以实现私有证书颁发机构 openssl常用子命令: openssl version:查看openssl的版本 [[email protected] named]# openssl version OpenSSL 0.9.8e-fips-r

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来

linux学习笔记-第十九课-LAMP之网站搭建(二)

一.网站搭建前提 搭建好LAMP运行环境 下载网站程序,这里以Discuz X 3.2 作为示例 Discuz 程序下载地址:    简体中文GBK http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip    繁体中文BIG5 http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_TC_BIG5.zip    简体UTF-8 http://download.comsenz.c

[傅里叶变换及其应用学习笔记] 二十九. 高维Ш函数修改版

一维Ш函数复习 我们前面(十六课,十七课)已经学习过一维的Ш函数,标准的Ш函数表现为无数个脉冲函数分布在整数点上, 我们定义Ш为 $Ш(x) = \displaystyle{ \sum_{k=-\infty}^{\infty}\delta(x-k) }$ 而Ш函数最为深刻的一个性质就是:Ш的傅里叶变换是它自身 $\mathcal{F}Ш=Ш$ 进一步推广到脉冲间隔为$p$的函数$Ш_p$ $\displaystyle{ Ш_p(x)=\sum_{k=-\infty}^{\infty}\delta

Linux学习笔记(十九)文件压缩

一.常见的压缩文件 Windows .rar .zip .7z Linux .zip,.gz,.bz2,.xz,.tar.gz,.tar.bz2,.tar.xz文件压缩可以节省内存,也可以节省传输速度 二.gzip首先创建了一个文件夹 /tmp/d6z/找了些比较大的文件写入1.txt例如find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \ :多执行几次 gzip 1.txt 就可以将文件1.txt压缩并且删除源文

linux学习笔记-第十九课-LAMP之php 与 mysql 配置(三)

一.php 编译完的php,配置文件为空,我们需要将php的配置文件(php.ini)从解压的源码包中的php.ini-development(开发调试模板)和php.ini-production(生产运行模板)中复制一份到php的配置目录中,且名字改为php.ini 1 )disable_functions 配置 默认为空,修改为 disable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passt

Linux学习笔记&lt;二十六&gt;——DNS服务器

DNS(Domain Name System 域名系统):提供Internet上域名到IP地址的映射 域名:又叫主机名,FQDN(Full Qualified Domain Name完全限定域名) 基本信息: Linux中通常使用bind服务来提供DNS服务器 应用层协议 基于UDP53端口号:用于查询 基于TCP53端口号:用于主从服务器同步数据 基于TCP953端口号:rndc用于远程控制DNS服务器 解析方式: 正向:FQDN <--> IP 反向:IP <-->FQDN 解