.Net Framework 开发Http协议

一、Http的基本原理

1.HTTP协议的运作方式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是 MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
它分四个过程,在HTTP协议中,服务端是指提供HTTP服务的部分,客户端是指你使用的浏览器或者下载工具等等。在通讯时,由客户端发出请求连接,服务端建立连接;然后,客户端发出HTTP请求(Request),服务端返回响应信息(Respond),由此完成一个HTTP操作。

HTTP状态检测(HTTP Header)

HTTP协议状态码表示的意思
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1×× 保留
2×× 表示请求成功地接收
3×× 为完成请求客户需进一步细化请求
4×× 客户错误
5×× 服务器错误

2.URI,URL,URN的基本概念

 

URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。

总结一下:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative URL,则是针对另一个absolute URL,本质上还是绝对的。

举例说明下URL和URI的区别:

URI 是从可以是虚拟根路径开始的URL必须是整个链接,可以根据URL唯一定位到页面的链接。如URL http://zhidao.baidu.com/question/68016373.html  URI 是/question/68016373.html(只要能标识信息就可以了)
在百度那边服务器上把http://zhidao.baidu.com/制作成了虚拟的路径的根

3.URL的结构:

4.HTTP是无状态的协议以及Cookie和Session的应用:

在客户端发送HTTP请求并收到服务器端响应后,连接就会断开,下一次的访问与前一次的访问无关,因此如果需要维护客户端的信息,必须在服务器端维持状态数据。

   Http是无状态的协议的理解:

协议的状态是指下一次传输可以“记住”这次传输信息的能力. Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息。

http是不会为了下一次连接而维护这次连接所传输的信息的.

无状态是指,当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再发送请求给服务器的时候,他会响应,但是他不知道你就是刚才那个浏览器,简单地说,就是服务器不会去记得你,所以是无状态协议。

而DNS是有状态协议 。

在这种客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

        Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,我们可以从:[系统盘]:\Documents and Settings\[用户名]\Cookies目录中找到存储的Cookie;自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。

        有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。通常,我们可以从很多网站的登录界面中看到“请记住我”这样的选项,如果你勾选了它之后再登录,那么在下一次访问该网站的时候就不需要进行重复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。

        与Cookie相对的一个解决方案是Session,它是通过服务器来保持状态的。由于Session这个词汇包含的语义很多,因此需要在这里明确一下Session的含义。首先,我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个Session。从这个语义出发,我们会提到Session持续的时间,会提到在Session过程中进行了什么操作等等;其次,Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。从这个语义出发,我们则会提到往Session中存放什么内容,如何根据键值从Session中获取匹配的内容等。

        要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。有关Session的内容还比较多,在以后的Post中,我还将继续讲述。

        综上所述,HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。

5.Http请求与响应的结构:

(1)Http请求的结构

(2)Http响应的结构

 

 

(3)Http 的Get 方法和Post方法

二、使用Http协议的.Net类

1. .Net中与http相关的类:

2.同步调用与异步调用

 

同步:提交请求->等待服务器处理->处理完毕返回。这个期间客户端浏览器不能干任何事。

异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕。

举个生动的例子吧:

同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。

异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

再举个例子,打电话时同步,发短信是异步。

在设计中普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项。

3、.Net关于HTTP具体代码开发实例

(1)、同步请求

(2)异步请求:异步请求的好处是不阻塞当前线程,但相对于同步请求略为复杂,至少要添加两个回调方法来获取异步事件。

 

参考:http://wenku.baidu.com/link?url=Rd3gArVjeyzVEOtSlSyjxu2wpBzjIMOXsyXiut-Cy0EHnMQIcJSb7UKzCjibcfbxaGaGfMdgA32RdEXf1lD-D-1DlZ1cP_LMfeRmjBfpdRO

时间: 2024-08-01 06:39:52

.Net Framework 开发Http协议的相关文章

做Android应用开发 和 framework开发 那个好?

