Multi-homed web server with compiled animation server and programmable functionality

Information

  • Patent Grant
  • 8364754
  • Patent Number
    8,364,754
  • Date Filed
    Friday, December 30, 2011
    13 years ago
  • Date Issued
    Tuesday, January 29, 2013
    11 years ago
Abstract
A multi-homed web server is disclosed including a plurality of virtual hosts operable in a web server. The multi-web server is configured to serve animations to clients over the web. The multi-web server may determine whether the specified time to send a subsequent graphic in a series of graphics has passed, and if the specified time has passed, then send a next graphic the next appropriate time. The web server software may be compiled as part of the native web server code.
Description
BACKGROUND OF THE INVENTION

1. Field of the Invention


The present invention relates to Web servers, i.e., server software for delivering content through the World Wide Web.


2. State of the Art


The Internet, and in particular the content-rich World Wide Web (“the Web”), have experienced and continue to experience explosive growth. The Web is an Internet service that organizes information using hypermedia. Each document can contain embedded reference to images, audio, or other documents. A user browses for information by following references. Web documents are specified in HyperText Markup Language (HTML), a computer language used to specify the contents and format of a hypermedia document (e.g., a homepage). HyperText Transfer Protocol (HTTP) is the protocol used to access a Web document.


Web servers offer Web services to Web clients, namely Web browsers. Primarily, Web servers retrieve Web documents and send them to a Web browser, which displays Web documents and provides for user interaction with those documents. Unlike Web browsers, of which there are many, the number of commercially available Web server packages, although growing, remains small. Currently, popular Web servers include those available from Netscape Communications, National Center for Supercomputing Applications (NCSA), and CERN.


Ideally, a Web server should be able to respond to and expeditiously service every connection request it receives, regardless of the volume of requests. The job of getting the request to the server and the reply back to the requester falls to the telecommunications infrastructure. In reality, however, because of machine limitations, there is a limit to the number of requests the server can serve within a given period of time without slowing down the machine to an extent that, from the viewpoint of the users, is perceptible, irritating, or simply intolerable. Web servers have typically followed one of two extreme approaches, either “rationing service” by denying further requests once some limiting number of requests are already pending, or attempting to service all requests received and hence slowing the machine to a crawl during extremely busy periods.


Webs servers, most of which are written for UNIX, often run under INETD (“eye-net-D”), an Internet services daemon in UNIX. (A daemon is a UNIX process that remains memory resident and causes specified actions to be taken upon the occurrence of specified events.) Typically, if more than sixty connection requests occur within a minute, INETD will shut down service for a period of time, usually five minutes, during which service remains entirely unavailable. Such interruptions are clearly undesirable, both on the part of the client-requester and the content provider. In the case of other Web servers, when the server is brought up, some fixed number of copies of the server, e.g. 50, are started. Up to 50 simultaneous connections may therefore be handled. A request for a 51st connection, however, will be denied, even if many or all of the 50 existing connections are temporarily idle.


Other considerations further complicate the picture of what is desired from a Web server, including considerations such as cost, perception and the very dynamic nature of the Web and Web content. Typically, only large organizations, or smaller organizations having considerable technical expertise, have their own Web servers. Establishing and running a Web server can entail a significant and ongoing investment in time and money. The alternative is for a person or organization to pay an Internet Service Provider (ISP) to house its content on the Web and make it available through the ISP's Web server. Of course, most organizations (and people) would like to be perceived as not lacking in either money or expertise. In cyberspace, therefore, an important factor in how an organization is perceived is its Web address. A Web address of XYZCorp.com commands, in a manner of speaking, immediate attention and respect, whereas a Web address of ISP.com/XYZCorp does not, at least to the same extent.


For a person or organization to have the best of both worlds, i.e., house its content on someone else's server but have it appear to be their own, the server must provide the capability of multi-homing. A multi-homed server behaves as multiple servers in one, responding to requests to multiple addresses, e.g. ISP.com, XYZCorp.com, johnsmith.com, etc. Some existing servers are multi-homed. However, the multi-homing capabilities of existing servers are quite limited. For example, although different customers may have different needs and desire different levels of service, in existing multi-homed servers, as regards a particular physical machine, the core functionality offered by the server (whether extensive or more limited) is necessarily the same for each customer.


An entirely different question concerns the extensibility of Web servers. Because the Web is continually in flux, a Web server must provide a mechanism that allows for extensions to be added to the Web server, or face obsolescence. Presently, the commonly accepted mechanism for extending the capabilities of existing Web servers is one called the Common Gateway Interface (CGI). The CGI specification has emerged as a standard way to extend the services and capabilities of a Web server having a defined core functionality. CGI “scripts” are used for this purpose. CGI provides an Application Program Interface, supported by CGI-capable Web servers, to which programmers can write to extend the functionality of the server. CGI scripts, however, although they may be compiled, are typically interpreted, meaning that they run at least ten times slower, typically, than compiled binary code. As the complexity of the Web, and hence the amount of time spent by a Web server running CGI scripts, increases, the Web server unavoidably suffers a significant performance hit.


What is needed, then, is a Web server that overcomes the foregoing difficulties.


SUMMARY OF THE INVENTION

