apache / Web Service

1.1 http基础原理

 

1、html,css,js;

html:hyper  text  mark  language,超文本标记语言,是一种编程语言;
html格式:

<html>
  <head>
    <title>TITLE<>/title
  </head>
  <body>
    <h1></h1>
      <p> hello,world.<a href="http://lucifer.kouyuushinn.cn/download.html"> hello,world.</a></p>
    <h2></h2>
  </body>
</html>

css:Cascading Style Sheet,层叠样式表;
js:JavaScript,java客户端脚本;

2、http:hyper  text  transfer  protocol,属于应用层协议,使用TCP的80端口,属于文本协议;

2.1  http协议版本:
1> http/0.9:原型版本,功能简陋;
2> http/1.0:引入了cache,MIME,method;
        MIME:全称为’Multipurpose  Internet  Mail  Extensions’,多用途互联网邮件扩展;
        MIME支持SMTP协议基于文本编码传输非文本数据,比如图片、音乐流等多媒体数据;
        method:GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS;
3> http/1.1:增强了缓存功能;
4> http/2.0:

2.2  http工作模式:
     http请求报文:http  request;
     http响应报文:http  response;

2.3  web资源(web  resource)分类:
1> 静态资源:无需服务端做出额外处理,例如,”.jpg,.png,.html,.txt,.js,.css,.mp3,.avi”;
2> 动态资源:服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果,例如,.php,.jsp;

一个页面中展示的资源可能有多个;每个资源都需要单独请求;

资源的表示机制采用URL表示:
URL:Unifrom  Resource  Locator,统一资源定位符;用于描述服务器某特定资源的位置;

2.4  一次完整的http请求处理过程:
1>  建立或处理连接:接收请求或拒绝请求;
2>  接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;
3>  处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;
4>  访问资源:获取请求报文中请求的资源;
5>  构建响应报文;
6>  发送响应报文;
7>  记录日志;

2.5  http接收请求的模型:
并发访问响应模型:
1> 单进程I/O结构:启动一个进程处理用户请求;一次只能处理一个请求,多个请求被串行响应;
2> 多进程I/O结构:并行启动多个进程,每个进程响应衣一个请求;
3> 复用I/O结构:一个进程响应N个请求;
          多线程模式:一个进程生成n个线程,一个线程处理一个请求;
          事件驱动(even-driven):一个进程直接响应处理n个请求;
4>  复用的多进程I/O结构:启动多个(m)进程,每个进程生成n个线程;响应的请求数量为m*n;

http处理请求:分析请求报文中的http请求报文首部;
 1>  http请求报文首部;
 2>  http响应报文首部;

http请求报文首部的格式:
    <method><URL><VERSION>
               HEADERS:(name:value)
   <request body>

访问资源:获取请求报文中请求的资源;

web服务器的资源路径映射方式:
 1> docroot;
 2> alias;
 3> 虚拟主机的docroot;
 4> 用户主目录的docroot;

http请求处理中连接模式:
  保持连接(长连接):keep-alive;
  非保持连接(短连接);

3、http服务器中常用的开源程序:httpd,nginx,lighttpd;
      应用程序服务器:IIS(.net),Tomcat(.jsp);

4、URL:Uniform  Resource  Locator,统一资源定位符;

URL基本语法结构:
<scheme>://[<user>[:<password>]@]<host>:<port>/<path>[;<params>][?<query>][#<frag>]

说明:
scheme URL方案,ftp、http、https…
<host>:<port>          服务器地址;
/<path>                      资源路径;
<params>                   参数;向URL传递一个参数来希望前端浏览器展示信息的格式等,不需要查询后端数据库;
?<query>                    向动态资源传递后端数据库执行时的查询条件
#<frag>                      标记;比如在一个文档页面中有多个超链接,每个超链接都是指向此文档的固定位置;

举例如下:

http://xinwen.eastday.com/a/180603033532484.html?qid=news.baidu.com&btype=index_jrdftt&subtype=redian&rcgid=d9d63edf2fe5210a&pgnum=1&idx=4&ishot=0&recommendtype=-1&suptop=0&domain=xwtt

http://httpd.apache.org/docs/2.4/mod/directive-dict.html#Default

备注,http协议默认是无状态:客服端第一次连接、断开后,第二次再次连接,服务端是无法判断此客户端之前是否访问过;

5、cookie

每个客户端访问服务端时都能获取到令牌为标识的唯一ID标识符;

6、http事务类型

 1> 请求:request;
 2> 响应:response;

请求报文的语法格式:
<method><request_URL><version> 请求报文的首行;
<headers>

<entity_body>

响应报文的语法格式:
<version><status><reason_phrase> 响应报文的首行;
<headers>

<entity-body>

上面关键词说明:
method:   请求方法,标明客户端希望服务器对资源执行的动作;比如,GET、HEAD、POST等;
version:    http/<major>.<minor>;
status:      服务器端返回给客户端的状态码,由3位数字组成;标记请求处理过程中发生的情况;
reason_phrase:  对状态码的简要描述;
headers:              每个请求或响应报文可包含任意个首部信息;每个首部都有首部名称,名称后面后面跟一个冒号,后面再跟一个可选的空格,接着是一个值;
<header_name:[ ]value>;
entity-body:     请求或响应时附加的数据;

>举例<
https://www.redhat.com/en/customers

General

Request URL: https://ing-district.clicktale.net/ctn_v2/wr/?1769182196039737&25612&10&1&0&1&264&subsid=233096&msgsize=10
Request Method: POST
Status Code: 200 OK
Remote Address: 52.3.205.195:443
Referrer Policy: no-referrer-when-downgrade


