HTTP:HyperText Transfer Protocol--超文本传输协议

超链接:能够在文档之间跳转的文本

早起的Web仅仅是能够实现在文档之间跳转的一种协议
http/0.9:仅支持纯文本(超链接) 由纯ASCII值组成的
HTMLHyperText Mark Language 超文本标记语言 用来编写超文本的语言
<h2>Title</h2>
<h2>...</h2>HTML的一组标签,用来定义里面的字符的显示属性,这组标签是HTML语言内置的,事先规定好了的,应该将这些字体解析成什么格式的内容

Browser客户端用户通过浏览器可以将web服务器提供的超文本进行显示,其中那些标签是不会显示出来的

但是如果有两台主机上提供的文本的名称是一样的,用户该如何区别这两个文件呢?

URIUniform
Resource Indentifier 统一资源标识符 可以在全局范围内唯一引用某一个独立的资源的命名方式

URLUniform
Resource Location 统一资源定位符 是统一资源标识符的一个子对象, 用于描述在互联网上互联网资源的统一表示格式

protocol://HOST:port/path/to/file
协议://主机:端口/路径/文件名
http://www.qq.com/download/linux.tar.gz

web资源:能够通过统一资源定位符唯一的标记,能够让客户端访问的文件
多个资源很可能被整合为一个html文档

web对象:跟web资源是同一个概念

HTTP方法(资源访问的方法):
GET从服务器获取资源到本地并且通过浏览器进行显示(早起的HTTP版本例:http0.9只有这一种方法)
PUT从远程服务器上直接获取一个文件到本地
POST通过表单提交数据到服务器上去的
DELETE在远程服务器上删除一个文件的
HEAD只返回首部,不返回主体
TRACE
OPTIONS
CONNECTION

MIMEMultipurpose
Internet Mail Extension 多用途互联网邮件扩展

SMTPSimple
Mail Transmission Protocol 只能传输纯文本的
MIME可以将非文本数据在传输前能够重新编码为文本格式再进行传输,并且在接收方可以用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件
Base64一种文本编码格式

动态效果
flash
Java,Applet,JRE

动态网页:在服务器端存储的文档非HTML格式,而是一种编程语言开发的脚本,脚本在接受来自客户端的参数之后在服务器执行一次,执行完成之后会生成HTML格式的文档,把生成的文档发送给客户端
注:web服务器不会帮你去执行这些脚本,而是通过调用其他工具来执行。web服务器并不负责处理动态内容
例:web:index.php
web --> procotol --> php(运行index.php)

静态页面响应流程:
用户发来的请求一定是通过网络协议发送到服务端的,而协议是工作在操作系统的内核中的。当请求到达内核,内核空间经过解析后,发现请求范文的是80端口的套接字,内核就会将这个用户请求通过套接字转给用户空间的web服务器。web服务器发现用户访问的是一个网页文件,服务器端就会陷入内核,重新转换成内核模式,到磁盘上将这个文件加载过来。当内核找到这个文件后,返回给用户空间,web服务器发现文件取出来了,就通过套接字再次回到内核空间,通过网络TCP/IP协议栈返回给客户端

动态页面响应流程:
用户发来的请求一定是通过网络协议发送到服务端的,而协议是工作在操作系统的内核中的。当请求到达内核,内核空间经过解析后,发现请求范文的是80端口的套接字,内核就会将这个用户请求通过套接字转给用户空间的web服务器。web服务器发现用户访问的是一个动态页面,web服务器就会通过其他协议启动一个解释器的进程,然后解释器陷入内核,重新转换成内核模式,到磁盘上去将这个文件加载到解释器中,然后执行一次,执行之后将执行结果返回给web服务器,并关闭解释器进程,然后web服务器将这个结果通过套接字再次回到内核空间,通过网络TCP/IP协议栈返回给客户端。

一个动态网页包含了静态内容(不需要改变的,不需要执行的,例如:图片)和动态内容(需要执行再返回给用户)