The present invention, generally speaking, provides a Web server having a multi-homed, modular framework. The modular framework allows extensions to the Web server to be easily compiled into the Web server, allowing the extensions to run natively as part of the server instead of incurring the overhead typical of CGI scripts, for example. The multi-homing capabilities of the Web server provide the appearance to Web users of multiple distinct and independent servers, allowing a small company or individual to create the same kind of Web presence enjoyed by larger companies. In effect, multiple virtual servers run on the same physical machine. The Web server as a whole is easily extensible to allow additional capabilities to be provided natively within the Web server itself. Furthermore, each virtual server is independently configurable in order to turn different capabilities on or off or to modify operation of the virtual server. The Web server is also provided with enhanced security features, built-in animation capability, and other features that afford maximum flexibility and versatility.





BRIEF DESCRIPTION OF THE DRAWINGS

The present invention may be further understood from the following description in conjunction with the appended drawing. In the drawing:



FIG. 1 is a block diagram of one embodiment of the Web server of the present invention;



FIG. 2 is a block diagram illustrating the manner in which the present Web server handles connection requests;



FIG. 3 is an example of a database-like data structure that allows extensions to the Web server to be easily added so as to run natively as part of the Web server;



FIG. 4 is an example of a portion of the master configuration file of FIG. 1;



FIG. 5 is an example of a conventional Web server log entry;



FIG. 6 is an example of a Web server log entry in accordance with one aspect of the present invention; and



FIG. 7 is a block diagram illustrating in greater detail the structure of the present Web server.





DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT

Referring now to FIG. 1, an overview of the present Web server will be provided. The Web server is a software package that runs on a physical machine 100, e.g., a super-minicomputer such as a SunServer machine available from Sun Microsystems of Menlo Park, Calif., or on any of a wide variety of suitable UNIX platforms.


Conventionally, a Web server is provided with some fixed feature set. To provide additional capabilities, CGI scripts are used. Furthermore, the logical view of the Web server on the Web is the same as the physical view of the underlying hardware. That is, a single physical machine running a conventional Web server appears on the Web as a single logical machine.


The present Web server, on the other hand, although it runs on a single physical machine 100, appears on the Web as multiple virtual hosts VH1 through VHn. Each virtual host has a separate configuration sub-file (sub-database) C1, C2, etc., that may be derived from a master configuration file, or database, 110. A defaults file 111 is used to provide plug-in extensibility of the Web server. The defaults file is compiled as part of the Web server and expresses at the program level what the program is to do to provide various kinds of functionality. The configuration sub-files, on the other hand, are text files that may be used to enable or disable different functions for each virtual host.


Each virtual host also has its own separate log file L1, L2, etc. This feature allows for users of different hosts on the same machine to have access to up-to-the minute log information without allowing access to logs of other pages—a very useful feature for ISPs, for example. Each virtual host is capable of servicing many simultaneous connections. The number of allowable simultaneous connections is configurable and may be limited to a predetermined number, or may be limited not by number but only by the load currently experienced by the physical machine. The number of maximum allowable connections or the maximum allowable machine load may be specified in the configuration file.


As described in greater detail in connection with FIG. 5, each configuration file C1, C2, etc., may have an access rules database 113, including a Allow portion 115, a Deny portion 117, or both. Using the access rules database 113, the Web server is able to perform many of the functions of a conventional firewall, thereby enhancing network security.


The Web server is self-daemoning, meaning that it is not subject to the limitations ordinarily imposed by the usual Internet daemon, INETD. Referring to FIG. 2, when the Web server is brought up, it first reads in the master configuration file and then becomes a daemon and waits for connection requests. When a connection request is received, the Web server “forks a copy” of itself, using the forking capabilities of UNIX, to create a virtual host VHn to handle that connection request. When a parent process is forked to create a child process, the child process runs off the same base code as the parent process but using its own set of variables. In particular, the child process will typically use its own sub-database from within the master configuration database to determine the configuration of that particular virtual host. Child processes are created “on demand” as connection requests are received and complete running as service of those connection requests is completed.


As described in greater detail hereinafter, animation capabilities, instead of being an add-on feature provided through a CGI script, are built into the server itself. Hence, in FIG. 2, when a request is received on a connection to process an animation file 201, the child process VHn belonging to that connection is able to process the animation file directly.


Animation is one example of a recent enhancement now supported by some Web servers, although typically through CGI and not directly. Numerous and varied other enhancements are sure to follow. Hence, the present Web server, although it provides a default feature set, allows for that default feature set to be readily expanded.


The default feature set is defined in the defaults file 111, an example of which is shown in FIG. 3. The defaults file is, in effect, a database that matches different types of requests with modules available for handling those requests. The database is a table having, in the illustrated embodiment, four columns. In the first column is the file extension received as part of the request. Examples of file extensions are “ani” (animation), “cgi,” “html,” “shtml” (server-parsed HTML), etc. In the second column is a type identifier used internally by the Web server, e.g., TY.sub.—ANIMATION, TY.sub.—CGI, etc. In the third column is type information returned to the Web browser, e.g., “text/html,” “image/gif,” etc. In some instances, this type is not clearly defined in advance but depends on the module called to process the request. The type returned to the browser may therefore be NULL. Finally, in the fourth column is the module to be called to process the request, e.g., ProcessANI (an animation player), ProcessCGI, etc.


