HTTP概述html
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。属于应用层的面向对象的协议,因为其简捷、快速的方式,适用于分布式超媒体信息系统。工做于客户端-服务端架构为上。浏览器做为HTTP客户端经过URL向HTTP服务端即WEB服务器发送全部请求。Web服务器根据接收到的请求后,向客户端发送响应信息。java
一、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。web
二、灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。浏览器
三、无链接:无链接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。缓存
四、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时它的应答就较快。
五、支持B/S及C/S模式。服务器
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行做为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。cookie
工做流程网络
1. 客户端链接到Web服务器
一个HTTP客户端,一般是浏览器,与Web服务器的HTTP端口(默认为80)创建一个TCP套接字链接。架构
2. 发送HTTP请求
经过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。分布式
3. 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4. 释放链接TCP链接
若connection 模式为close,则服务器主动关闭TCP链接,客户端被动关闭链接,释放TCP链接;若connection 模式为keepalive,则该链接会保持一段时间,在该时间内能够继续接收请求;
5. 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看代表请求是否成功的状态代码。而后解析每个响应头,响应头告知如下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语 法对其进行格式化,并在浏览器窗口中显示。
HTTP请求方式
HTTP最大的做用就是客户端发送请求,服务器给出响应,客户端想服务器发送请求的方式有不少。
PUT
和GET从服务器获取资源相反,PUT用于想服务器写入资源。PUT的语义就是让服务器用请求的主体部分建立一个请求URL命名的文档,若是存在就替换
TRACE
客户端发送一个请求的时候,这个请求可能会穿过防火墙、代理、网关和一些其它应用程序,没个中间节点均可能修改HTTP请求,TRACE方法容许客户端在最终请求发往服务器的时候,看看它变成了什么样子。
TRACE请求会在目的服务器端发送一个“闭环”诊断,行程最后一站服务器会弹回一条TRACE响应,并在响应主题中携带它收到的原始请求报文。
DELETE
DELETE方法用于要求服务器删除请求的URL,和PUT同样,服务器可能会不支持。
OPTIONS
OPTIONS方法用于请求 web服务器告知其支持的各类功能。
常见的状态码
200状态码:表示请求已成功,请求所但愿的响应头或数据体将随此响应返回
201状态码:表示请求成功而且服务器建立了新的资源,且其 URI 已经随Location 头信息返回。假如须要的资源没法及时创建的话,应当返回 '202 Accepted'
202状态码:服务器已接受请求,但还没有处理
301状态码:被请求的资源已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302状态码:请求的资源临时从不一样的URI响应请求,但请求者应继续使用原有位置来进行之后的请求
304自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 若是网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。
401状态码:请求要求身份验证。 对于须要登陆的网页,服务器可能返回此响应。
403状态码:服务器已经理解请求,可是拒绝执行它。与401响应不一样的是,身份验证并不能提供任何帮助,并且这个请求也不该该被重复提交。
404状态码:请求失败,请求所但愿获得的资源未被在服务器上发现。没有信息可以告诉用户这个情况究竟是暂时的仍是永久的。假如服务器知道状况的话,应当使用410状态码来告知旧资源由于某些内部的配置机制问题,已经永久的不可用,并且没有任何能够跳转的地址。
404这个状态码被普遍应用于当服务器不想揭示到底为什么请求被拒绝或者没有其余适合的响应可用的状况下。
500状态码:服务器遇到了一个不曾预料的情况,致使了它没法完成对请求的处理。通常来讲,这个问题都会在服务器的程序码出错时出现。
503状态码:因为临时的服务器维护或者过载,服务器当前没法处理请求。一般,这个是暂时状态,一段时间会恢复
URL
在WWW上,每一信息资源都有统一的且在网上惟一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是WWW的统一资源定位标志,就是指网络地址。
就如下面这个URL为例,介绍下普通URL的各部分组成
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
从上面的URL能够看出,一个完整的URL包括如下几部分:
一、协议部分:该URL的协议部分为“http:”,这表明网页使用的是HTTP协议。在Internet中可使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
二、域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可使用IP地址做为域名使用
三、端口部分:跟在域名后面的是端口,域名和端口之间使用“:”做为分隔符。端口不是一个URL必须的部分,若是省略端口部分,将采用默认端口80
四、虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
五、文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,若是没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,若是没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,若是省略该部分,则使用默认的文件名
六、锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
七、参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数能够容许有多个参数,参数与参数之间用“&”做为分隔符。
原文连接:https://blog.csdn.net/ergouge/java/article/details/8185219
HTTP请求报文
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的通常格式。
报文由三个部分组成: 开始行,首部行和实体主体.在请求报文中,开始行就是请求行
1.请求行:由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
2.请求头部:由键/值对组成,每行一对,键和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息
典型的经常使用请求头有:
HTTP响应报文
通常状况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
常见的响应头
Allow:服务器支持哪些请求方法(如GET、POST等)
参考连接:https://www.cnblogs.com/Saoz/articles/9979859.html
https://www.cnblogs.com/an-wen/p/11180076.html