http协议、报头与apache介绍




相关概念介绍:

http是应用层协议,依赖于传输层tcp协议进行传输。

IANA

(The Internet Assigned Numbers Authority)互联网数字分配机构

0-1023:永久分配给固定应用使用,特权端口,只有管理员能够启动应用进行监听;

1024-41951:注册端口,分配给某应用使用。

41952+:客户端程序随机使用的端口,称之为动态端口或私有端口。其范围定义在/proc/sys/net/ipv4/ip_local_port_range文件中

BSD Socket:

IPC(Inter-Process Communication,进程间通信)的一种实现,允许位于不同主机(或同一台主机)上的进程之间进行通讯。

Socket API:(封装了内核中socket通信相关的系统调用)

SOCK_STREAM:tcp套接字

SOCK_DGRAM:udp套接字

SOCK_RAW:raw套接字(裸套接字)

根据套接字所使用的格式,Socket Domain:

AF_INET:Address Family,IPv4

AF_INET6:IPv6

AF_UNIX:同一主机上不同进程基于socket套接字通讯使用的一种地址Unix_SOCK

TCP FSM:3次握手 --已建立连接--> 4次断开的详细过程

参考fw0124大神博客:http://blog.csdn.net/fw0124/article/details/7452695

TCP协议特征:

(1)面向连接的、可靠的传输层协议;

(2)TCP协议建立在不可靠的网络层IP协议上,IP不能提供任何可靠机制,TCP的可靠性完全由自己实现;

(3)端到端的通信;

(4)全双工方式传输;(两条虚连接线路)

TCP采用的最基本的可靠性技术:

确认与超时重传

流量控制

http

hyper text transfer protocol,是一种应用层协议,默认80/tcp

注意:http是文本协议!

html:hyper text mark language,超文本标记语言

html格式:

      <html>
         <head>
            <title>
            </title>
         </head>
         <body>
            <a href="http://....">...</a>
         </body>
      </html>

css:Cascading Style Sheet

js:JavaScript,客户端脚本,通过客户端浏览器进行解析运行

协议版本:

http/0.9

http/1.0:引入了cache,MIME,method

MIME:Multipurpose Internet Mail Extesion,本是一种邮件协议,引入到http协议后使http能够传输非文本数据

method:数据传输的请求方法(如提交表单用到的post、get方法,head、put、delete、trace、options等)

http/1.1:增强了缓存功能

http/2.0:

工作模式:

http request,http请求报文

http response,http响应报文

一次http请求与响应的过程叫做一次http事务。

web resource,web资源

静态资源

无需服务端做出额外处理

.jpg .png .gif .html .txt .js .css .mp3 .avi

动态资源

服务端需要通过执行程序进行处理,发送给客户端执行结果

.php .jsp

注意:一个页面中展示的资源可能有多个,而每一个资源需要单独请求。

URL,资源标识符

Uniform Resource Locator,用于描述服务器某资源的位置

Scheme://Server_IP[:Port][/PATH]

如:

http://mirror.aliyun.com

加速页面打开;

浏览器开启多线程

浏览器缓存

完整的http请求处理过程:

(1)建立或处理连接

(2)接收请求

(3)处理请求

(4)访问资源

(5)构建响应报文

(6)发送响应报文

(7)记录日志

接收请求的模型

并发访问响应模型

单进程I/O模型(效率太低,不可用):

单进程网络I/O,启动一个进程处理用户请求,一次处理一个请求,多个请求被串行响应。

多进程I/O结构(prefork)

并行启动多个进程,每个进程响应一个请求。

复用I/O结构:

即一个进程响应n个请求

多线程模式(worker)

一个进程生成n个线程,一个线程处理一个请求

事件驱动(event)

一个进程直接响应n个请求

复用多进程I/O结构:

启动多个进程,每个进程再生成多个进程

处理请求:

主要操作为分析请求报文的http请求报文首部

请求报文首部格式:

         <method></URL><VERSION>
         HEADERS:(name:value)...
         
         <request body>

访问资源:

获取请求报文中请求的资源

web服务器:

存放了web资源的主机,负责向请求者提供对方请求的静态资源或动态资源运行结果。

这些资源通常放置于本地文件系统某路径下,此路径称为DocRoot。

