非常简单。Web客户端(Web浏览器)向Web服务器发送请求后,Web客户端期望并接收来自Web服务器的响应。之后(从提交开始)Web 客户端将一些数据发送到 Web 服务器(回发)。但是,在内部,Web服务器如何知道什么是回发或网页的第一个请求是什么(也许是HTTP请求中的某个标志?
HTTP 有很多动词,例如 POST
和 GET
。 GET
就像输入 URL 一样。 POST
通常用于表单。
如果页面方法是POST
,则应设置(在 ASP.NET 中)。
if (Page.IsPostBack)
{
}
虽然只是整个故事的一部分,但这可能是System.Web.UI.Page
类中最相关的摘录:
在方法 ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)
中:
if (this._requestValueCollection != null) {
[..]
text2 = this._requestValueCollection["__CALLBACKID"];
if (text2 != null && this._request.HttpVerb == HttpVerb.POST)
{
this._isCallback = true;
}
[..]
}
显然,ASP.NET 正在 post 参数中传输加密__CALLBACKID
,并检查 HTTP 请求消息中是否设置了 POST 动词。
如果我们只是在谈论 IIS/服务器 - 那么它不能(靠它自己)。第一个请求可以是任何动词(GET
、POST
或你允许的任何其他动词)。
如果我们谈论的是 Web 窗体页面 ASP.NET,您可以假设(但不是 100%)"第一个"请求是GET
和"回发",根据术语本身的性质是POST
。但就像上面一样,您可以创建一个 ASP.Net 页面,该页面将POST
作为第一个请求。
作为开发人员,您可以创建方法来识别"第一个请求",无论您如何定义它。这可能是您强制实施流的方式。动词真的与识别"第一个(http)请求"没有任何关系......