The defaults table of FIG. 3 serves as the foundation of a modular framework that allows extensions to the Web server to be easily added so as to run natively as part of the Web server. In one embodiment, extensions are added by modifying the source code file containing the defaults table, to add a new row to the table, for example, or to modify an existing row. A new module having new capabilities might be substituted for an existing module, for example. The defaults file is then recompiled and linked to the Web server. Preferably, a software development kit is provided with the Web server to facilitate this process.


Hence, a mechanism is established that allows modules to be added without the need to rebuild the entire Web server. In accordance with this mechanism, adding an additional server feature involves the following steps:

    • 1. Edit the defaults file (the list of processes) and add an entry for the specific file extension. Add the procedure name to be used for processing this new type. Add an “#include” file defining the procedure at the beginning of the defaults table.
    • 2. Write the procedure. The procedural call to the process will pass two parameters: a File Descriptor to send output to; and a file Name of the document/file to process. The procedure should be written accordingly.
    • 3. Compile the procedure, link it into the Web server, and test.


The modular framework just described governs the capabilities of the overall Web server. All customers may not want to pay for use of a high-performance Web server having a comprehensive feature set. The multi-homing capabilities of the present Web server, however, allows the same code to be configured differently for each of multiple virtual hosts, thereby catering to the preferences (and budgets) of different classes of customers. The effect is the same as offering a range of different Web server products of different capabilities, but with the distinct advantage that only a single code package need be produced and maintained.


Referring again to FIG. 1, apart from the defaults database, each virtual host has its own configuration sub-file C1, C2, etc. Within the configuration sub-file of each virtual host is a text-file database, not compiled, that is similar in concept to the database of FIG. 3. However, the process to be called for a particular type of request may vary, virtual host to virtual host, from the default process specified in the defaults database. On a virtual host that is configured to have a more limited feature set, for example, CGI scripts may not be allowed. Therefore, the process specified for CGI, instead of ProcessCGI, might be NULL. Similarly with other capabilities. The differences between the configuration database and the defaults database, instead of limiting the capabilities of the virtual host, may actually increase the capabilities of the virtual host. For example, for HTML requests, instead of the usual SendFile process, the process ProcSHTML may be specified. This configuration would allow all HTML files to include other files, cause execution of other programs, etc., resulting in a dynamic document rather than a static document.


Furthermore, the Web server may be a “client application” of a license server, described in U.S. patent application Ser. No. 08/607,081 AUTOMATED SYSTEM FOR MANAGEMENT OF LICENSED SOFTWARE now U.S. Pat. No. 5,790,664, filed on even date herewith, incorporated herein by reference. Using the system described in the foregoing application, features of the Web server may be enabled or disabled on a feature-by-feature and virtual host-by-virtual host basis.


An example of a portion of a master configuration file is shown in FIG. 4. Within the master configuration file database, different portions of the file form sub-databases for different virtual hosts. Each sub-database may specify a root directory for that particular virtual host.


Also as part of the configuration file of each virtual host, an access rules database may be provided governing access to the virtual host, i.e., which connections will be allowed and which connections will be denied. Many of the features more commonly included in a firewall may therefore be included in the Web server itself. The syntax of the access rules database is such as to allow great flexibility in specifying not only what machines are or are not to be allowed access but also when such access is allowed to occur. The access rules database may have an Allow portion, a Deny portion or both. If the access rules database has an Allow portion, only connections from machines matching the Allow rules will be allowed, regardless of whether there is also a Deny portion. If there is a Deny portion but no Allow portion, then connections from machines matching the Deny rules will be denied and all other connections will be allowed. Machines may be specified by name or by IP address, and may include “wildcards,” address masks, etc., for example: MisterPain.com, *.srmc.com, 192.168.0.*, 192.168.0.0/24, and so on.


Time restrictions may be included in either the Allow rules or the Deny rules. For example, access may be allowed from 1 am to 12 pm; alternatively, access may be denied from 12 pm to 1 am. Also, rules may be given identifiers, such as RULE1, RULE2, etc., and repeated elsewhere within the configuration sub-file of the virtual host.


All access rules must be satisfied in order to gain access to a virtual host. Depending on the virtual host, however, further levels of access scrutiny may be specified within the configuration sub-file. Each successive level of access scrutiny includes all previous levels. The first level of access scrutiny is that all rules must be satisfied, as previously described. The second level of access scrutiny is that the accessing machine must have a DNS (Domain Name Services) entry. Having a DNS entry lends at least some level of legitimacy to the accessing machine. The third level of access scrutiny is that the accessing machine must in addition have a reverse DNS entry. The fourth and most stringent level of access scrutiny is that the forward DNS entry and the reverse DNS entry must match.


If access is granted and a connection is opened, when the connection is later closed, a log entry is made recording information about that access. One important feature of the present Web server is that log entries identify the particular virtual host that was accessed. Another important feature is that log entries identify the “referrer,” i.e., the source of any link that may have been followed to get to the Web site that was accessed. The owner of a Web site may advertise that site through various different channels. In order to determine what works and what does not, in terms of generating hits on a Web site, one must know how someone came to access that Web site.