web服务器资源路径映射方式:

a. DocumentRoot

b. alias

c. 虚拟主机的DocumentRoot

d. 用户家目录的DocumentRoot

http请求处理的连接模式:

保持连接(长连接):keep-alive

保持客户端与服务器之间的连接,不是每个资源都进行tcp的三次握手四次断开

非保持连接(短连接):

每个资源的都需要tcp的三次握手四次断开的步骤。(注意四次断开第3步服务器回应客户端断开请求后,不会立即请求与客户端断开,而是等待一段时间,而如果这段时间客户端再次请求了与服务端连接,则会继续使用此虚连接)

http服务器程序:

http(apache)

nginx

lighttpd

应用程序服务器:

IIS:.net

tomcat:.jsp

httpd安装与使用:

官方站点:httpd.apache.org

ASF:apache software foundation阿帕奇软件基金会

包名:httpd

进程名:httpd

httpd特征:

高度模块化

core + modules

DSO:

dynamic shared object(动态对象)

MPM:

Multipath processing Modules(多路处理模块)

典型的有:

prefork(默认)

多进程模型。每个进程响应一个请求。

主进程(一个):

子进程(多个):

主进程(仅有一个)生成/回收子进程(多个),创建套接字,接收请求,并派发给子进程,由子进程处理请求。

会预先生成多个空闲子进程,随时等待响应用户请求。可设置最大/最小空闲进程。

worker

多线程多进程模型。每个线程响应一个请求。

主进程(一个):

子进程(多个):

线程(多个):

event

事件驱动模型。多进程,每个进程响应多个请求。

主进程(一个):

子进程(多个):

注意:在http 2.2版本中仍为测试使用;而在2.4版本中为稳定功能,可用于生产环境。

httpd版本:

httpd 1.3:官方停止维护

httpd 2.0

httpd 2.2:centos6默认版本

httpd 2.4:centos7默认版本,最新稳定版,能动态装载多路处理模块。

httpd功能特性:

CGI:Common Gateway Interface

虚拟主机

IP

Port

FQDN

反向代理

负载均衡

路径别名

丰富的用户认证机制

basic

digest

支持第三方模块

httpd安装:

rpm包

编译安装

http协议(2)

URL:Uniform Resource Locator

scheme IP:Port PATH

基本语法:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

params:参数值传递

如:http://www.grub2.com/bbs/hello;gender=f

query:查询语句使用到的变量值传递

如:http://www.grub2.com/bbs/search?username=tom&title=abc

frag:传递本页锚定标识传递

类型:

相对URL:一般在本地站点资源的引用时使用,避免由于站点域名改变而导致资源无法访问。

绝对URL:一般在其他站点资源的引用时使用。

http协议特征:

stateless:无状态跟踪

在未设置"KeepAlive On"时,由于每个资源都需要经过tcp的"三次握手四次断开",所以服务器无法持续追踪访问者来源,即不能判断不同请求是否由同一客户端发出。即使设置了"KeepAlive On"之后,由于"KeepAliveTimeout 15"的设置,服务器也不可能花费太多时间与一个客户端保持持久连接,而连接一旦断开,依旧无法分辨客户端是谁。而假如是需要登录才能访问的资源,这种情况将反复提示用户输入账号信息。

cookie

为了使服务器识别不同的客户端,服务端会在客户端留下一些记录信息,后续访问时,客户端将cookie信息发给服务端,服务器便能够识别了。

类别:

胖cookie

记录用户的浏览记录等大量信息

轻cookie

只记录客户端标识信息,配合服务端的session来保存用户状态信息。

session

关联至客户端cookie。动态网站用于保存客户端状态信息的。

http事务:

http协议的一次请求与响应的过程。理解http事务及http报文语法格式,以便对报文进行分析后,进行不同的操作。

请求:request

响应:response

报文语法格式:

request报文:

<method><request-URL><version>

<headers> ...

空行

<entity-body>

response报文:

<version><status><reason-phrase>

<headers> ...

空行

<entity-body>

method:

请求方法,标明客户端希望服务器端对资源的执行动作

GET:从服务器获取一个资源;这时<entity-body>部分通常为空

HEAD:请求只从服务器获取资源响应首部,而不需要服务器端发送<entity-body>

