HTTP协议详解

                                      HTTP协议相关详解
javascript

--------------------------------------------------------------------------------------------------------------------------------------------php

1、css

ARPAnet是互联网的前身html

1987年钱天白创建起一个网络节点,经过国际长途电话拨号链接国际互联网java

1990年钱天白表明中国正式在国际互联网络信息中心的前身DDN-NIC注册等急了我国的顶级域名CN,而且今后开通了使用装过顶级域名CN的国际电子邮件服务web

1993年3月租用AT&T公司的64K专线正式开通,这条专线是我国部分连入Internet的第一根专线数据库

1994年实现与互联网的全功能链接,被国际上正式认可为有互联网的国家apache

1996年开始提供服务编程

2、后端

image.png

3、跨Ineternet的主机间通信

一、在创建通讯链接的每一端,进程间的传输要有两个标志

二、ip地址和端口号,合称为套接字地址socket address

三、客户机套接字地址定义了一个惟一的客户进程

四、服务器套接字地址定义了一个惟一的服务器进程

五、httpd默认80端口

4、socket套接字

一、Socket:套接字,进程间通讯IPC的一种实现,容许位于不一样主机(或同一主机)上不一样进程之间进行通讯和数据交换

二、Socket API:封装了内核中所提供的socket通讯相关的系统调用

三、Socket Domain:根据其所使用的地址

    AF_INET:Address Family,IPv4

    AF_INET6:IPv6

    AF_UNIX:同一主机上不一样进程之间通讯时使用

四、Socket Type:根据使用的传输层协议

    SOCK_STREAM:流,tcp套接字,可靠地传递、面向链接

    SOCK_DGRAM:数据报,udp套接字,不可靠地传递、无链接

    SOCK_RAW: 裸套接字,无须tcp或udp,APP直接经过IP包通讯

五、Socket套接字函数

image.png

六、套接字相关的系统调用:

    socket(): 建立一个套接字

    bind(): 绑定IP和端口

    listen(): 监听

    accept(): 接收请求

    connect(): 请求链接创建

    write(): 发送

    read(): 接收

    close(): 关闭链接

5、再次说明端口号

image.png

所以某些服务端口号比较小,小于1023时候,普通用户没法直接开启

6、HTTP服务通讯过程

一、HTTP服务通讯:上网打开一个网页时,当网页打开后将断开,释放服务器资源,这样能够达到更多的网站访问

二、解封装流程

image.png

7、HTTP术语

http:Hyper Text Transfer Protocol,超文本传输协议,tcp 80端口

html:Hyper Text Markup Language,超文本标记语言,编程语言

CSS:Cascading Style Sheet,层叠样式表,定义某个标准,能够应用到不少网页上,按照它定义的标准执行

js:javascript,和java不要紧

MIME:Multipurpose Internet Mail Extensions,多用途互联网邮件扩展,支持视频图片等多媒体格式,查看文件位置/etc/mime.types

8、HTTP协议

一、http/0.9:1991,原型版本,只有一个命令GET

二、http/1.0:1996年,支持cache,MIME,method,引入了POST命令和HEAD命令

三、http/1.1:1997年,支持持久链接,如今主流

    (1)持久链接:TCP链接默认不关闭,能够被多个请求复用,对于同一个域名,大多数浏览器容许同时创建6个持久链接

    (2)引入了管道机制(pipelining),即在同一个TCP链接里,客户端能够同时发送多个请求,进一步改进了HTTP协议的效率

    (3)同一个TCP链接里,全部的数据通讯是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,形成"队头堵塞"(Head-of-line blocking)

    (4)为避免上述问题,两种方法:一是减小请求数,二是同时多开持久链接。网页优化技巧,如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等

    (5)HTTP 协议不带有状态,每次请求都必须附上全部信息。请求的不少字段都是重复的,浪费带宽,影响速度

四、Spdy:2009年,谷歌研发解决http/1.1效率不高的问题

五、http/2.0:2015年

    (1)头信息和数据体都是二进制,称为头信息帧和数据帧

    (2)复用TCP链接,在一个链接里,客户端和浏览器均可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通讯称为多工(Multiplexing)

    (3)引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,全部字段都会存入这个表,生成一个索引号,不发送一样字段,只发送索引号,提升速度

    (4)HTTP/2 容许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)

9、HTTP工做机制

一、工做机制

    http请求:http request

    http响应:http request

    一次http事务:请求<-->响应

    工做在应用层,基于tcp协议

二、Web资源:web resource

一个网页由多个资源构成,打开一个页面,会有多个资源展现出来,可是每一个资源都要单独请求。所以,一个“Web 页面”一般并非单个资源,而是一组资源的集合

    (1)静态文件:无需服务端作出额外处理,文件后缀:.html, .txt, .jpg, .js, .css, .mp3, .avi

    (2)动态文件:服务端执行程序,返回执行的结果,文件后缀:.php, .jsp ,.asp