Response Headers      view source

Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 1
Content-Type: text/plain; charset=UTF-8
Date: Sun, 03 Jun 2018 19:05:12 GMT
X-Trace-Token: 948397c9828d-8679045094


Request Headers       view source

Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Length: 908
Content-Type: text/plain
Host: ing-district.clicktale.net
Origin: https://www.redhat.com
Referer: https://www.redhat.com/en/customers
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36


Query String Parameters      view source       view URL encoded
1769182196039737: 
25612: 
10: 
1: 
0: 
1: 
264: 
subsid: 233096
msgsize: 10


Request Payload

qisMobile&0&8e9oOnload | Anonymous&AoMCVID:81301564262684445211051117117732510240&CoCampaign%3A%20F11165%20%E2%80%93%20Improve%20SSO%20Messaging%20%26%20Drive%20Additional%20Reg%E2%80%99ns%20-%2005%2F16%2F18%20%7C%20Experience%3A%20Experience%20B&AoCampaign%3A%20F11165%20%E2%80%93%20Improve%20SSO%20Messaging%20%26%20Drive%20Additional%20Reg%E2%80%99ns%20-%2005%2F16%2F18%20%7C%20Experience%3A%20Experience%20B&AoCampaign%3A%20F11165%20%E2%80%93%20Improve%20SSO%20Messaging%20%26%20Drive%20Additional%20Reg%E2%80%99ns%20-%2005%2F16%2F18%20%7C%20Experience%3A%20Experience%20B&AoCampaign%3A%20F11165%20%E2%80%93%20Improve%20SSO%20Messaging%20%26%20Drive%20Additional%20Reg%E2%80%99ns%20-%2005%2F16%2F18%20%7C%20Experience%3A%20Experience%20B&AoCampaign%3A%20F11165%20%E2%80%93%20Improve%20SSO%20Messaging%20%26%20Drive%20Additional%20Reg%E2%80%99ns%20-%2005%2F16%2F18%20%7C%20Experience%3A%20Experience%20B&A

备注1,method的类型:
—————————
GET:从服务器获取一个资源;
HEAD:只从服务器获取资源的响应首部;
POST:向服务器发送要处理的数据;
PUT:将请求的主体部分存储在服务器上;
DELETE:请求删除服务器上指定的数据;
TRACE:追踪请求到达服务器中间经过的代理服务器;
OPTIONS:请求服务器返回对指定资源支持使用的请求方法;

备注2,协议查看或分析的工具:tcpdump、tsshark、wireshark;
———————————————————

备注3,status类型;
————————
1XX:100-101,信息提示;
2XX:200-206,成功;
3XX:300-305,重定向;
4XX:400-415,客户端错误类信息;
5XX:500-505,服务器端错误类信息;

常用的状态码:
200:请求的所有数据通过响应报文的”entity-body”部分发送;ok;
301:请求的URL指向的资源以及被删除;但在响应报文中通过首部”location”指明了资源现在所处的新位置;’Moved permanently’;
302:与301相似,但在响应报文中通过”location”指明资源现状所处的临时新位置;’Found’;
304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;’Not Modidfied’;
401:需要输入账号、密码的认证方式才能访问资源;’Unauthorized’;
403:请求被禁止;’Forbidden’;
404:服务器无法找到客户端请求的资源;’Not Found’;
500:服务器内部错误;’Internal Server Error’;
502:代理服务器从后端服务器收到了一条伪响应;’Bad Gateway’;

备注4,headers分类;
——————————-
1> 通用首部;
    Date:报文的创建时间;
    Connection:连接状态,如’keep-alive’、’close’;
    Via:显示报文经过的中间点;
    Cache_Control:控制缓存;

2>请求首部;
   Accept:告诉服务器可接受媒体类型;
   Accept-Charset:字符集;
   Accept-Encoding:编码格式,一般指压缩格式;如gzip;
   Accept-Language:语言类型;

   Host:请求的服务器端的名称和端口;
   Referer:包含当前正在请求的资源的上一级资源;2个资源的完整路径;
   User-Agent:客户端代理;

条件式请求首部;
   Expect:
   If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改;
   If-Unmodified-Since:
   If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的ETag不匹配;
   If-Match

安全请求首部;
   Authorization:向服务器发送认证信息,如账号密码;
   Cookie:客户端向服务器发送cookie;cookie版本1;
   Cookie2:cookie版本2;

代理请求首部;
   Proxy-Authorization:向代理服务器认证;

3>响应首部;
信息类:
   Age:响应持续时长;
   Server:服务器程序软件名称、版本;

协商首部:
  Accept-Ranges:服务器可接受的请求的范围类型;
  Vary:服务器支持的其他可查看的首部列表;

安全响应首部:
   Set-Cookie:向客户端设置cookie;cookie版本号是1;
   Set-Cookie2:向客户端设置cookie;cookie版本号是2;
   WWW-Authenticate:服务器发送给客户端的质询认证表单;

4>实体首部;
   Allow:列出对此实体可使用的请求方法;
   Location:告诉客户端真正的实体位置;

   Content-Encoding:数据压缩格式;
   Content-Language:主体的语言类型;
   Content-Length:主体的长度;
   Content-Location:主体真正所处位置;
   Content-Type:主体的对象类型;

缓存相关:
   ETag:实体的扩展标签;
   Expires:实体的过期时间;
   Last-Modified:最后一次修改的时间;

Leave a Reply

Your email address will not be published. Required fields are marked *