Referring to FIG. 5, conventional log entries are typically of a format similar to the one shown. The IP address or name 501 of the accessing machine is recorded, followed by the UserName 503, if any, entered during the course of the access, the date and time 505, the connection request 507 as it was received, an error code ERC (509) specifying any error that may have occurred, and a count 511 of the number of bytes transferred. As shown in FIG. 6, the present Web server logs in addition the identity of the virtual host (651) and the referrer (653). Log reports may be generated from this information, listing, for example, the top referrers generating hits to a Web site, etc. Log reports may be generated on a per-host basis or may be generated for the physical machine, i.e., all virtual hosts together.


Referring now to FIG. 7, the logical structure of the present Web server is shown in greater detail.


The main execution thread of the Web server is controlled by a daemon. In FIG. 7, the daemon includes elements 701, 703 and 705. Although the daemon mode of operation is the default mode, the same code can also be run interactively under the conventional INETD daemon. Hence, when the Web server is first brought up, command-line processing is performed in block 701 to determine the mode of operation (daemon or interactive), which configuration file to read, etc. For purposes of the present discussion, the daemon mode of operation, which is the default, will be assumed.


Immediately thereafter, the daemon changes user in block 703 so as to become an unprivileged user. This step of becoming an unprivileged user is a security measure that avoids various known security hazards encountered, for example, when CGI scripts or other programs are allowed to run.


Only after the daemon has read the specified configuration file and become an unprivileged user does the daemon actually become a daemon. By daemonizing after the configuration file (e.g., the master configuration file) has been read in, the configuration file in effect becomes “hard coded” into the program such that the program no longer has read it in. The daemon then waits to receive a connection request.


When a connection request is received, the daemon forks a copy of itself to handle the connection request. The daemon then uses a piece of code referred to herein as an INET Wrapper 710 to check on the local side of the connection and the remote side of the connection to determine, in accordance with the appropriate Allow and Deny databases, whether the connection is to be allowed.


First the address and name (if possible) are obtained of the virtual machine for which a connection is requested. Once the local host has been identified by name or at least by IP address, the master configuration database is scanned to see if a corresponding sub-database exists for that local host. If so, the sub-database is set as the configuration database of the local host so that the master configuration database need no longer be referred to. If no corresponding sub-database is found, then by default the master configuration database is used as the configuration database. There may be any number of virtual machines, all independently configurable and all running on the same physical machine. The determination of which virtual host the daemon child process is to become is made in block 705, under the heading of “multi-homing.”


Once the daemon child process has determined which host it is, the INET Wrapper is used to do checking on the remote host, i.e., the host requesting the connection. Recalling the different levels of access scrutiny described previously, first, the configuration database is consulted to determine the level of access scrutiny that will be applied. (The default level of access scrutiny is that no DNS entry is required.) Then, the address and name (if possible) are obtained of the machine requested the connection, and the appropriate level of access scrutiny is applied as determined from the configuration database.


If the remote host satisfies the required level of access scrutiny insofar as DNS entries are concerned, the INET Wrapper gets the Allow and Deny databases for the virtual host. First the Allow database is checked, and if there is an Allow database but the remote host is not found in it, the connection is denied. Then the Deny database is checked. If the remote host is found in the Deny database, then the connection is denied. All other rules must also be satisfied, regarding time of access, etc. If all the rules are satisfied, then the connection is allowed.


Once the connection has been allowed, the daemon invokes HTTP server code 720 that operates in large part in a similar manner as conventional Web server. The HTTP server code 720 processes commands by examining the filename extension associated with the command in block 721 and calling appropriate routines such as routines 723-726 to process those commands. When processing is completed, the connection is closed, if it has not already been closed implicitly.


Several features of the HTTP server code should be noted. The server includes code for handling both client and server proxies and redirects, all as part of the Web server. The server mode is determined in accordance with the configuration file of the virtual host handling the request. The configuration file may specify Client Proxy mode for the virtual host, in which case the virtual host proxies requests directed to the outside world, e.g., Web sites other than the present Web site. The configuration file may specify Server Proxy mode for the virtual host, in which case the virtual host proxies requests to access a different virtual host. The configuration file may specify Redirect mode, in which case the request is redirected to a different specified server, either a different virtual host on the same physical machine or a different physical machine altogether.


The animation player 726 of the present Web server also differs in significant respects from conventional animation players. Fundamentally, to the knowledge of the inventors, no other Web server incorporates an animation player as part of the native Web server code. By incorporating the animation player into the Web server itself, instead of adding the animation capabilities through the use of a CGI script, for example, animations may be handled much more efficiently. Furthermore, unlike conventional animation players, which typically just send a sequence of graphics, the present animation player provides full-fledge programming capability, including the ability to send one graphic at a specified time and then a next graphic at a next specified time. When a line is reached in the animation file that calls for a graphic to be displayed at a certain time, if that time has already passed, then that line is ignored by the animation player and the graphic is not sent. Instead the animation player tries to display the next graphic at the next specified time. In this manner, regardless of the speed of the connection, the playing time of the animation is always the same. On a slow connection, the user will see fewer frames, and on a fast connection the user will see more frames. The length of the animation will be the same. Also, labels may be included in the animation, and commands may be used to go to a specified label, or go to the beginning of the animation.