用户具体要访问的哪个资源的信息记录在HTTP协议的首部中
HTTP报文:分为请求报文和响应报文

请求报文语法:

<method> <request-URL> <version>
资源获取方法 请求的资源是什么 对应请求资源协议的版本号
<headers>
http协议首部

<entity-body>
报文主体

响应报文语法:
<version> <status> <reason-phrase>
对应请求资源协议的版本号 状态码 具体说明status的意义
<headers>
响应报文首部

<entity-body>
报文主体

状态码有五类:
1xx:纯信息
2xx:“成功”类的信息(200-请求资源正常)
3xx:“重定向”类的信息,资源存在,但是资源已经被挪走了,需要重新发起请求,并给你请求的地址(301-永久重定向、302-临时重定向、304-没有发生任何改变,直接使用缓存内容)
4xx:客户端错误类的信息(404-请求了一个不存在的文件)
5xx:服务器端错误类的信息

例如:
请求报文
GET / HTTP/1.1
Host:www.qq.com
Connection:keep-alive

响应报文
HTTP/1.1 200 OK
X-Powered-By:PHP/5.2.17
Vary:Accept-Encoding,Cookie,User-Agent 额外标记的变化类的内容
Cache-Control:max-age=3,must-revalidate
Content-Encoding:gzip 内容编码机制
Content-Length:6931 内容长度