POST:向服务器发送要处理的数据,而这些数据都是存放在<entity-body>中的

PUT:将请求的主体部分直接存储在服务器上,而不是交给服务器处理,数据在<entity-body>中。这时客户端应该对服务器有存取权限才行。

DELETE:请求删除服务器上的指定资源

TRACE:追踪请求报文到达服务器过程中经过的代理服务器

OPTIONS:请求服务器返回对指定资源支持使用的请求方法

提示:

可以使用telnet命令来测试。

telent IP Port

method /URL version

Host: IP

回车

version

HTTP/<major>.<minor>

status

三位的数字,标记请求过程状态码

1xx:

100-101:信息提示

2xx:

200-206:成功

3xx:

300-305:重定向

4xx:

400-415:客户端错误

5xx:

500-505:服务端错误

常用状态码

200:成功(OK)。请求数据已通过响应报文的entity-body发出。

301:永久重定向(Moved Permanently)。请求的URL指定资源已被删除;但会通过响应报文的首部指明Location的值,以标明资源现在所处的新位置。

302:临时重定向。与301类似,但通过响应报文首部指明的Location的值指明的是资源的临时新位置。

304:客户端发出条件式请求请求获取资源是否发生过修改,而服务器上的资源未发生改变的响应。

401:需要认证(Unauthorized)。资源存在,需要客户端提供认证信息。

403:请求被禁止(Forbidden)。权限不足

404:资源找不到(Not Found)。

500:服务器内部错误(Internal Server Error)。

502:代理服务器从后端服务器收到了一条伪相应(Bad Gateway)。

reason-phrase

状态码所标记状态的简要描述

如:200-->OK  404-->NOT FOUND

headers

每个请求/响应报文可包含0或多个headers。每个headers都有名称,后跟冒号 可选空格 值。(多个值空格隔开)

首部的分类:

通用首部

可以用在请求/相应报文首部

Date:报文创建时间

Connection:连接状态,如keep-alive、close

Via:报文经过的中间节点

Cache-Control:控制缓存

Pragma:与http1.0兼容的控制缓存相关

请求首部

仅可以用在请求报文首部

Accept:可接收媒体类型

Accept-Charset:可接收编码格式

Accept-Encoding:可接收编码格式,如gzip

Accept-Language:可接收的语言

Client-IP:客户端IP

Host:请求的服务器名称和端口号

Referer:当前请求资源的上级资源,常用来分析网站入口来源

User-Agent:客户端代理,即浏览器类型,可通过此条显示不同网页给客户端

条件式请求首部

Expect:期望发送的信息

If-Modified-Since:指定时间至今,请求的资源是否发生过修改。

If-Unmodified-Since

If-None-Match:本地缓存中存储的资源Etag标签是否不匹配服务器中的资源Etag标签。

If-Match

安全请求首部

Authorization:向服务器发送认证信息,如账号密码

Cookie:客户端向服务器发送cookie

Cookie2

代理请求首部

Proxy-Authorization:向代理服务器认证

响应首部

信息类:

Age:相应持续时长

Server:服务程序名称及版本

协商首部:

当某资源有多种表示方法时使用

Accept-Ranges:服务器可接收的请求类型范围

Vary:服务器查看的其他首部列表

安全响应首部:

Set-Cookie:向客户端设置cookie

Set-Cookie2

 WWW-Authenticate:服务端对客户端的质询认证表单

实体首部

描述<entity-body>部分

Allow:列出对此资源可使用的请求方法

Location:回应客户端真正的实体位置

Content-Encoding:资源编码格式

Content-Language

Content-Length

Content-Location:资源真正的实体位置,与Location一样

Content-Type:返回格式为 major/minor

缓存相关:

Etag:资源扩展标签

Expires:资源过期时间

Last-Modified:最后修改时间

扩展首部

entity-body

附加的数据,可能为空。

协议查看或分析工具:

tcpdump、tshark、wireshark

时间: 2024-10-11 12:50:22

http协议、报头与apache介绍的相关文章

IOS面向协议的MVVM架构介绍(来着网络的链接)

https://academy.realm.io/cn/posts/doios-natasha-murashev-protocol-oriented-mvvm/   面向协议的 MVVM 架构介绍 http://www.cocoachina.com/ios/20160108/14911.html    猿题库 iOS 客户端架构设计