It will be appreciated by those of ordinary skill in the art that the invention can be embodied in other specific forms without departing from the spirit or essential character thereof. The foregoing description is therefore considered in all respects to be illustrative and not restrictive. The scope of the invention is indicated by the appended claims, and all changes which come within the meaning and range of equivalents thereof are intended to be embraced therein.

Claims
  • 1. A multi-homed web server comprising: a web server physical machine;web server software operable on said web server physical machine, the web server software configured to provide a plurality of virtual hosts on said web server physical machine;a defaults file, said defaults file being compiled and linked to said web server software;said defaults file comprising a database for storing informational least regarding the file extension of a received request, type of information to returned responsive to said received request, and the identity of a module having predetermined functionality to process said received request; andwherein new functionality may be added to said web server software by editing said defaults file, re-compiling the edited defaults table, and re-linking the compiled edited defaults file to said web server software; andwherein said web server software has instructions compiled as part of said web server software, wherein execution of said compiled instructions by a processor of said web server:receives a request from a client over said public network to view an animation comprising a series a graphics;send a first graphic to said client;send a next graphic in said series of graphics at a specified time;determine whether the specified time to send a subsequent graphic in said series of graphics has passed;if said specified time has not passed, then send a next graphic in said series of graphics at said specified time; andif said specified time has passed, then send a next graphic in said series of graphics at a next specified time.
  • 2. The multi-homed web server of claim 1, wherein said animation is served said series of graphics is sent to said client.
  • 3. The multi-homed web server of claim 2, wherein the playing time said series of graphics is substantially equal regardless of the speed of said client's public network connection.
  • 4. The multi-homed web server of claim 1, further comprising labels in said animation file for providing navigation aids allowing a user to navigate within said animation.
  • 5. The multi-homed web server of claim 4, wherein at least one of said navigational aids allows said user to go to a specific label in said animation.
CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No. 12/841,045, filed Jul. 21, 2010, which is a continuation of U.S. patent application Ser. No. 11/156,994, filed Jun. 16, 2005, now abandoned, which is a continuation of U.S. patent application Ser. No. 10/700,407, filed Nov. 3, 2003, now issued as U.S. Pat. No. 7,386,880, which is a continuation of U.S. patent application Ser. No. 09/189,697, filed Nov. 10, 1998, now issued as U.S. Pat. No. 6,647,422, which is a divisional of U.S. patent application Ser. No. 08/607,068, filed Feb. 26, 1996, now issued as U.S. Pat. No. 5,870,550, all of which are hereby incorporated by reference as if set forth herein.

