HTTP网络通信小结

版权声明:本文为博主原创文章,如果转载,请注明转载地址和作者 https://blog.csdn.net/u013125233/article/details/50162859

1.页面从输入 URL 到页面加载显示完成的过程


分为4个步骤:


(1)当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。


(2)浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。


(3)一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。


(4)此时,Web服务器提供资源服务,客户端开始下载资源。


2.Http状态码


Http状态码主要分为以下5类


100~199————信息性状态码


200~299————成功状态码


300~399————重定向状态码


400~499————客户端错误状态码


500~599————服务器错误状态码


3. 304状态码

如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:客户端已经执行了GET,但文件未变化。

4.TCP/IP协议

传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。


5.处理404错误页面


(1)什么是404错误


HTTP 404 错误意味着链接指向的网页不存在,即原始网页的URL失效,这种情况经常会发生,很难避免,比如说:网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的URL地址无法访问;当Web 服务器接到类似请求时,会返回一个404 状态码,告诉浏览器要请求的资源并不存在。但是,Web服务器默认的404错误页面,无论Apache还是IIS,均十分简陋、呆板且对用户不友好,无法给用户提供必要的信息以获取更多线索,无疑这会造成用户的流失。


(2)404页面的作用


搜索引擎通过HTTP状态码来识别网页的状态。当搜索引擎获得了一个错误链接时,网站应该返回404状态码,告诉搜索引擎放弃对该链接的索引。而如果返回200或302状态码,搜索引擎就会为该链接建立索引,这导致大量不同的链接指向了相同的网页内容。结果是,搜索引擎对该网站的信任度大幅降低。


(3)如何检查自定义404页面能够返回”404”状态码


在自定义404错误页面设置完毕后,一定要检查一下其是不是能够正确地返回“404”状态码。检查的方法也相当简单,输入一个网站内不存在网页的url,查看一下HTTP Header的返回情况,确信其返回的是“404”状态码。


(4)正确处理404错误页面,保证返回”404状态码”


web.config里面有一个customErrors,我们通常设置的代码为:


<customErrors defaultRedirect="error.aspx" mode="RemoteOnly">

    <error statusCode="404" redirect="404.aspx" />

</customErrors>

它的工作是这样的,当访问到一个不存在的地址后,返回的是一个302状态码重定向到404.aspx页面。这样就可能导致爬虫认为这个页面仍然是有效的,只是链接错了,然后收录这个自定义的404页面。


正确的处理方法是在global.asax中将捕获的http错误的代码,贴在Application_Error事件中:


// 在出现未处理的错误时运行的代码

Exception error = Server.GetLastError();

if (error != null && error is HttpException)

{

    HttpException httpError = (HttpException)error;

    // 如果是Http错误,则设置响应的HttpCode

int httpCode = httpError.GetHttpCode();

    Response.StatusCode = httpCode;


    //这样就能返回原始错误的状态码,然后用判断状态码来跳转到我指定的页面


    Server.Transfer(Response.StatusCode == 404 ? "/404.aspx" : "/error.aspx");

}

阅读更多
换一批

没有更多推荐了,返回首页