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的网站首页的报文首部

[[email protected] ~]# 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


暂时无法访问服务器

时间: 2024-12-12 14:40:19

Linux之Web服务(1)HTTP协议的相关文章

Linux之Web服务(2)Httpd服务配置之一

Linux之Web服务(2)Httpd服务配置之一 Apache HTTP Server Apache HTTP 服务器,简称Apache,是非常留下的Web服务器软件.通常和脚步语言比如PHP,数据库MySQL一起工作,合成为LAMP栈(Linux, Apache, MySQL, PHP). 当然流行的Web服务器还有nigix,但是nigix虽然轻量级很稳定,但是功能并不如Apache HTTP功能丰富,并且现在的Apache HTTP还支持模块化功能,及可以开发自己的功能模块并加入到此We

Linux之Web服务(2)Httpd服务配置之三

Linux之Web服务(2)Httpd服务配置之三 前言 默认安装的Httpd服务一般只有默认的一个DocumentRoot节点配置,及一个站点文档资源存放根目录,但是在生产环境中需要有多种分类的资源,比如用于外部访问和内部访问,又或者是资源本身类型,比如分别用来存放一些文档.图片.单项加密算法文件等,为了更好分配站点管理的资源,Httpd服务提供了VirtualHost及虚拟主机的配置,可以在一个Httpd服务下模拟进行部署多个站点,这样不同的站点进行不同的配置,更方便进行分布式管理. Vir

Linux之Web服务(2)Httpd服务配置之四

Linux之Web服务(2)Httpd服务配置之四 前言 接上一篇的虚拟主机,本片主要介绍虚拟主机的一些搭建和部署,本篇通过一个具体的案例来显示虚拟主机的作用和特性. 案例功能介绍: (1) 准备DNS解析3个域名或者添加/etc/hostst/3条主机名IP档案,解决域名解析 (2) 基于主机名实现三个虚拟主机 (3) 每虚拟主机使用独立的访问日志和错误日志 (4) 在第二个虚拟主机上提供/status: (5) 在第三个虚拟主机提供路径别名/bbs,访问其它文件系统路径: (6) 第三个虚拟

Linux之web服务

在互联网飞速发展的今天,大家最常用的就是利用互联网访问网站,今天就来为大家介绍一下如何在Linux下搭建web站点. 一.WEB简介 Web本意是蜘蛛网和网的意思,在网页中我们常称为网页,其表现形式主要有三种:超文本.超媒体.超文本传输协议. 1.web服务的链接是怎么实现的 基于套接字实现:用来建立本地进程与设备的关联关系.(IP+端口) 众所周知的公用端口:0-1023 只有管理员才有权限,永久分配给某应用 1024-41651 注册端口,只有一部分端口被注册 41953-65535 动态端

Linux之Web服务(2)Httpd服务配置之二

Linux之Web服务(2)Httpd服务配置之二 前言 在上一篇通过一些简单的案例或说明来介绍了部分关于Httpd2.4中httpd.conf配置文件中的配置选项及对应的功能.主要是对访问控制和在处理对指定目录或文件进行访问控制的一些安全问题性的处理.但是一直没有提到访问控制的具体讲解,本篇列出访问控制的具体使用选项和功能,以及其它高级配置. 1.Httpd2.4 文档访问授权具体参数 前提:文档访问授权选项配置只适合在以下标签中生效: <Directory >  <FIles>

Linux之web服务的搭建

今天我来给大家分享一下在Linux下搭建web服务器 1.安装包 yum install httpd 安装完成后我们会在/etc目录下看到有一个httpd的目录 我们的默认文件存放位置在/var/www/html 然后修改我们的注配置文件 vim /etc/httpd/conf/httpd.conf ServerName 自己的主机名:80 表示服务名称为自己的主机名,监听在80端口 然后就可以建文件了 vim /var/www/html/index.html hello 这就是我们的主页文件了

WEB集群笔记(1)-Web服务和HTTP协议

01.Web服务和HTTP协议 01.01.Web服务的基础:DNS Web服务离不开基础网络和DNS服务. 用户访问网站基本流程,即DNS解析流程 1).浏览器输入网址www.baidu.com,查找本地DNS缓存及hosts文件信息,如果有直接获取IP地址: 2).若没有,发送解析请求给DNS服务器地址,如果LDNS服务器缓存有对应地址,则获取IP地址; 3).若没有,LDNS继续请求DNS根(.)服务器,一层层查找直到找到baidu.com域名对应的授权DNS服务器,该服务器返回IP解析记

linux中web服务中间件软件及服务端和客户端软件

一.中间件: 1.认识中间件: 中间件(英语:Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务.面向服务的体系结构等中应用比较广泛. IDC对中间件的定义表明,中间件是一类软件,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作;中间件是基于分布式处理的软件,最突出的特点是其网络通信功能. 该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那

web服务以及http协议

在使用计算机的过程中,最容易让人想起的就是浏览网页的经历,只需要用户输入网址,搜索及可以获得想要的资源,那么这个过程计算机是如何完成的? web服务是C/S架构:用户使用的浏览器成为客户端代理,用户访问的资源其实是存储在服务器端.client通过网址(经过dns解析)能够定位自己想要访问的资源位于互联网的哪台服务器,server如何知道客户端请求的是什么内容,那就是http协议 URI:统一资源标识符,用于在全球范围唯一的标识某资源     URL:统一资源定位符,是URI的一个子集,用户唯一标