三、提升HTTP工做性能

    (1)并行链接:经过多条TCP链接发起并发的HTTP请求

    (2)持久链接:keep-alive,长链接,重用TCP链接,以消除链接和关闭的时延,以事务个数和时间来决定是否关闭链接,只创建一次TCP链接,一次三次握手和四次挥手,但后续会传不少资源

    (3)管道化链接:经过共享TCP链接发起并发的HTTP请求

    (4)复用的链接:交替传送请求和响应报文(实验阶段)

image.png

10、URI

URI: Uniform Resource Identifier 统一资源标识,分为URL和URN

    (1)URN: Uniform Resource Naming,统一资源命名,好比说, P2P下载(相似人人为我,我为人人)使用的磁力连接是URN的一种实现,下载磁力连接生成的种子时候,会搜索网络上其它主机谁有该资源,进行并行下载

    (2)URL: Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置

    (3)二者区别:URN如同一我的的名称,而URL表明一我的的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址

11、URL

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

一、scheme:scheme,验证,方案,访问服务器以获取资源时要使用哪一种协议

二、user:用户,某些方案访问资源时须要的用户名

三、password:密码,用户对应的密码,中间用:分隔

四、Host:主机,资源宿主服务器的主机名或IP地址

五、port:端口,资源宿主服务器正在监听的端口号,不少方案有默认端口号

六、path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔

七、params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔

八、query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔

九、frag:片断,一小片或一部分资源的名字,此组件在客户端使用,用#分隔

12、网址访问量

一、IP(独立IP):即Internet Protocol,指独立IP数。一天内来自相同客户机IP地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数,是衡量网站流量的重要指标

二、PV(访问量): 即Page View, 页面浏览量或点击量,用户每次刷新即被计算一次,PV反映的是浏览某网站的页面数,PV与来访者的数量成正比,PV并非页面的来访者数量,而是网站被访问的页面数量

三、UV(独立访客):即Unique Visitor,访问网站的一台电脑为一个访客。一天内相同的客户端只被计算一次。能够理解成访问某网站的电脑的数量。网站判断来访电脑的身份是经过来访电脑的cookies实现的。若是更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的

四、网站统计:http://www.alexa.cn/rank/

五、QPS:request per second,每秒请求数

六、PV,QPS,并发链接数换算公式

    (1)QPS=PV*页面衍生链接次数/统计时间(86400)

        页面衍生链接次数:页面上的图片视频等资源数

    (2)并发链接数=QPS*http平均响应时间

七、峰值时间:天天80%的访问集中在20%的时间里,这20%时间为峰值时间,二八法则

八、峰值时间每秒请求数(QPS)=(总PV数*页面衍生链接次数*80%/(天天秒数*20%)

十3、web服务请求处理步骤

一、客户端向服务器发起请求,请求里带有数据报文头部,request httpd header,而请求报文头部里会带有method方法(GET、POST、PUT、HEAD、DELETE等)

image.png

二、一次完整的http请求处理过程

    (1)创建链接:接收或拒绝链接请求

    (2)接收请求:接收客户端请求报文中对某资源的一次请求的过程

    Web访问响应模型(Web I/O)

        单进程I/O模型:启动一个进程处理用户请求,并且一次只处理一个,多个请求被串行响应

        多进程I/O模型:并行启动多个进程,每一个进程响应一个链接请求

        复用I/O结构:启动一个进程,同时响应N个链接请求

        实现方法:多线程模型和事件驱动

        多线程模型:一个进程生成N个线程,每线程响应一个链接请求

        事件驱动:一个进程处理N个请求

        复用的多进程I/O模型:启动M个进程,每一个进程响应N个链接请求,同时接收M*N个请求image.png

    (3)处理请求:服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理。注:HTTP经常使用请求方式,Method:GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

    (4)、访问资源:服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源。注:web服务器资源路径映射方式:docroot、alias、虚拟主机docroot、用户家目录docroot

    (5)构建响应报文:一旦Web服务器识别除了资源,就执行请求方法中描述的动做,并返回响应报文。响应报文中包含响应状态码、响应首部,若是生成了响应主体的话,还包括响应主体

        1)响应实体:若是事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中一般包括:

            描述了响应主体MIME类型的Content-Type首部

            描述了响应主体长度的Content-Length

            实际报文的主体内容

        2)URL重定向:web服务构建的响应并不是客户端请求的资源,而是资源另一个访问路径

        3)MIME类型:

            Web服务器要负责肯定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来

            魔法分类:Apache web服务器能够扫描每一个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每一个文件的MIME类型。这样作可能比较慢,但很方便,尤为是文件没有标准扩展名时

            显式分类:能够对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型

            类型协商:有些Web服务器通过配置,能够以多种文档格式来存储资源。在这种状况下,能够配置Web服务器,使其能够经过与用户的协商来决定使用哪一种格式(及相关的MIME类型)"最好"

    (6)发送响应报文

    Web服务器经过链接发送数据时也会面临与接收数据同样的问题。服务器可能有不少条到各个客户端的链接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录链接的状态,还要特别注意对持久链接的处理。对非持久链接而言,服务器应该在发送了整条报文以后,关闭本身这一端的链接。对持久链接来讲,链接可能仍保持打开状态,在这种状况下,服务器要正确地计算Content-Length首部,否则客户端就没法知道响应何时结束了

    (7)记录日志

    最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

