http介绍

来源:互联网 发布:淘宝兼职美工怎么收费 编辑:程序博客网 时间:2024/06/05 14:54

http简介:
超文本的传输协议,
http协议是无状态的,在非持久连接中客户端每次对服务端进行资源请求都会进行三次握手,所以每次请求都是一相对服务器都是一个新的请求,所以服务器无法追踪访问者来源.
解决http无状态的实现:
cookie :在客户端向服务端第一次发送请求时,服务端会生成一个cookie(一段随机的数据,此段数据能唯一的标识出客户机),并将cookie发送个客户端,客户端保存在本地,每个cookie都有固定的作用范围.在客户端在非第一连接服务端时都会将适用于该服务器的cookie发送至服务端.所以服务端可以基于cookie识别出用户的身份.
cookie可以分为胖cookie与瘦cookie,
session :cookie会被关联至session上
http的事务:
http一次请求一次响应对应一个事务。所以http的报文分为两种格式,请求报文(request),响应报文(response)
请求报文格式:

request报文



method: 请求方法,标明客户端希望服务器对资源执行的动作
GET:从服务器获取一个资源
HEAD:只从服务器获取文档的响应首部
POST:向服务器输入数据,通常会再由网关程序继续处理
PUT:将请求的主体部分存储在服务器中,如上传文件
DELETE:请求删除服务器上指定的文档
TRACE:追踪请求到达服务器中间经过的代理服务器
OPTIONS:请求服务器返回对指定资源支持使用的请求方法
响应报文

response报文



status(状态码):
1xx: 100-101 信息提示
2xx: 200-206 成功
200: 成功,请求数据通过响应报文的entity-body部分发送;OK
3xx: 300-305 重定向
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置; 永久重定向 Moved Permanently
302: 与301相似,但在响应报文中通Location指明资源现在所处临时新位置; 临时重定向Moved Temporarily
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端; Not Modified
4xx: 400-415 错误类信息,客户端错误
401: 需要输入账号和密码认证方能访问资源; Unauthorized
403: 请求被禁止; Forbidden
404: 服务器无法找到客户端请求的资源; Not Found
5xx: 500-505 错误类信息,服务器端错误
500: 服务器内部错误; Internal Server Error
502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到父网关; Bad Gateway
请求首部:
通用首部
Date: 报文的创建时间
Connection:连接状态,如keep-alive, close
Via:显示报文经过的中间节点(代理,网关)
Cache-Control:控制缓存,如缓存时长
MIME-Version:发送端使用的MIME版本
请求首部
Accept:通知服务器自己可接受的媒体类型
Accept-Charset: 客户端可接受的字符集
Accept-Encoding:客户端可接受编码格式,如gzip
Accept-Language: 客户端可接受的语言
Client-IP: 请求的客户端IP
Host: 请求的服务器名称和端口号
Referer:跳转至当前URI的前一个URL
User-Agent:客户端代理,浏览器版本
条件式请求首部
Expect:允许客户端列出某请求所要求的服务器行为
If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改
If-Unmodified-Since:与上面相反
If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配
If-Match:与上面相反
安全请求首部:
Authorization:向服务器发送认证信息,如账号和密码
Cookie: 客户端向服务器发送cookie
Cookie2:用于说明请求端支持的cookie版本
代理请求首部:
Proxy-Authorization: 向代理服务器认证
响应首部
信息性:
Age:从最初创建开始,响应持续时长
Server:服务器程序软件名称和版本
协商首部:某资源有多种表示方法时使用
Accept-Ranges:服务器可接受的请求范围类型
Vary:服务器查看的其它首部列表
安全响应首部:
Set-Cookie:向客户端设置cookie
Set-Cookie2: 以上面相似
WWW-Authenticate:来自服务器对客户端的质询列表
实体首部
Allow: 列出对此资源实体可使用的请求方法
Location:告诉客户端真正的实体位于何处
Content-Encoding:对主体执行的编码
Content-Language:理解主体时最适合的语言
Content-Length: 主体的长度
Content-Location: 实体真正所处位置
Content-Type:主体的对象类型,如text
缓存相关:
ETag:实体的扩展标签
Expires:实体的过期时间
Last-Modified:最后一次修改的时间
扩展首部
没讲
http版本:
http/0.9 :http协议的原型版本,仅支持简单的资源交互,并不支持多媒体。或者说只能支持html超文本语言,而html 中只能存在超链接。
http/1.0 :在原有的基础上增加了http首部,http请求类型,以及MEMI机制
http/1.1 :增强了缓存功能
http/2.0 :

