精华内容
下载资源
问答
  • WEB浏览器

    2013-07-02 13:12:00
    1、明确你所要做的WEB浏览器的核心点在哪! 由于我所做的课设是计算机网络,核心点当然在于发送请求与响应请求,至于HTML的解析、JS的渲染,这对于数据结构与算法来说是一个很好的实践机会!以...

     夏日的雨往往总是暂时的狂妄,只要坚持住了,会有看到彩虹的一刻!刚刚计算机网络课程设计答辩完,正好来了场大雨,那就把这三天以来做WEB浏览器的过程简单的记录下吧,愿减少后来者走弯路~

       1、明确你所要做的WEB浏览器的核心点在哪!

            由于我所做的课设是计算机网络,核心点当然在于发送请求与响应请求,至于HTML的解析、JS的渲染,这对于数据结构与算法来说是一个很好的实践机会!以后有空时可以补充一下

       2、HTTP协议的RFC文档

            对于HTTP协议的RFC文档,目前最新的是HTTP1.1版本,它比1.0版本增加了分层代理,缓存的作用以及对稳定连接和虚拟主机的需求

            英文:http://www.faqs.org/rfcs/rfc2616.html#b

            中文:百度很多翻译版本,看个人喜欢

             该文档有105页,如果只用于本次课设可以只看(Range,Connection,If-Modified-Since、响应状态码等)

       3、SOCKET编程

            a、非阻塞式与阻塞式编程:主要的区别在于非阻塞式在每请求一个资源时,无法该资源是否可用都有一个返回值,而阻塞式只需要被阻塞起来,一直等待直到资源可用,也不返回任何值!当我们在做WEB浏览器时,我们必须所服务的网络是如何的,如果网络相对拥塞,那么采用非阻塞式的会相对好一些,而且我们可以利用HTTP协议中的Content-Range对所请求的资源进行规定本次是请求的是从哪里到哪里,这对于下载文档来说也是相当重要的!非阻塞式SOCKET编程写得比较好的有:http://www.embedu.org/Column/Column235.htm

            b、 步骤:

            没有实现缓存的步骤:

            创建SOCKET对象--域名解析得到目的IP--连接CONNECT到目的主机--发送请求报文--接收响应报文--关闭SOCKET

            实现了缓存的步骤:

            1、创建SOCKET对象--域名解析得到目的IP--连接CONNECT到目的主机--

            2、查看本地缓存中是否有相对应的URL缓存,如果有的话,把缓存中的时间Last-Modified的值填入请求报文的If-Modified-Since头域值中。再发送报文

            3、服务器接收到请求后将请求中Last-Modified的值与所请资源最后一个修改时间比较,如果一致的话则返回304表示资源没有改变,如果不一致的话,则按照常规进行发送响应(200:成功返回页面 ,206:部分发送)

        4、具体可以参照:

             Socket编程Http下载的简单实现:http://www.cnblogs.com/dejavu/archive/2013/01/08/2850265.html

             C++ 用socket封装成http:http://blog.csdn.net/itjobtxq/article/details/6234690

               如何使用SOCKET 发送HTTP1.1 GET POST请求包:http://blog.csdn.net/huangxy10/article/details/7662322

               HTTP Get,Post请求详解: http://blog.chinaunix.net/uid-25808509-id-3047968.html

                C++文件读写:http://www.cnblogs.com/ifeiyun/articles/1573134.html

     


    2013/7/2--13:06:29

    好快就这样结束我的大三!感觉大三第二学期真心没有学到什么,当程序员的,不应该如此浮躁啊,暑假没去实习也没什么的,重要的是计划与执行计划,重要的是快乐地生活!!!WEB浏览器是个很可以挖掘个人潜力的项目!要好好利用,挖掘自己潜在的能力,与发现自己的闪光点,这很重要!暑假有空时再一步完善吧!加油!

    转载于:https://www.cnblogs.com/yihua/p/3166656.html

    展开全文
  • 一般情况下MS提供的解决方案就能确定了,但有的还是不...Internet Explorer web 浏览器控件将触发 DocumentComplete 事件完成后下载 Web 页。此事件的应用程序中,您可以创建事件处理程序函数。本文介绍了确定是否应

    一般情况下MS提供的解决方案就能确定了,但有的还是不能,哪位兄弟有更好的办法请告知;

    MS的解决方案:http://support.microsoft.com/kb/180366/zh-cn

     

    Internet Explorer web 浏览器控件将触发 DocumentComplete 事件完成后下载 Web 页。此事件的应用程序中,您可以创建事件处理程序函数。本文介绍了在确定是否应采取的步骤完成后 web 浏览器控件下载 Web 页。
    Web 浏览器控件激发 DocumentComplete 事件时其 ReadyState 属性更改为 READYSTATE_COMPLETE。这表明 web 浏览器控件已经完成下载 Web 页。以下是有关此事件的一些要点:
    • 对于包含无框架的网页,一切都完成后一次激发 DocumentComplete。
    • 如果出现多个帧,DocumentComplete 获取激发多次。不是每个框架激发此事件,但每个框架,将触发 DownloadBegin 事件将触发对应的 DocumentComplete 事件。
    • DocumentComplete 事件有 IDispatch * 参数,即为其触发 DocumentComplete 框架 (shdocvw) 的 IDispatch。
    • 顶级框架,将激发最后 DocumentComplete。这样,请检查页面是下载,您需要检查是否相同的 web 浏览器控件 IDispatch IDispatch * 参数。

      Visual Basic,这是执行此检查的代码:
      Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object,
                                               URL As Variant)
         If (pDisp Is WebBrowser1.Object) Then
            Debug.Print "Web document is finished downloading"
         End If
      End Sub
    若要处理 Visual C++ 在 DocumentComplete 事件并确定是否 Web 页的下载已完成,请按照下列步骤。

    请注意所遵循的步骤取决于您使用 web 浏览器控件的方式。
    • 如果您正在 CWnd/CView 对象中创建 web 浏览器控件,则必须按照步骤 1 到 4。
    • 如果您正在创建 CDialog/CFormView 对象中的 web 浏览器控件,只需执行第 4 步。
    • 如果您使用的 Visual C++ 6.0 与提供的 CHtmlView 类,重写 CHtmlView::DocumentComplete(),并按照第 4 步,使用 CHtmlView 类的 m_pBrowserApp 成员来访问 web 浏览器控件。
    1. CWnd/CView 派生类的头文件中定义的 OnDocumentComplete 方法:
      afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                      VARIANT FAR* URL);
    2. 声明事件接收器中相同的头文件中:
      DECLARE_EVENTSINK_MAP()
      				
    3. 在实现文件 (.cpp) CWnd/CView 派生类中,实现事件接收映射:
      BEGIN_EVENTSINK_MAP(CYourView, CView)
         ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                  OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
      END_EVENTSINK_MAP()
    4. 实现 OnDocumentComplete 方法:
      void CWBTstView::OnDocumentComplete(LPDISPATCH lpDisp,
                                          VARIANT FAR* URL)
      {
         IUnknown*  pUnk;
         LPDISPATCH lpWBDisp;
         HRESULT    hr;
      
         pUnk = m_webBrowser.GetControlUnknown();
         ASSERT(pUnk);
      
         hr = pUnk->QueryInterface(IID_IDispatch, (void**)&lpWBDisp);
         ASSERT(SUCCEEDED(hr));
      
         if (lpDisp == lpWBDisp )
         {
            // Top-level Window object, so document has been loaded
            TRACE("Web document is finished downloading\n");
         }
      
        lpWBDisp->Release();
      }
    当 web 浏览器控件导航到更改顶级框架页时,此方法十分有效。如果导航发生在图文框本身,则激发的最终 DocumentComplete 的框架,并不是顶级框架说。例如,请考虑下面的方案。

    Web 浏览器控件所在的框架集。在框架集的某个框架,用户在单击链接本身的框架中打开新页面,并使该框架集的其余部分保持不变。再次,新的页面可能包含多个帧。因此,将有多个 DocumentComplete 通知 (一个用于每个新帧)。但是,尚未更改顶级框架,因为最终 DocumentComplete 的帧的已更改。

    如果您有兴趣检查最终的文档完成在此方案中,可以执行以下操作:
    检查 DocumentComplete 的 IDispatch 参数是否与第一个 NavigateComplete2 事件的 IDispatch 参数相同。由于第一个 NavigateComplete2 的顶级框架,并且顶级框架的也是最后一个 DocumentComplete,进行比较的方式将告诉页是否完成下载。
    下面是一些示例 c + + 代码:
    LPDISPATCH glpDisp = NULL; // global LPDISPATCH, can also
                               // be of class scope
    
    // NavigateComplete2 event
    void CWebbrDlg::OnNavigateComplete2Explorer1(LPDISPATCH pDisp,
                                                 VARIANT FAR* URL)
    {
       // Check if glpDisp is NULL. If NULL, that means it is
       // the top level NavigateComplete2. Save the LPDISPATCH
       if (!glpDisp)
          glpDisp = pDisp;
    }
    
    void CWebbrDlg::OnDocumentCompleteExplorer1(LPDISPATCH pDisp,
                                                VARIANT FAR* URL)
    {
       if (glpDisp && glpDisp == pDisp)
       {
          // if the LPDISPATCH are same, that means
          // it is the final DocumentComplete. Reset glpDisp
          TRACE("Document is done downloading");
          glpDisp = NULL;
       }
    }
    		
    展开全文
  • 不管种方式,Firefox都是基于Web组件的,而Chrome则在WebUI(本质上托管WebContents中)中实现了新对话框。 特征 Wexond Shield-没有任何广告的情况下浏览网络,也不允许网站跟踪您。 得益于Wexond盾搭载...
  • PAGE / NUMPAGES JSP页面缓存技术浏览器缓存 一概述 缓存的思想可以应用软件分层的各个层面它是一种内部机制对外界而言是不可感知的 数据库本身有缓存持久层也可以缓存比如hibernate还分1级和2级缓存 业务层也可以...
  • 您将它们放入您的应用程序或CDN中,然后无论使用种应用程序,每次的集成方法都是相同的! 任何东西中使用这个仓库 这是进行构建的起点。 以下是如何分叉并将其自定义为您自己的方法: 安装 git clone ...
  • 程序猿最喜欢一个浏览器

    千次阅读 2019-03-18 20:50:57
    几年前,IE还是最主流的web浏览器。但现在形势完全不同了,人们都笑话IE,纷纷转向其它浏览器。今天,我向大家分享一下针对IE的搞笑图片,只是逗乐而已,喝杯咖啡,坐下来慢慢享受吧。 1 反射弧有点长… ...

    主流浏览器之争从上个世纪开就开始,已经持续了很长的时间。就在几年前,IE还是最主流的web浏览器。但现在形势完全不同了,人们都在笑话IE,纷纷转向其它浏览器。今天,我向大家分享一下针对IE的搞笑图片,只是逗乐而已,喝杯咖啡,坐下来慢慢享受吧。

    1

    在这里插入图片描述
    反射弧有点长…

    在这里插入图片描述

    成长的烦恼

    在这里插入图片描述
    主流浏览器的用户群

    在这里插入图片描述
    浏览器猜猜看

    在这里插入图片描述

    欢迎更多喜欢it,在学习it的小伙伴加入我们的Python交流群:7848.6745

    总结出了一些Python视频资料和互联网公司Python程序员面试涉及到的绝大部分面试题和答案做成了文档分享给大家,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

    在这里插入图片描述

    展开全文
  • 我本次是测试web服务器是如何知道浏览器已经取消了请求?  如果浏览器取消请求,web服务器继续向浏览器发送请求,将会造成web服务器的崩溃。高级语言中种称之为异常也叫做异常中断,但是C语言中没有。可是,...


            对于web服务器,要尽量的减小服务器的负担。如果,浏览器已经取消请求连接,web服务器就不应该再向浏览器发送页面的数据了。我本次是测试web服务器是如何知道浏览器已经取消了请求哪?

            如果浏览器取消请求,web服务器继续向浏览器发送请求,将会造成web服务器的崩溃。在高级语言中种称之为异常也叫做异常中断,但是在C语言中没有。可是,C语言中的信号量提供了类似异常的功能。但是很多书上对linux信号这一块将的都不是很详细,经过查资料发现,其中的SIGPIPE信号比较符合要求,经过测试发现当浏览器取消请求时,服务端可以通过捕获此信号来进行处理,避免服务器端崩溃。经过测试发现不是浏览器已取消请求。那是在什么时候服务器在可以接受到SIGPIPE信号?下面我们看下测试。

     

    主要代码:本代码和结论只经过本人的简单测试,可能存在问题。请相信自己的能力,敢于质疑。欢迎提供更好的、更快、更简洁的代码或者方法和指出错误。在ubuntu12.04使用gcc4.6.3版本编译,在vc中如出现错误,请谅解。)

     

    res_socket = socket_listen( "127.0.0.1", 1024) ;
    
       signal (SIGPIPE, test);//test函数只在屏幕中输出了 test close
        while(1){
            conn_socket = accept( res_socket, (struct sockaddr * )&client_addr, &len );
            tmp = read (conn_socket, buf, MAX-1);
            printf ("sleep\n");
            sleep (5);
            printf ("sleep end\n");
            sprintf (buf, "HTTP/1.0 %d %s\r\nServer: Reage Web Server\r\n", 200, "OK");
            sprintf (buf, "%sContent-Type: text/html\r\n\r\n", buf );
            printf ("1\n");
            write (conn_socket, buf, strlen (buf));
            printf ("2\n");
            strcpy (buf, "test html");
            write (conn_socket, buf, strlen (buf));
            printf ("3\n");
            close(conn_socket);
    }
    
    


    结果图如下:

     

    测试方法:首先运行本程序。然后再浏览器中输入 “http://localhost:1024”网址,然后请求网站。随后,按”ESC”键。这样取消浏览器请求,因为我在代码中在服务器接收请求后,等5s以后才处理请求,所以在处理请求的时候浏览器已经取消了请求,但是第一次发送数据的时候,web服务器没有收到SIGPIPE信号。(难道我错了吗?没有,稍后解释),但是当第二次向浏览器发送数据的时候,web服务器收到信号,也就大家在屏幕看到的2和3中间显示的”test close”。

    相信大家看过后还会有一些问题的。一下我是我当时想不通,经过看书找到相关资料。仅供参考。一下答案是自己总结,有错误,请谅解,并指出。

     

    1.       为什么浏览器取消请求的时候,web服务器收到的是SIGPIPE信号的?

    SIGPIPE是在讲管道时候提起的,在《Unix环境高级编程》是这样说的”如果写一个读端已被关闭的管道,则会产生信号SIGPIPE,如果忽略该信号或者捕捉该信号并从器处理程序返回,则write返回-1,errno设置为EPIE”; 但是怎么在浏览器取消请求的时候,web服务器收到的使SIGPIPE,但是《Unix环境高级编程》是这样介绍管道:“管道是UNIX系统IPC的最古老形式,并且所有系统中都提供此种通信机制。“,然后说了 PIPE管道,FIFO管道、UNIX域套接字、命名流管道。所以说这些都是属于管道的。

     2.       为什么web服务器在第一次发送数据和浏览器关闭连接的时候没有收到SIGPIPE信号?

     我没有找到合适答案,希望有人提供答案的。

    稍后功能整理到Reage Web Server 中。
     
     
    展开全文
  • html网页如何选择使用浏览器内核渲染?本篇文章就给大家介绍html网页选择使用浏览器内核渲染的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 打造全网web前端全栈资料库(总目录...
  • 2、websql这种方式只有较新的chrome浏览器支持,并以一个独立规范形式出现 3、indexDB是一个为了能够客户端存储可观数量的结构化数据,并且这些数据上使用索引进行高性能检索的 API 4、Cookie一般网站为了辨别...
  • 概述 对于一直从事B/S架构(B/S也是一种C/S架构,只不过C/S自己写显示而B/S有...不论你的服务器端采用种业务架构,ORACLE数据库还是 MSSQL,站用户的角度思考,这个才是他们直接能接触到的,前端的用户体验...
  • 概述  对于一直从事B/S架构(B/S也是一种C/S架构,只不过C/S...不论你的服务器端采用种业务架构,ORACLE数据库还是MSSQL,站用户的角度思考,这个才是他们直接能接触到的,前端的用户体验给了用户直观的印象
  • localStorage作为客户端浏览器持久化存储方案 ...C:\Users\你的计算机名\AppData\Local\Google\Chrome\User Data\Default\Local Storage如果要在浏览器查看,打开调试工具(F12),application选项卡...
  • 要求:实现微信浏览器中向PC端推送消息。...我用DWRPC端能实现推送消息,但是手机端浏览器中没有任何效果,不知道是我弄错了还是说DWR本身的原因。 问题:请问位大神能够给出一套可行的解决方案?
  • 概述  对于一直从事B/S架构(B/S也是一种C/S架构,只不过C/S...不论你的服务器端采用种业务架构,ORACLE数据库还是MSSQL,站用户的角度思考,这个才是他们直接能接触到的,前端的用户体验给了用户直观的印象
  • 1.为什么使用浏览器缓存  以前了解的动态脚本加速,或者动态内容缓存之类,他们的原理都是避免...2.浏览器缓存存放在哪 浏览器一般会在用户主机中创建一个目录,用来保存缓存文件,有的浏览器会将部分缓存放在内存中
  • HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。...HTTP协议功能HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。Internet上的...
  • 为什么《长尾理论》的作者安德森认为“Web已死 而Internet将永生”?我们上网的方式不知不觉中发生了何种改变?终端怎样改变了互联网?传统的门户网站如何适应时代的变化?惠普为什么会任命前SAP公司的CEO李艾科为...
  • 我如何网络上保护自己的安全浏览?特别是:如果天不小心我的笔记本发生严重故障,那我存的数据会发生什么问题?这是Google为科技小白编写的一本在线HTML5书籍。http://www.20thingsilearned.com/zh-CN/home,写...
  • 概述 对于一直从事B/S架构(B/S也是一种C/S架构,只不过C/...不论你的服务器端采用种业务架构,ORACLE数据库还是MSSQL,站用户的角度思考,这个才是他们直接能接触到的,前端的用户体验给了用户直观的印象,投...
  • 检查了下图片路径也是正常的,问题出哪里了呢?无意中看到浏览器地址是: 会不会是因为部署Tomcat上的项目多了一层项目名称导致图片访问路径错了呢?于是我将图片的访问路径上加了一层项目名称: .
  • 万维网工作原理 当你想进入万维网上一个网页, 或者其他网络资源的时候,通常你要首先你的浏览器上键入你想访问网页的统一资源定位符(Uniform Resource Locator),缩写URL,或者通过超链接方式链接到那个网页或...
  • 很多年前,IE还是最主流的web浏览器。但现在形势早已完全不同了,不知道大家还有多少人用IE浏览器?今天,小编向大家分享一下针对IE的搞笑图片,只是逗乐而已,希望大家看的开心! 1、当浏览器化作一种枪,...
  • 很多年前,IE还是最主流的web浏览器。但现在形势早已完全不同了,不知道大家还有多少人用IE浏览器?今天,小编向大家分享一下针对IE的搞笑图片,只是逗乐而已,希望大家看的开心! 1、当浏览器化作一种枪,...
  • 今天在用springmvc+tomcat做...项目各种编码都设置为了UTF-8:4.jsp头也已经设置了编码:问题到底出现在哪?!最后经过多次调试,发现只要将springmvc主过滤器路径匹配规则设置为“/”,问题就可以解决:在网上找到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 793
精华内容 317
关键字:

web浏览器在哪