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. Upload Files To FTP in Oracle Forms D2k

    Upload Files To FTP in Oracle Forms D2k Use following procedure to upload files to Ftp.   PROCEDURE ...

  2. servlet(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  3. Cocos2d-x 核心概念 - 层(Layer)

    层(Layer) 一个简单的主界面是由是三个层叠加实现的,从上到下依次为,菜单层,精灵层,背景层 这个次序适用与事件的响应机制,菜单层最先接受到系统事件,然后精灵层,最后背景层 在事件传递的过程中,如 ...

  4. JVM 新生代老年代

    1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  5. 不再为Apache进程淤积、耗尽内存而困扰((转))

    本篇文章是为使用Apache+MySQL,并为Apache耗尽内存而困扰的系统管理员而写.如果您没有耐心读完本文,请参考以下步骤: 修改/etc/my.cnf,加上这样一行: log-slow-que ...

  6. cocos2dx解决苹果正版ipv6的问题

    苹果官方出了新的规定,要求新上架的app都必须单独支持ipv6-only的网络. 具体的要求链接:https://developer.apple.com/library/mac/documentati ...

  7. URL编码和解码工具

    开发中发现需要进行URL的编解码,每次百度出来的还带广告而且比较慢,写了一个本地的工具,比较简单,希望对大家有帮助. <!DOCTYPE html PUBLIC "-//W3C//DT ...

  8. HashMap对象的深层克隆

    1.java.util.HashMap 的 clone 方法是浅层copy,clone出来的对象,仅仅是原来对象的一个引用,并且对克隆出来的对象进行操作是无效的. 下面是个例子: import jav ...

  9. 在阿里云配置URL的REWRITE模式

    今天买了阿里云的虚拟主机,然后把我的项目上传. 网站首页能够访问,但是点开任何页面,都是提示No input file specified,猜测应该是URL重写没有生效,我在浏览器地址把index.p ...

  10. miniui datepicker 二次加工

    function onshowpopup(){ $(".mini-calendar-timespinner").css({"width":"180px ...