上面两个报文的第一行通常称为报文“起始行(start line)”,后面的标签格式的内容称作首部域(Header
field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔,另外,响应报文通常还有一个称作Body的信息主体,即响应给用户端的内容

Web服务器的主要操作:
1、建立连接——接受或拒绝客户端连接请求
2、接收请求——通过网络读取HTTP请求报文
3、处理请求——解析请求报文并做出响应的动作
4、访问资源——访问请求报文中相关的资源
5、构建响应——使用正确的首部生成HTTP响应报文
6、发送相应——向客户端发送生成的响应报文
7、记录日志——将已经完成的HTTP事务记录进日志文件

用户请求的一个页面中可能存在着多个web资源,而这每个资源都是要单独的去请求的,并且HTTP协议是基于TCP协议工作的,每次建立连接都需要三次握手,断开连接时都需要四次断开,极其的浪费时间和带宽资源
因此,在HTTP/1.1中:
1、增强了缓存的功能
2、引入长连接——客户端和服务端在获取一个资源后不是直接断开,而是等待继续获取其他的资源

Web服务器处理并发连接请求的架构方式

1、单线程web服务器(Single-threaded web servers)

此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。

2、多进程/多线程web服务器

此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。

3I/O多路复用web服务器

为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。

4、多路复用多线程web服务器

将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。

代理

Web代理服务器工作于web客户端和web服务器之间,它负责接收来自于客户端的http请求,并将其转发至对应的服务;而后接收来自于服务端的响应,并将响应报文回送至客户端。

常见的客户端浏览器和服务器端web服务器
客户端浏览器:
1、IE
2、Firefox
3、Chrome
4、Opera
5、Safari

web服务器(www.netcraft.com):
1、Apache
2、IIS
3、nginx
4、lighttpd(德国)
5、thttpd(嵌入式平台)

应用程序服务器:不仅能够解析静态内容,还能够处理某种特定格式的动态内容
1、IIS
2、Tomcat(apache,Java的应用程序服务器,开源的)
3、Websphere(IBM,专门用来解析Java企业级应用程序的,商业产品)
4、Weblogic(Bea->Oracle,JSP的应用服务器,商业产品)
5、JBoss(RedHat)

Web服务及http协议的更多相关文章

  1. 第十七篇:WEB服务器之HTTP协议

    本篇主要为为了实现WEB服务器,其中包含了HTTP协议的理解,以及TCP的三次握手.四次挥手等方面相关知识,同时还包含了关于web浏览器与服务器之间的通信过程. 一.web浏览器 通常在我们上网时会在 ...

  2. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  3. 基于 REST 的 Web 服务:基础

    代表性状态传输(Representational State Transfer,REST)在 Web 领域已经得到了广泛的接受,是基于 SOAP 和 Web 服务描述语言(Web Services D ...

  4. 从开发的角度比较 ASP.NET Web 服务与 WCF

    Windows Communication Foundation (WCF) 具有一个 ASP.NET 兼容模式选项,用户使用此选项可以对 WCF 应用程序进行编程和配置,使其像 ASP.NET We ...

  5. 12个强大的Web服务测试工具

    在过去的几年中,web服务或API的普及和使用有所增加. web服务或API是程序或软件组件的集合,可以帮助应用程序进行交互或通过形成其他应用程序或服务器之间的连接执行一些进程/事务处理.基本上有两种 ...

  6. Web服务,XFire的一个例子

    Web服务优点 互操作性:实现不同系统间的相互调用(语言无关.平台无关) Web服务是什么 Web 服务是一类应用程序,是能够用编程的方法通过Web调用来实现某个功能的应用程序 Web服务的体系结构 ...

  7. HTTP协议基础与web服务的重定向,跳转以及请求转发

    JavaWeb中,HttpServletRequest与HttpServletResponse几乎是处理各种请求与操作必备的参数,与原始的ServletRequest/ServletResponse相 ...

  8. Web服务技术协议:REST与SOAP

    Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移) ...

  9. #WEB安全基础 : HTTP协议 | 0x3 TCP三次握手和DNS服务

    TCP三次握手精准无误地把数据送达目标处,TCP协议把数据包送出去后,向对方确认是否成功发送,握手过程中使用了TCP的标志(flag)——SYN和ACK 请看图 若握手中断,TCP协议再次从同样顺序发 ...

随机推荐

  1. PHP: 深入pack/unpack

    https://my.oschina.net/goal/blog/195749 PHP作为一门为web而生的服务器端开发语言,被越来越多的公司所采用.其中不乏大公司,如腾迅.盛大.淘米.新浪等.在对性 ...

  2. TryUpdateModel

    MSDN参考 https://msdn.microsoft.com/zh-cn/library/system.web.mvc.controller.tryupdatemodel.aspx 相关博文 h ...

  3. Arduino 极速入门系列–1 点亮 LED

    本篇内容为,使用 Arduino 点亮 LED 的做法示范.很简单的一个入门示范.我们让 LED 闪. 本篇使用到的工具和材料 Arduino Mini Pro 1 PCS Mini USB 数据线 ...

  4. s

    echo.  输出空行 echo; 输出空行 请求用户输入 set /p LOG_PATH=请输入log绝对路径: http://159.20.127:9009/gamesdk/doroot.jsp ...

  5. codeforces 85D D. Sum of Medians 线段树

    D. Sum of Medians time limit per test 3 seconds memory limit per test 256 megabytes input standard i ...

  6. python走起之第十三话

    前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中 ...

  7. djangocms安装技巧

    首先python的版本要高一些,否则安装django-cms会报错 安装cmsinstaller不能够正常下载 利用virtualenv进行安装配置 注意中文的配置 djangocms配置中文 dja ...

  8. 正确使用ng-if和ng-show

    在使用bootstrap中,我们会经常用到按钮组,也就是btn-group,如果仔细观察的话,会发现一个按钮组的第一个和最后一个按钮分别是有圆角的,如下图: 但是中间的按钮是没有圆角的,这样显得比较美 ...

  9. python获取时间

    获取当前时间,和当前UTC时间 #!/usr/bin/env python #_*_ encoding:utf-8_*_ import datetime import time utctime = d ...

  10. pm2.5检测统计

    SELECT AVG(pm25_h),AVG(pm10_h),AVG(temp_h),AVG(humi_h),AVG(co2_h),AVG(tvoc_h),perf_time FROM( SELECT ...