============问题描述============ 问各位一个问题,做Android应用开发 和 framework开发 那个好? ============解决方案1============ framework好.但是门槛高 ============解决方案2============ 支持3楼,不过我觉得没有什么优劣之分,最好的办法是把两个方面都要掌握好,相辅相成的. ============解决方案3============ 各有千秋,要是都会了更好 ============解决方案4=

基于 SailingEase WinForm Framework 开发优秀的客户端应用程序(目录)

本系统文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以  SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客户端应用程序的设计与开发. 基于 SailingEase WinForm Framework 开发优秀的客户端应用程序(1:概述)

十分钟使用ionic Framework开发一个跨平台移动应用

Ionic是一个前端的框架,帮助开发者使用HTML5, CSS3和JavaScript做出原生应用.ionic的理念类似前端开发的BootStrap,目标是封装HTML5移动跨平台开发的最佳实践,就像Twitter Bootstrap在前端开发中做的一样.Ionic框架目前发展很迅速,我们从2014年3月开始使用,当时是1.0.0beta2,现在已经更新到1.0.0beta10,大概每2个星期会出一个beta版本,并且都包含实质性更新.Ionic框架很先进,js部分是基于AngularJS框架,

Android 开发TCP协议时,报错NetworkOnMainThreadException

设想是通过Android应用连接PC的TCP服务器,通过点击按钮连接服务器, 最终在点击按钮后报错:networkonmainthreadexception 解决办法: 在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码 if (android.os.Build.VERSION.SDK_INT > 9) { ????StrictMode.ThreadPolicy policy = new StrictMode.Thread

Fast.Framework开发笔记一:系统的定位及架构、控件选择

Fast.Framework 是一个面向中小型企业ERP信息化快速开发平台,她会包含供应链.人事管理.客户关系管理.生产等多个ERP业务模块.除了传统的PC端支持之外,还会强力支持移动客户端在企业中的应用.在其通用的ERP业务模块不能满足企业的个性化需求时,她能让有一定开发基础的程序员可以快速地进行定制化开发. 由于近几年计算机硬件的快速发展及HTML5的发布,未来的管理系统B/S将会是一种趋势.在B/S架构中,SilverLight和Web开发是两种不同的技术选择.目前金蝶的K/3Cloud就

iOS网络编程开发—HTTP协议

iOS网络编程开发—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源

经验总结之framework开发入门

本人在某做手机ROM的厂商工作近两年,虽然工作年限不长,但是对此类“工种”已有比较初步的认识,写下来供大家参考借鉴. framework的工作相对于其他比较成熟的软件开发类似,分为维护和需求开发. 需求开发需要注意的是: 1 相关功能的现有模块需要非常熟悉,否则会有非常大的风险 2 所写代码尽量与已有类似的代码保持风格一致 3 必要的注释,写代码的时候认为代码的意图貌似是理所当然,但是当别人看你的代码或者过一段时间你自己查阅代码的时候,很有可能由于代码量过大,在代码的海洋中未必容易理解某一段代码

Fast.Framework开发笔记二:VisualStudio解决方案的搭建

VisualSutio项目结构图: 对!你没有看错,本篇说的就是解决方案的搭建.是不是觉得没一点技术含量啊?,我们先来看下要搭建一个什么样的解决方案吧? 第一.软件架构师能对框架代码进行封装(Framework.Applications). 第二.软件开发工程师以DLL形式调用所有框架代码,并在相应的项目中可以进行定制化开发. 解决方案说明: Applications (框架的业务代码将会放在这里面,实际路径在Fast.ERP.Web之下,是为了开发项目在访问框架里面的View页面) |----

iOS开发-HTTP协议

HTTP协议,即超文本传输协议(Hypertext transfer protocol). HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.HTTP是一个无状态的协议. 在Internet中所有的传输都是通过TCP/IP进行的.HTTP协议作为TCP/IP模型中应用层的协议也不例外.HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS. HTTP协议的主要特点可概括如下:1.支持客户/服务器模式.支持基本认证和