HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为普遍的 一种网络协议。全部的WWW文件都必须遵照这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法,HTTP是万维网的数据通讯的基础。javascript
HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今普遍使用的一个版本——HTTP 1.1。css
2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工做小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。html
简易流程java
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。经过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。咱们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,好比HTML文件和图像。咱们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,好比代理服务器、网关或者隧道(tunnel)。web
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行做为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。apache
如下是 HTTP 请求/响应的步骤:浏览器
1. 客户端链接到Web服务器
一个HTTP客户端,一般是浏览器,与Web服务器的HTTP端口(默认为80)创建一个TCP套接字链接。例如,http://www.luffycity.com。缓存
2. 发送HTTP请求
经过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。tomcat
3. 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。服务器
4. 释放链接TCP链接
若connection 模式为close,则服务器主动关闭TCP链接,客户端被动关闭链接,释放TCP链接;若connection 模式为keepalive,则该链接会保持一段时间,在该时间内能够继续接收请求;
5. 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看代表请求是否成功的状态代码。而后解析每个响应头,响应头告知如下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
例如:在浏览器地址栏键入URL,按下回车以后会经历如下流程:
根据HTTP标准,HTTP请求可使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
注: 有请求体(请求体有数据)确定是post提交(表单method是post)
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 相似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会致使新的资源的创建和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1协议中预留给可以将链接改成管道方式的代理服务器。 |
7 | OPTIONS | 容许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的做用。HTTP状态码共分为5种类型:
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,须要请求者继续执行操做 |
2** | 成功,操做被成功接收并处理 |
3** | 重定向,须要进一步的操做以完成请求 |
4** | 客户端错误,请求包含语法错误或没法完成请求 |
5** | 服务器错误,服务器在处理请求的过程当中发生了错误 |
HTTP状态码列表:
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功。通常用于GET与POST请求 |
201 | Created | 已建立。成功请求并建立了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非受权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的状况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可经过此返回码清除浏览器的表单域 |
206 | Partial Content | 部份内容。服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。从此任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301相似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301相似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端一般会缓存访问过的资源,经过提供一个头信息指出客户端但愿只返回在指定日期以后修改的资源 |
305 | Use Proxy | 使用代理。所请求的资源必须经过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向。与302相似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器没法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,未来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,可是拒绝执行此请求 |
404 | Not Found | 服务器没法根据客户端的请求找到资源(网页)。经过此代码,网站设计人员可设置"您所请求的资源没法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器没法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401相似,但请求者应当使用代理进行受权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不一样于404,若是资源之前有如今被永久删除了可以使用410代码,网站设计人员可经过301代码指定资源的新位置 |
411 | Length Required | 服务器没法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 因为请求的实体过大,服务器没法处理,所以拒绝请求。为防止客户端的连续请求,服务器可能会关闭链接。若是只是服务器暂时没法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长(URI一般为网址),服务器没法处理 |
415 | Unsupported Media Type | 服务器没法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器没法知足Expect的请求头信息 |
500 | Internal Server Error | 服务器内部错误,没法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,没法完成请求 |
502 | Bad Gateway | 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求 |
503 | Service Unavailable | 因为超载或系统维护,服务器暂时的没法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,没法完成处理 |
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:
http,是协议;
www.luffycity.com,是服务器;
80,是服务器上的网络端口号;
/news/index.html,是路径;
?id=250&page=1,是查询。
大多数网页浏览器不要求用户输入网页中“http://”的部分,由于绝大多数网页内容是超文本传输协议文件。一样,“80”是超文本传输协议文件的经常使用端口号,所以通常也没必要写明。通常来讲用户只要键入统一资源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就能够了。
因为超文本传输协议容许服务器将浏览器重定向到另外一个网页地址,所以许多服务器容许用户省略网页地址中的部分,好比 www。从技术上来讲这样省略后的网页地址其实是一个不一样的网页地址,浏览器自己没法决定这个新地址是否通,服务器必须完成重定向的任务。
客户端发送一个HTTP请求到服务器的请求消息包括如下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的通常格式。
常见请求头 |
描述 (红色掌握,其余了解) |
Referer |
浏览器通知服务器,当前请求来自何处。若是是直接访问,则不会有这个头。经常使用于:防盗链 |
If-Modified-Since |
浏览器通知服务器,本地缓存的最后变动时间。与另外一个响应头组合控制浏览器页面的缓存。 |
Cookie |
与会话有关技术,用于存放浏览器缓存的cookie信息。 |
User-Agent |
浏览器通知服务器,客户端浏览器与操做系统相关信息 |
Connection |
保持链接状态。Keep-Alive 链接中,close 已关闭 |
Host |
请求的服务器主机名 |
Content-Length |
请求体的长度 |
Content-Type |
若是是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码 |
Accept: |
浏览器可支持的MIME类型。文件类型的一种描述方式。 MIME格式:大类型/小类型[;参数] 例如: text/html ,html文件 text/css,css文件 text/javascript,js文件 image/*,全部图片文件 |
Accept-Encoding |
浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩 |
Accept-Language |
浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n) |
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
常见请求头 |
描述 |
Location |
指定响应的路径,须要与状态码302配合使用,完成跳转。 |
Content-Type |
响应正文的类型(MIME类型) 取值:text/html;charset=UTF-8 |
Content-Disposition |
经过浏览器如下载方式解析正文 取值:attachment;filename=xx.zip |
Set-Cookie |
与会话相关技术。服务器向浏览器写入cookie |
Content-Encoding |
服务器使用的压缩格式 取值:gzip |
Content-length |
响应正文的长度 |
Refresh |
定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。 取值:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn |
Server |
指的是服务器名称,默认值:Apache-Coyote/1.1。能够经过conf/server.xml配置进行修改。<Connector port="8080" ... server="itcast"/> |
Last-Modified |
服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一块儿使用。 |
80端口跟8080端口其实做用很像,通常认为,80端口是http默认端口,8080通常是链接代理的。
80端口是http协议的默认端口,浏览器会帮助输入协议,www.*****.com实际上是www.*****.com:80,而8080端口,常常在访问某个网站或使用代理服务器的时候,在网址后面,:8080端口,apache tomcat默认的服务端口是8080,Linux服务器里Apache跑的是80端口。
至于apache,tomcat和java的关系,apache是卡车,tomcat是桶,java是水。
80端口:是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的,此为上网冲浪使用次数 最多的协议,主要用于WWW(World Wide Web)即万维网传输信息的协议。能够经过HTTP地址(即常说的“网址”)加“:80”来访问网站,由于浏览网页服务默认的端口号都是80,所以只要输入网址便可
8080端口:8080端口同80端口,是被用于WWW代理服务的,能够实现网页浏览,常常在访问某个网站或使用代理服务器的时候,会加上“:8080”端口号。另外Apache Tomcat web server安装后,默认的服务端口就是8080。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。 Web服务器根据接收到的请求后,向客户端发送响应信息。 HTTP默认端口号为80,可是你也能够改成8080或者其余端口。