十4、http协议

服务器没法持续追踪访问者来源

解决http协议无状态方法

cookie 客户端存放,一个cookie文件4K,里面的东西是键值对(name:value)

胖cookie:把全部信息全放在cookie里

瘦cookie:只放关键的信息,惟一的id信息,根据id信息从服务器端的session中查找

session 服务端存放

十5、HTTP请求报文

image.png

十6、HTTP响应报文

image.png

十7、报文解释

报文语法格式:

一、request报文

<method> <request-URL> <version>

<headers>

<entity-body>

二、response报文

<version> <status> <reason-phrase>

<headers>

<entity-body>

三、method: 请求方法,标明客户端但愿服务器对资源执行的动做

GET、HEAD、POST等

四、version:

HTTP/<major>.<minor>

五、status:

三位数字,如200,301, 302, 404, 502; 标记请求处理过程当中发生的状况

六、reason-phrase:

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

七、headers:

每一个请求或响应报文可包含任意个首部;每一个首部都有首部名称,后面跟一个冒号,然后跟一个可选空格,接着是一个值

八、entity-body:请求时附加的数据或响应时附加的数据

九、Method 方法:

GET:从服务器获取一个资源

HEAD:只从服务器获取文档的响应首部

POST:向服务器输入数据,一般会再由网关程序继续处理

PUT:将请求的主体部分存储在服务器中,如上传文件

DELETE:请求删除服务器上指定的文档

TRACE:追踪请求到达服务器中间通过的代理服务器

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

十、协议查看或分析的工具:tcpdump, wireshark,tshark

十8、常见状态码

一、状态码分类

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:响应报文Location指明资源临时新位置Moved Temporarily,临时重定向,域名保留

304:客户端发出了条件式请求,但服务器上的资源不曾发生改变,则经过响应此响应状态码通知客户端;Not Modified,利用浏览器自身的缓存进行响应

401:须要输入帐号和密码认证方能访问资源;Unauthorized

403:请求被禁止;Forbidden

404:服务器没法找到客户端请求的资源;Not Found

500:服务器内部错误;Internal Server Error

502:代理服务器从后端服务器收到了一条伪响应,如没法链接到网关;Bad Gateway

503:服务不可用,临时服务器维护或过载,服务器没法处理请求

504:网关超时

十9、HTTP首部字段

一、HTTP 首部字段包含的信息最为丰富。首部字段同时存在于请求和响应报文内,并涵盖HTTP 报文相关的内容信息。使用首部字段是为了给客服端和服务器端提供报文主体大小、所使用的语言、认证信息等内容

二、首部字段结构HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:”分隔

三、字段值对应单个HTTP 首部字段能够有多个值

四、报文首部中出现了两个或以上具备相同首部字段名的首部字段时,在规范内还没有明确,根据浏览器内部处理逻辑的不一样,优先处理的顺序可能不一样,结果可能并不一致

二10、HTTP协议首部

一、首部的分类:

(1)通用首部:请求报文和响应报文两方都会使用的首部

(2)请求首部:从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、请求内容相关优先级等信息

(3)响应首部:从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息

(4)实体首部:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的的信息

(5)扩展首部

二、通用首部:

Date: 报文的建立时间

Connection:链接状态,如keep-alive, close

Via:显示报文通过的中间节点(代理,网关)

Cache-Control:控制缓存,如缓存时长

MIME-Version:发送端使用的MIME版本

Warning:错误通知

二11、http协议

一、请求首部:

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

四、代理请求首部:

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

五、响应首部:

信息性:

Age:从最初建立开始,响应持续时长

Server:服务器程序软件名称和版本

协商首部:某资源有多种表示方法时使用

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

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

安全响应首部:

Set-Cookie:向客户端设置cookie

WWW-Authenticate:来自服务器对客户端的质询列表

六、实体首部:

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

Location:告诉客户端真正的实体位于何处

Content-Encoding:对主体执行的编码

Content-Language:理解主体时最适合的语言

Content-Length: 主体的长度

Content-Location: 实体真正所处位置

Content-Type:主体的对象类型,如text

缓存相关:

ETag:实体的扩展标签

Expires:实体的过时时间

Last-Modified:最后一次修改的时间

二12、APR

APR:apache运行的可移植库,apache基于apr开发,不直接面对操做系统,各系统针对各系统开发各自APR,他们最后开发出来了一个共同的APR的API接口,apache就基于这个APR的API接口之上,apache的其余应用软件也在这个接口上

相关文章
相关标签/搜索