US Referenced Citations (287)
Number Name Date Kind
4201889 Lawrence et al. May 1980 A
4310727 Lawser Jan 1982 A
4348554 Asmuth Sep 1982 A
4453247 Suzuki et al. Jun 1984 A
4554659 Blood et al. Nov 1985 A
4565903 Riley Jan 1986 A
4570217 Allen et al. Feb 1986 A
4665500 Poland May 1987 A
4683563 Rouse et al. Jul 1987 A
4730312 Johnson Mar 1988 A
4736364 Basso et al. Apr 1988 A
4748658 Gopal May 1988 A
4823338 Chan et al. Apr 1989 A
4853955 Thorn et al. Aug 1989 A
4896319 Lidinsky et al. Jan 1990 A
4914619 Harris et al. Apr 1990 A
4916690 Barri Apr 1990 A
4926416 Weik May 1990 A
4979118 Kheradpir Dec 1990 A
4985889 Frankish et al. Jan 1991 A
4991204 Yamamoto et al. Feb 1991 A
4993014 Gordon Feb 1991 A
5003584 Benyacar Mar 1991 A
5016162 Epstein et al. May 1991 A
5018191 Catron et al. May 1991 A
5036318 Bachhuber et al. Jul 1991 A
5048081 Gavaras Sep 1991 A
5058104 Yonehara et al. Oct 1991 A
5067123 Hyodo et al. Nov 1991 A
5073890 Danielsen Dec 1991 A
5075884 Sherman et al. Dec 1991 A
5084867 Tachibana et al. Jan 1992 A
5086461 Thorn et al. Feb 1992 A
5089954 Rago Feb 1992 A
5091903 Schrodi Feb 1992 A
5101404 Kunimoto et al. Mar 1992 A
5115431 Williams et al. May 1992 A
5163057 Grupp Nov 1992 A
5166931 Riddle Nov 1992 A
5168492 Beshai et al. Dec 1992 A
5185743 Murayama Feb 1993 A
5193110 Jones et al. Mar 1993 A
5204857 Obara Apr 1993 A
5208811 Kashio et al. May 1993 A
5214646 Yacoby May 1993 A
5216669 Hofstetter et al. Jun 1993 A
5218602 Grant et al. Jun 1993 A
5231631 Buhrke et al. Jul 1993 A
5231633 Hluchyj et al. Jul 1993 A
5233607 Barwig et al. Aug 1993 A
5239539 Uchida et al. Aug 1993 A
5239542 Breidenstein et al. Aug 1993 A
5249178 Kurano et al. Sep 1993 A
5251255 Epley Oct 1993 A
5253247 Hirose et al. Oct 1993 A
5255266 Watanabe et al. Oct 1993 A
5258752 Fukaya et al. Nov 1993 A
5258979 Oomuro et al. Nov 1993 A
5268895 Topper Dec 1993 A
5271010 Miyake Dec 1993 A
5274680 Sorton et al. Dec 1993 A
5278889 Papanicolaou et al. Jan 1994 A
5282244 Fuller et al. Jan 1994 A
5285441 Bansal et al. Feb 1994 A
5289472 Cho Feb 1994 A
5291479 Vaziri et al. Mar 1994 A
5291492 Andrews et al. Mar 1994 A
5301270 Steinberg et al. Apr 1994 A
5311509 Heddes et al. May 1994 A
5317562 Nardin et al. May 1994 A
5323389 Bitz et al. Jun 1994 A
5327421 Hiller et al. Jul 1994 A
5327433 Hall Jul 1994 A
5329308 Binns et al. Jul 1994 A
5339318 Tanaka Aug 1994 A
5345443 D'Ambrogio et al. Sep 1994 A
5345445 Hiller et al. Sep 1994 A
5345446 Hiller et al. Sep 1994 A
5357510 Norizuki et al. Oct 1994 A
5361256 Doeringer et al. Nov 1994 A
5363433 Isono Nov 1994 A
5365524 Hiller et al. Nov 1994 A
5367566 Moe et al. Nov 1994 A
5373504 Tanaka et al. Dec 1994 A
5375124 D'Ambrogio et al. Dec 1994 A
5375242 Kumar et al. Dec 1994 A
5377186 Wegner et al. Dec 1994 A
5384771 Isidoro et al. Jan 1995 A
5384840 Blatchford et al. Jan 1995 A
5392402 Robrock Feb 1995 A
5394393 Brisson et al. Feb 1995 A
5394398 Rau Feb 1995 A
5394402 Ross Feb 1995 A
5400339 Sekine et al. Mar 1995 A
5410598 Shear Apr 1995 A
5412654 Perkins May 1995 A
5414701 Shtayer et al. May 1995 A
5418783 Yamaki et al. May 1995 A
5420857 Jurkevich May 1995 A
5420858 Marshall et al. May 1995 A
5420916 Sekiguchi May 1995 A
5421011 Camillone et al. May 1995 A
5422882 Hiller et al. Jun 1995 A
5425090 Orriss Jun 1995 A
5426636 Hiller et al. Jun 1995 A
5428607 Hiller et al. Jun 1995 A
5428609 Eng et al. Jun 1995 A
5434852 La Porta et al. Jul 1995 A
5434981 Lenihan et al. Jul 1995 A
5440563 Isidoro et al. Aug 1995 A
5442630 Gagliardi et al. Aug 1995 A
5444702 Burnett Aug 1995 A
5444703 Gagliardi et al. Aug 1995 A
5444713 Backaus et al. Aug 1995 A
5446738 Kim et al. Aug 1995 A
5450394 Gruber Sep 1995 A
5452297 Hiller et al. Sep 1995 A
5453980 Van Engelshoven Sep 1995 A
5453981 Katsube et al. Sep 1995 A
5454034 Martin Sep 1995 A
5457681 Gaddis Oct 1995 A
5457684 Bharucha Oct 1995 A
5463552 Wilson et al. Oct 1995 A
5463620 Sriram Oct 1995 A
5463621 Suzuki Oct 1995 A
5473602 McKenna et al. Dec 1995 A
5473677 D'Amato et al. Dec 1995 A
5473679 La Porta et al. Dec 1995 A
5477537 Dankert et al. Dec 1995 A
5479401 Bitz et al. Dec 1995 A
5479402 Hata et al. Dec 1995 A
5479407 Ko Dec 1995 A
5479475 Grob et al. Dec 1995 A
5479495 Blumhardt Dec 1995 A
5483527 Doshi et al. Jan 1996 A
5485455 Dobbins et al. Jan 1996 A
5490251 Clark et al. Feb 1996 A
5491694 Oliver et al. Feb 1996 A
5495484 Self et al. Feb 1996 A
5499290 Koster Mar 1996 A
5502726 Fischer Mar 1996 A
5504742 Kakuma et al. Apr 1996 A
5506844 Rao Apr 1996 A
5509010 La Porta Apr 1996 A
5509123 Dobbins et al. Apr 1996 A
5513178 Tanaka Apr 1996 A
5515359 Zheng May 1996 A
5519707 Subramanian et al. May 1996 A
5521597 Dimitri May 1996 A
5521910 Matthews May 1996 A
5522042 Fee et al. May 1996 A
5526413 Cheston, III et al. Jun 1996 A
5526414 Bedard et al. Jun 1996 A
5530698 Kozaki et al. Jun 1996 A
5533106 Blumhardt Jul 1996 A
5539815 Samba Jul 1996 A
5539816 Pinard et al. Jul 1996 A
5539884 Robrock Jul 1996 A
5541918 Ganmukhi et al. Jul 1996 A
5541926 Saito et al. Jul 1996 A
5544152 Obermanns et al. Aug 1996 A
5544161 Bigham et al. Aug 1996 A
5548580 Buckland Aug 1996 A
5550816 Hardwick et al. Aug 1996 A
5550819 Duault Aug 1996 A
5550914 Clarke et al. Aug 1996 A
5557320 Krebs Sep 1996 A
5563939 La Porta et al. Oct 1996 A
5566173 Steinbrecher Oct 1996 A
5568475 Doshi et al. Oct 1996 A
5570368 Murakami et al. Oct 1996 A
5577039 Won et al. Nov 1996 A
5579311 Chopping et al. Nov 1996 A
5581600 Watts Dec 1996 A
5583862 Callon Dec 1996 A
5583863 Darr, Jr. Dec 1996 A
5583864 Lightfoot et al. Dec 1996 A
5586177 Farris Dec 1996 A
5587999 Endo Dec 1996 A
5590181 Hogan Dec 1996 A
5592477 Farris et al. Jan 1997 A
5598536 Slaughter, III et al. Jan 1997 A
5600640 Blair et al. Feb 1997 A
5600643 Robrock Feb 1997 A
5606668 Shwed Feb 1997 A
5608447 Farry et al. Mar 1997 A
5617540 Civanlar et al. Apr 1997 A
5619716 Nonaka et al. Apr 1997 A
5621728 Lightfoot et al. Apr 1997 A
5623601 Vu Apr 1997 A
5623605 Keshav et al. Apr 1997 A
5625670 Campana, Jr. et al. Apr 1997 A
5636218 Ishikawa et al. Jun 1997 A
5636371 Yu Jun 1997 A
5650994 Daley Jul 1997 A
5666487 Goodman et al. Sep 1997 A
5671279 Elgamal Sep 1997 A
5677905 Bigham et al. Oct 1997 A
5684716 Freeman Nov 1997 A
5684799 Bigham et al. Nov 1997 A
5684800 Dobbins Nov 1997 A
5691973 Ramstrom et al. Nov 1997 A
5713075 Threadgill et al. Jan 1998 A
5717747 Boyle Feb 1998 A
5721908 Lagarde et al. Feb 1998 A
5729545 Libman Mar 1998 A
5732219 Blumer et al. Mar 1998 A
5734961 Castille Mar 1998 A
5742604 Edsall et al. Apr 1998 A
5764626 VanDervort Jun 1998 A
5765152 Erickson Jun 1998 A
5774551 Wu et al. Jun 1998 A
5774670 Montulli Jun 1998 A
5784450 Stahl Jul 1998 A
5790664 Coley et al. Aug 1998 A
5793763 Mayes et al. Aug 1998 A
5793964 Rogers et al. Aug 1998 A
5793966 Amstein et al. Aug 1998 A
5797035 Birrittella et al. Aug 1998 A
5799292 Hekmatpour Aug 1998 A
5802047 Kinoshita Sep 1998 A
5802053 Bollella et al. Sep 1998 A
5802320 Baehr et al. Sep 1998 A
5812671 Ross Sep 1998 A
5813863 Sloane et al. Sep 1998 A
5822306 Catchpole Oct 1998 A
5822524 Chen et al. Oct 1998 A
5842125 Modzelesky et al. Nov 1998 A
5845267 Ronen Dec 1998 A
5862391 Salas et al. Jan 1999 A
5870550 Wesinger et al. Feb 1999 A
5878115 Valentine et al. Mar 1999 A
5878347 Joensuu et al. Mar 1999 A
5890064 Widergen et al. Mar 1999 A
5892900 Ginter et al. Apr 1999 A
5905726 Gupta May 1999 A
5913040 Rakavy et al. Jun 1999 A
5913164 Pawa et al. Jun 1999 A
5915008 Dulman Jun 1999 A
5918018 Gooderum et al. Jun 1999 A
5918019 Valencia Jun 1999 A
5926745 Threadgill et al. Jul 1999 A
5944795 Civanlar Aug 1999 A
5948069 Kitai et al. Sep 1999 A
5949871 Kabay et al. Sep 1999 A
5959990 Frantz et al. Sep 1999 A
5982773 Nishimura et al. Nov 1999 A
5983350 Minear et al. Nov 1999 A
5987140 Rowney et al. Nov 1999 A
5991301 Christie Nov 1999 A
6009464 Hamilton et al. Dec 1999 A
6009503 Liedtke Dec 1999 A
6011790 Fisher Jan 2000 A
6016318 Tomoike Jan 2000 A
6018658 Blachier Jan 2000 A
6035105 McCloghrie et al. Mar 2000 A
6044264 Huotari et al. Mar 2000 A
6058288 Reed et al. May 2000 A
6058429 Ames et al. May 2000 A
6061349 Coile et al. May 2000 A
6064671 Killian May 2000 A
6064723 Cohn May 2000 A
6069890 White et al. May 2000 A
6073015 Berggren et al. Jun 2000 A
6092096 Lewis Jul 2000 A
6138107 Elgamal Oct 2000 A
6141689 Yasrebi Oct 2000 A
6195357 Polcyn Feb 2001 B1
6209040 Acton et al. Mar 2001 B1
6366586 Christie Apr 2002 B1
6366893 Hannula et al. Apr 2002 B2
6370126 De Baere et al. Apr 2002 B1
6618754 Gosling Sep 2003 B1
6647422 Wesinger et al. Nov 2003 B2
6658568 Ginter et al. Dec 2003 B1
6675146 Rhoads Jan 2004 B2
6976258 Goyal et al. Dec 2005 B1
6985937 Keshav et al. Jan 2006 B1
7047241 Erickson May 2006 B1
7386880 Wesinger et al. Jun 2008 B2
8117298 Wesinger et al. Feb 2012 B1
20040133637 Wesinger, Jr. et al. Jul 2004 A1
20060015627 Wesinger, Jr. et al. Jan 2006 A1
20060015628 Wesinger, Jr. et al. Jan 2006 A1
20060047833 Wesinger, Jr. et al. Mar 2006 A1
20060047834 Wesinger, Jr. et al. Mar 2006 A1
20090037991 Ellis et al. Feb 2009 A1
Non-Patent Literature Citations (39)
Entry
Berners-Lee, T. et al., “Hypertext Transfer Protocol—HTTP/1.0”, Feb. 19, 1996.
Brown, Mark R. 'Using Netscape 2, Que Corporation, Special Edition, pp. 885-891, 1995.
G. Stephan Nace, “Search Tools on the Internet”, [Internet] http://www.nashville.com/gsnace/search.htm 1993.
Internet Engineering Task Force, Requirements for Internet Hosts-Communication Layers, RFC 1122, Oct. 1989, pp. 1-114.
Ioannidis, John, “Configuring Multiple Ip Addresses”, Apache HTTP Server Version 1.3, Feb. 26, 2008.
McLemore, Benjamin, “How do I alias a server and make it look like a dedicated server,” Dec. 9, 1994, 11 pages.
Najork, Marc, “Web-based Algorithm Animation,” Proceedings of the 38th Conference on Design Automation, Las Vegas, Nevada, Jun. 18-22, 2001, pp. 506-511.
NCSA HTTPd Multihome/Virtualhost support, http://hoohoo.nsca.uiuc.edu/docs/tutorials/VirtualHost.html, Oct. 20, 1995, 3 pages.
Richman, “Oracle Web Package Raises Internet Ante,” Computerworld, vol. 29, Issue 44, pp. 20ff, Oct. 30, 1995.
Stevens, W. Richard “UNIX Network Programming,” Prentice Hall, Inc. 1990, pp. 55-57, 334-339.
William Cross, “All-In-One-Search p.”, [Internet] http://www.albany.net/all1www.html, 1995.
U.S. Appl. No. 08/607,068 Final Office Action mailed Jul. 27, 1998.
U.S. Appl. No. 08/607,068 Office Action mailed Apr. 8, 1998.
U.S. Appl. No. 10/342,117 Final Office Action mailed Sep. 7, 2005.
U.S. Appl. No. 10/342,117 Office Action mailed Jan. 6, 2005.
U.S. Appl. No. 10/655,575 Final Office Action mailed Nov. 24, 2009.
U.S. Appl. No. 10/655,575 Office Action mailed Feb. 18, 2009.
U.S. Appl. No. 10/655,741 Office Action mailed Oct. 8, 2008.
U.S. Appl. No. 10/700,407 Final Office Action mailed Dec. 28, 2007.
U.S. Appl. No. 10/700,407 Office Action mailed Apr. 6, 2007.
U.S. Appl. No. 11/155,300 Final Office Action mailed Jan. 20, 2010.
U.S. Appl. No. 11/155,300 Office Action mailed Apr. 1, 2009.
U.S. Appl. No. 11/155,299 Final Office Action mailed Dec. 7, 2009.
U.S. Appl. No. 11/155,299 Office Action mailed Mar. 25, 2008.
U.S. Appl. No. 11/156,994 Final Office Action mailed Jan. 21, 2010.
U.S. Appl. No. 11/156,994 Office Action mailed Apr. 2, 2009.
U.S. Appl. No. 11/155,301 Office Action mailed May 11, 2009.
U.S. Appl. No. 12/841,045 Office Action mailed Mar. 16, 2011.
U.S. Appl. No. 13/341,594 Office Action mailed Apr. 3, 2012.
U.S. Appl. No. 13/341,626 Office Action mailed Mar. 29, 2012.
U.S. Appl. No. 13/341,660 Office Action mailed Apr. 3, 2012.
U.S. Appl. No. 13/341,696 Office Action mailed Mar. 29, 2012.
U.S. Appl. No. 13/341,716 Office Action mailed Mar. 26, 2012.
U.S. Appl. No. 13/341,743 Office Action mailed Apr. 3, 2012.
U.S. Appl. No. 09/189,697 Office Action mailed Jan. 29, 2003.
U.S. Appl. No. 09/189,697 Office Action mailed Nov. 20, 2001.
U.S. Appl. No. 09/189,697 Office Action mailed May 23, 2001.
U.S. Appl. No. 09/189,697 Final Office Action mailed Sep. 13, 2000.
U.S. Appl. No. 09/189,697 Office Action mailed Mar. 3, 2000.
Divisions (1)
Number Date Country
Parent 08607068 Feb 1996 US
Child 09189697 US
Continuations (4)
Number Date Country
Parent 12841045 Jul 2010 US
Child 13341674 US
Parent 11156994 Jun 2005 US
Child 12841045 US
Parent 10700407 Nov 2003 US
Child 11156994 US
Parent 09189697 Nov 1998 US
Child 10700407 US