WebApi系列文章html
一 概述
在Web开发中,HTTP是必不可少的环节,在以前的【ASP.NET MVC系列】中,咱们并无讲解HTTP,并非由于ASP.NET MVC与http关系不大,而是笔者我的以为http与WebApi结合起来说解,
效果可能会更好一些,所以,暂且就把“详解http”做为【WebApi系列】的开篇文章。
1.http是什么?
http是一种基于应用层的一种超文本传输协议(HyperText Transfer Protocol)
2.本章主要讲解什么?
本章目的就讲解:当咱们在浏览器输入:http://www.google.com.hk/,浏览器给咱们呈现Google界面,这个过程发生了什么,我暂且将发生的内容归于以下几点:
(1).域名解析
(2).TCP创建链接(三次握手)
(3).TCP通讯(传递数据)
(4).断开链接(四次挥手)
基于如上过程,咱们将分系一下:
(1)HTTP 请求
(2)HTTP响应
那么,咱们先来看看。
HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器,大体工做流程图以下图所示。
1.一次TCP链接,须要三个过程:创建链接(三次握手)、传送数据和释放链接(四次挥手);
2.http是基于TCP/IP协议的,且在五层模型中的运用层协议;
3.客户端请求URL,如上图的http://www.googl.com.hk;
4.服务器会根据客户端的请求,给予相应的响应(Responce);
下面,咱们将简要列举涉及到的部分关键技术,分别以下:
(一)基于TCP/IP
关于网络传输模型,早期大体有四层模型结构和七层模型结构,通过演变,最终将四层模型结构和七层模型结构归结为五层结构模型。
1.五层结构模型:运用层、传输层、网络层、数据链路层和物理层;
2.传输协议:基于TCP/IP
3.http协议是基于运用层的协议;
4.五层结构中,从纵向上来讲,客户端是从上往下传输,服务端是从下往上接受;
5.五层结构中,从横向上来讲,每一层的协议必须是相同的,至少是类似(通常咱们在分析层时,将会横向上虚拟抽象,屏蔽其余层);
6.运用层支持多种传输协议,如http协议,smtp协议,ftp协议等;
7.区分几个概念:TCP/IP协议,TCP协议和UDP协议
(1)TCP/IP协议:TCP/IP是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其余一些协议的协议组;
(2)TCP协议:传输层中的传输控制协议;
(3)UDP协议:传输层中的数据报问协议;
(二)特色
http协议具备不少优秀的特色,下图只是简要的列举其部分特色。
1.简单快速:http协议简单,客户端向服务器发送请求时,只需传送请求方法和路径便可,传送的内容简单轻量级,减小传输带宽,速度快;
2.B/S模式:B/S模式(Browse/Server模式),也叫客户端(Google,firefox,ie)/服务器模式,在Web开发中,基本都是基于B/S模式;
3.无链接:http协议自己是无链接的,虽然http使用了tcp链接,但通讯双方在交换http保温以前不须要先创建http链接;
4.无状态:无状态是指协议对于事务处理没有记忆能力,也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问的相同;
(三)三次握手
每一次TCP链接都须要三个阶段:创建链接、传送数据和释放链接。三次握手就发生在创建链接阶段,其大体流程以下图所示。
1.第一次握手:客户端请求链接。客户端向服务器发出请求链接(client向server发送sys=j的包),进入发送请求状态(syn_sent状态),并等待服务器确认。
2.第二次握手:服务器接受请求并向客户端发出确认信息。当服务器收到syn包后,先确认客户的syn(ack=j+1),同时也须要发布一个syn包(syn=k),即syn+ack包,此时服务器进入syn_recv状态。
3.第三次握手:创建链接。客户端收服务器的syn+ack包后,向服务器发棕确认包ack(ack=k+1),当此包发送完毕后,客户端和服务器就进入了链接状态(链接成功),完成三次握手;
如上彷佛有些抽象,咱们举个打电话的例子:
咱们打电话的目的是为了传递信息,在打电话前,咱们须要先拨通对方的电话且对方应答以后,才能通电话(创建链接),以A,B两人通电话为例子:
A:拨打B的手机(拨号,拨通后等待B接电话,至关于第一次握手,请求等待状态);
B:看到A打来的电话(是A才接,确认),接了电话,对A说:您好,老A(向A代表本身是B,至关于第二次握手) ;
A:您好啊,老B(第三次握手);
双方都问候,表名本身身份后,就能够正式通话了(三次握手结束)。
(四)四次挥手
(五)URI、URL与URN
1.URI、URL和URN定义
URI(Uniform Resource Identifier)表明统一资源标识符,标识资源的字符串;
URL (Uniform Resource Locator)表明统一资源定位符,互联网上标准资源的地址;
URN(Uniform Resources Name)表明统一资源名称,互联网上资源的名称;
2. 对URI、URL和URN三者之间解析
(1)从命名角度,URI标识资源且惟一,URL标识资源地址 ,URN标识资源名称;
(2)从数学关系:URI=URL+URN+URL∩URN;很容易看出,URL必定是URI,但URI不必定是URL,同理,URN必定是URI,但URI不必定是URN;
3. URL应具备特色
(1) 域名便于记忆和拼写;
(2) 简短;
(3) 便于输入;
(4) 能够反映出站点结构;
(5) 应该是“可破解的”,用户能够经过移除URL的末尾,进而到达更高层次的信息体系结构;
(6) 持久、不能改变
4 小结
一般状况下,URI表明赞成资源标识符(Uniform Resource Identifier)。URI是标识了一个资源的字符串。从技术角度看,全部URL都是URI。W3C认为“URL是一个非正式的概念,但它很是有用:
URL是URI的一种类型,它经过表示自身的主要访问机制来标识资源”,换句话说,URI是某种资源的标识符,而URL则为获取该资源提供了具体的信息。
注释:资源是一个抽象概念,既能够指一个文件,也能够指方法调用的结果或服务器上的一些其余内容。
(六)HTTP几个关键概念
这个比较基础,学过计算网络的朋友,都应该知道,这里就不解释了,大体轮廓图以下所示。
二 HTTP
(一)http请求
1.http请求通常由三部分构成:<请求行><请求头><请求体>
(1)请求行:<Method><Request-url><version>
GET http://localhost:2172/api/Default/GetUserInfo?UserName=Alan_beijing HTTP1.1
图解以下:

(2)请求头:header
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:2172
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36
(3)请求体:Request-Body
因为本示例使用的是Get请求,Get方法没有请求体。
2.http请求方法
2.1Get
(1)通常因为获取查询资源,对应DB中的Select操做,为http请求经常使用方法 ;(2)该操做对系统来讲,是安全的,由于其只查询而不修改数据;
(3)冥等的,对同一URL屡次请求获得的结果应该是相同的;(4)参数在URL中传递,而非Rquest-Body中传递;
(5)有长度限制,如IE : 2803 ;Firefox:65536 ;Chrome:8182 ; Safari:80000 ; Opera:190000 (6)不安全,由于参数暴露在url中
2.2.Post
(1)通常用于向系统中更新数据,对应DB中的Update操做,为http请求经常使用方法;(2)参数在Requet-Body中传递 ;
(3)相比较Get,较为安全
2.3.Put
(1)通常用于向系统中插入数据(固然,其功能Post也能实现,与Post有不少类似之处),对应DB中的Insert操做;
(2)传输内容放在Request-Body中;
(3)不安全,不带验证机制,故通常不使用该方法;
2.4.Delete
(1)通常用于向系统中删除数据,对应DB中的Delete操做;
(2)不带验证机制,故不安全;
2.5.Head
(1) 用法与Get同样,只不过Head只返回Http-Responce头部信息;
(2)因为Head只返回头部信息(相对于Get,轻量级),故通常被用于确认URI的有效性,资源更新的日期时间等;
2.6.Patch
(1)部分文档更改;
2.7.Trace
(1)追踪路径,如追踪一个资源请求中间所通过的代理;(2)回显服务器收到的请求,主要用于测试或诊断;
2.8.Copy
(1)拷贝指定资源到目标位置;
2.9.Options
(1)通常用来询问URI支持的方法;(2)查询服务器的性能
2.10.Link
(1)创建链接关系;
2.11.UnLink
(1)断开连接关系
2.12.Purge
(1)清除;
2.13.PropFind
(1)查看属性
2.14.View
(1)查看
2.15.Connect
(1)隧道协议链接代理
2.16.Move
(1)将服务器资源移动到目标位置;
2.17.Wrapped
(1)容许客户端发送封装过的请求;
2.18.Extension-Method
(1)基于不变协议的前提下,可增长其余方法;
2.19.Lock
(1)加锁;
2.20.UnLock
(1)解锁;
3.请求头
现将经常使用的http请求头域列于以下。
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:2172
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36
(二)http响应
1.http响应通常由三部分构成:<状态行><响应头><响应体>;
2.状态行
2.1 状态行构成
状态行通常由三个部分构成:<协议及其版本><状态码><描述>,
HTTP/1.1 200 OK;
2.2 状态代码和常见状态码
状态代码由 3 位数字组成, 表示响应的状态。
3.响应头
关于响应头,与请求头原理差很少,这里就不讲解了。
Cache-Control:no-cache
Content-Length:123
Content-Type:application/xml; charset=utf-8
Date:Sat, 27 Jan 2018 09:54:22 GMT
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/10.0
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?QzpcVXNlcnNcQWxhbl9iZWlqaW5nXHNvdXJjZVxyZXBvc1xIdHRwRGVtb1xIdHRwRGVtb1xhcGlcRGVmYXVsdFxHZXRVc2VySW5mbw==?=
(三)例子
1.用VS2017写一个WebApi Get,步骤以下:
选择Web基架
添加WebApi空基架
修改WebApiConfi.cs路由配置和在控制器Default添加方法GetUserInfo
测试结果
三 版权区