http协议web服务


1. MIME

MIME多用途互联网邮件扩展
作用:将非文本数据在传输前重新编码为文本格式,接受方能够用相反的编码方法将其重新还原为原来的格式,还能够调用相应的程序来打开此文件
如:在web服务中,http协议也会用到此项技术,在传输前先协商为什么格式的编码,然后进行传输方便传输后文件识别。

2. HTTP协议首部

http协议首部就像信封的选项,方便进行发信和回信

2.1 请求报文语法

<method> <request-URL> <version> #起始行
<header>    #首部
            #必须要有此空行
<entity-body> #相应主体

2.1.1 header结构

http协议的玩法的精髓就在header首部,一切技能都在header首部展现的淋漓尽致。header的构成类似字典的形式,关键字:值,首部信息可以有很多,所有http协议的功能都包含在header中。
举例抓包如下:

GET / HTTP/1.1  #起始行
Host: www.b.com #host字段
Connection: keep-alive #头部表示保持连接
Upgrade-Insecure-Requests: 1 #可支持ssl协议
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36 #浏览器信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 #mime类型
Accept-Encoding: gzip, deflate #可支持压缩
Accept-Language: zh-CN,zh;q=0.9 #可支持编码

2.1.2 虚拟主机

由上可知一个http请求如下,但是基于域名的虚拟主机如何实现呢?根据请求协议可知:host字段时一个域名对应一个目录,request-RUL又是一个路径,因此二合一就可以确定一个精确的URL。

<method> <request-URL> <version>
<header>    

<entity-body> 

举例如下:

[root@localhost ~]#telnet 172.16.102.100 80
Trying 172.16.102.100...
Connected to 172.16.102.100.
Escape character is '^]'.
GET /b.txt HTTP/1.1
Host:www.b.com

HTTP/1.1 200 OK
Date: Fri, 01 Jun 2018 21:59:42 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Last-Modified: Fri, 01 Jun 2018 09:06:28 GMT
ETag: "c-56d90e6340040"
Accept-Ranges: bytes
Content-Length: 12
Content-Type: text/plain; charset=UTF-8

hello b.txt

2.2 相应报文语法

<version> <status> <reason-phrase> #reason-phrase是描述信息 起始行
<header>    #首部
            #必须要有此空行
<entity-body > #相应主体

2.2.1 status状态码

  • 1xx:纯信息

  • 2xx:”成功”类信息

  • 3xx:重定向类的信息
    301 表示永久重定向
    302 表示临时重定向
    304 表示缓存资源相应

  • 4xx 客户端错误类信息
    404 表示访问的错误资源,即服务器没有对应的资源

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

3. web服务器

3.1 服务器主要操作

1.建立连接 —–》tcp三次握手建立连接
2. 接受请求 —–》通过网络读取http请求报文
3. 处理请求—–》通过请求报文利用读函数进行读取请求内容
4. 访问资源—-》根据读取请求报文进行访问对于资源,读取到内存
5. 构建相应报文—–》根据请求内容和服务器配置信息进行构建相应报文
6. 发送相应—–》向客户端发送相应报文
7. 记录日志—–》完成日志的记录

3.2 服务器IO模型

根据服务器IO模型,能够指导程序员友好编程的思路,运维人员更深刻理解优化应用。

3.2.1 多线程轮询模型——apache的worker模型

在此种模型中,多进程可以同时工作,每进程又可以生产一个主线程和多个子线程,每个子线程进行相应http请求,对于相应完成后对线程资源的释放是通过for循环定期的检查每个线程,完成请求则释放线程资源
这里写图片描述

3.2.2 事件驱动模型——apache的event模型

事件驱动模型相当于对线程设置flag=FALSE,当线程完成相应请求时,flag=TRUE,此时需要两种方式进行检测线程的状态,一种为for循环检测flag为TRUE的线程,若为TRUE则释放此线程的资源,另外一种方式为一旦线程为TRUE,则通知主线程,请求主线程释放此线程的资源。
这里写图片描述

3.3 CGI工作原理

都知道web服务器只能处理静态页面,动态页面只能通过对于的解释器才能解释为对应的内容,再次通过web服务器构建相应报文发送给客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值