MEMI介绍:
MEMI称为多用途互联网邮件扩展,MEMI可应将多媒体信息在传输时以文本的编码进行传输,客户端收到后进行逆操作,在传输数据时对传输的数据附加类型标记,从而实现了使用文本传输非文本。标记分为主类型与次类型,
响应报文中的类型与请求的文件后缀有关。或者受响应报文中MEMI对文件类型的标示依据是文件的后缀。
类型:
主类型/次类型
major/minor
text/plain
text/html
text/css
image/jpeg
image/png
video/mp4
application/javascript
http的资源获取:

web资源:
web资源可以理解成可以被http获取到的文件,或者说被当成请求对象的资源。web资源可以被分为静态资源与动态资源,

http资源请求:
一个网页可能需要进行多次请求,获取 多个资源 ,但是最开始只获取一个初始的html页面。后续html文件中需要表现出来的文件,再次发起请求。
而且网页上的资源不一定在自己的服务器上,也可以应用别人的服务器上的资源。可以通过盗链技术实现
访问量计数:
网站的访问量统计使用pv uv表示:
pv:pv统计的是页面的访问量,每次对页面发送一次资源请求,即算作一次pv
uv:uv统计的是网站的访客数,此判断是基于cookie实现的,即一个cookie访问了某网站,无论该客户端访问了多少页面,发送了多少资源请求。都算作一次该网站的一次uv

资源定位:
web的资源定位通过URI技术进行实现,URI技术又分为URL与URN
URI:统一资源标识符
URL:统一资源定位符
URL的组成部分:://:@:/;?#
schame:方案,访问服务器以获取资源时要使用哪种协议
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:相对于网站的根的路径,根即是经有domortroot 或alias 进行映射后的地址 为起始点,由一个/将其与前面的URL组件分隔,
params:参数,某些方案用这个组件来指定输入的参数,参数为名/值对,URL中可多含多个参数,用;分隔,对于动态页面有效,即根据传入的参数返回对应的页面或返回的页面中的某些特定内容.
query:查询,某些方案会用这个组件传递参数以激活程序,如数据库,用?与前面的参数项分隔,多个查询用&分隔,当前传递的目标为数据库时,以键与值的方式出现如name=tom.
frag:片段,一小片或一部分资源的名字,即锚点,此组件在客户端使用,用#分隔
URL分类:
相对URL,相对于当前资源的位置获取下一个资源的位置,相对URL一般都是用在同站的资源引用上
绝对URL,完整的URL,一般使用在跨站引用上.
URN:统一资源命名符

资源访问重定向:
url重定向。重定向可以实现负载均衡。重定向技术使用一种特殊的响应报文实现 。将客户访问的资源路径并非是客户端输入的。但是可以访问到该资源。 或者将客户访问的路径替换成其他的路径

服务器的路径映射:
url的根就是 本地服务器的起始路径。
实现方式
docroot
路径别名
虚拟主机映射
用户家目录映射

请求响应模块的分类:
单进程中单线程:在linux中进程与线程没有绝对的界限,线程也在任务列队中,该设计为串行结构每次只能处理一个请求,后续的请求会进入排队状态。
多进程中单线程:并行启动多个进程,每个线程中只有一个线程。每个进程响应一个请求,而不是一个用户的请求,一个用户获取资源时可能发起多个请求,所以这些请求被多个进程处理 ,而不是一个京城处理一个用户的所有请求。
复用IO:复用IO大多数基于事件驱动,一个进程内部维护一个事件监控器,监控多个IO,也可以基于进程中多线程,一个进程生成多个线程,每个线程处理一个请求。具体体现是一个进程可以响应多个请求
复用的多进程IO结构:启动多个进程 ,每个进程响应N个请求
注:多进程之间进行切换会占用造成大量的时间消耗,但是多进程中,其中一个进程崩溃不影响其他进程。

处理请求:
对请求报文进行分析,从而获取请求的资源,请求的分析需要基于HTTP协议设定的规格。请求的元数据存放在http报文的头部,也叫首部,

首部的构成格式:
操作数据的方法(上传下载同步),资源的url,协议的版本
host 请求的主机名称,及服务端的地址

完整http通信描述:
1. 客户端发起tcp三次握手请求,服务端接受请求,或因客户端不符合要求而拒绝三次握手请求。
2. 三次握手建立成功,客户端发送资源获取请求,服务端进行响应,具体响应需根据服务端的响应机制而定。响应可以有多种实现思路。
3. 对就收的资源请求进行处理,即解析客户端发出的请求报文。判断http报文的首部。资源的url,请求的本地主机地址等
4. 向内核发起申请,进程获取需要需求的资源
5. 进程构建响应,服务端找到被客户端需求的资源并且客户端有权限对该资源进行访问。将资源封装为一个响应报文。并对报文内部 的资源类型进行标识。也可能时资源重定向报文。
6. 发送报文,使用80 信道进行发送
7. 记录日志,以配置文件设定的格式将记录记录到日志中

原创粉丝点击