http协议报头信息和主体鉴别

http协议报头信息和主体是使用一个空行分开.这是什么空行?简单的说,那是,\r\n\r\n. 所以会server数据的回归\r\n\r\n结果分离,一个是标题信息.它是一个消息的文本. C#例如,下面的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using S

【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)

一.TCP/IP协议簇(DoD参考模型) 用于简化OSI层次,以及相关的标准. 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信 是由一组不同功能的协议组合在一起构成的协议簇 利用一组协议完成OSI所实现的功能 1. TCP/IP 协议簇中的相关协议 TCP/IP协议簇--应用层: TCP/IP协议簇--主机到主机层: TCP与UDP对比: TCP相关报文结构: 源端口:即本地发起连接的端口 目标端口:即要访问的服务的端口 序列号:因为

五种开源协议(GPL,LGPL,BSD,MIT,Apache)介绍

商业化的软件应该主要选用MIT或者Apache license的开源系统作为插件. 什么是许可协议? 什么是许可,当你为你的产品签发许可,你是在出让自己的权利,不过,你仍然拥有版权和专利(如果申请了的话),许可的目的是,向使用你产品的人提供 一定的权限. 不管产品是免费向公众分发,还是出售,制定一份许可协议非常有用,否则,对于前者,你相当于放弃了自己所有的权利,任何人都没有义务表明你的原始作 者身份,对于后者,你将不得不花费比开发更多的精力用来逐个处理用户的授权问题. 而开源许可协议使这些事情变

16 PHP环境搭建,网路基础,Apache介绍

网络基本概念 IP地址 Domain Name DNS hosts文件:本地DNS PHP网页的工作原理 Apache服务器介绍 phpStudy集成环境 在DOS下,启动和停止Apache服务 Apache配置文件 Listen监听端口 ServerRoot服务器根目录 DirectoryIndex默认网站首页 <Directory Directory-path></Directory>目录访问权限 虚拟主机的配置 网络基本概念 IP地址 网络中的每台电脑或网络设备都有一个自己的

GPL、BSD、Apache介绍以及三者之间的区别以及Android与他们之间的关系

一.GPL 要解释清楚GPL这个东西,一定要把GNU说一说. GNU:是"GNU is Not Unix"的递归缩写.它的目标是创建一套完全自由的操作系统,但是由于技术或者其他原因,GNU组织提供的只是运行的Unix上的一些软件:gcc.vi. GPL:是General Public License的缩写.也是GNU中包含的协议条款.GPL是GNU试图保证你共享和修改自由软件的自由--保证自由软件对所有用户是自由的.受GPL协议保护的软件,只要使用者对软件进行二次开发或者修复BUG之类

Apache介绍

如何使用Apache许可证 若用户需要应用Apache许可证,请将以下示例使用适当的注视方法包含在作品源文件中,将括号"[]"中的字段以用户自身的区分信息来替换.另外建议将文件名或类别名以及目的写在跟页码显示相同的地方,以更加容易的区分出第三方档案. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); yo

核新通达信双协议异步交易接口介绍

HxTrade_SDK介绍文档 本文档文档介绍了核新通达信双协议异步交易SDK HxTrade的用法.如果您需要该接口或者合作项目开发请联系我下载演示程序,QQ:3257418287. 市面上券商的交易软件多采用2种协议:核新和通达信SSL,这两种协议一起大约占了95%的市场份额. HxTrade接口可同时支持这两种协议,也就是支持绝大多数的券商,可直接与券商服务器进行交互,具备普通交易和信用交易.撤单.当日查询.历史查询等 功能. HxTrade采用异步方式返回结果,用户在调用API接口后无需

http协议get head简单介绍

一.HTTP协议简介 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议,自 1990 年起,HTTP 就已经被应用于 WWW 全球信息服务系统. HTTP 是一种请求/响应式的协议.一个客户机与服务器建立连接后,发送一个请求给服务器:服务器接到请求后,给予相应的响应信息. HTTP 的第一版本 HTTP/0.9是一种简单的用于网络间原始数据传输的协议: HTTP/1.0由 RFC 1945 定义 ,在原 HTTP/0.9 的基础上,有了进一步的改