Computer networking system and method with javascript execution for pre-fetching content from dynamically-generated URL and javascript injection to modify date or random number calculation
Summary by NHIP
Proxy Server with JavaScript Modification
The proxy server receives HTTP responses and obtains modified JavaScript when the original code uses specific random number, chronological, or URL generation algorithms. The apparatus sends data via a network connection using this altered JavaScript instead of the original version found in the response.
Claim Score by NHIP
Abstract
An apparatus, method, and non-transitory computer-readable medium comprising program code which when executed by an apparatus causes the apparatus to effect the method, for pre-fetching web content. Preferably, a proxy server performs the pre-fetching. Techniques such, for example, as executing Javascript in pre-fetched pages, modifying pre-fetched pages to address URL generation involving random numbers or dates, using cookie information or browser specifics when performing pre-fetching of pages, and injecting Javascript to measure response time may be performed, by way of example.

Term
5.6 yearsleft in the term
Expires 8 May 2032, including 161 days of term adjustment.
- Priority and filed
- Granted
- Today
- Expires
32 claims: 3 independent, 29 dependent
- 1A proxy server apparatus comprising:a proxy server module adapted to, in a case where a client device has generated a first HTTP GET request for a first URL, receive, from a web server associated with the first URL, a HTTP response corresponding to the first URL;and a Javascript obtaining module adapted to obtain, from Javascript in the HTTP response, modified Javascript, wherein at least one of the following conditions is satisfied: (a) said Javascript obtaining module is adapted to obtain as the modified Javascript, when the Javascript in the HTTP response, upon execution, uses a first random number algorithm in an instance, Javascript that when executed instead uses in that instance an algorithm different from the first random number algorithm;(b) said Javascript obtaining module is adapted to obtain as the modified Javascript, when the Javascript in the HTTP response, upon execution, uses a first chronological algorithm in an instance, Javascript that when executed instead uses in that instance an algorithm different from the first chronological algorithm;or (c) said Javascript obtaining module is adapted to obtain as the modified Javascript, when the Javascript in the HTTP response, upon execution, uses an algorithm to generate a URL in an instance, Javascript that when executed instead uses in that instance a different algorithm to generate a URL, wherein a memory and a processor are included in the proxy server apparatus.
- 31A method comprising:at least one of (a) modifying, by a first apparatus comprising a memory and a processor, of Javascript included in HTML web page data received via a network connection from a web server, such that in a case that the Javascript uses a random number function to generate a URL, the modified Javascript uses different programming instead of the random number function to generate a URL, or (b) modifying, by a first apparatus comprising a memory and a processor, of Javascript included in HTML web page data received via a network connection from a web server, such that in a case that the Javascript uses a date object to generate a URL, the modified Javascript generates a URL by using programming different from and in place of that used by the date object;sending the modified Javascript from the first apparatus for receipt by a second apparatus via a network connection;and executing by both the first apparatus and the second apparatus of the modified Javascript so that when the first apparatus executes the modified Javascript to request a URL generated using the different programming and receives a first image in response to the request, and the second apparatus executes the modified Javascript to request a URL generated using the different programming and receives a second image in response to the request, the first image and the second image are the same.
- 32Broadest claimClaim Score 69, broad(NHIP)A method comprising:receiving an HTTP response from a first apparatus;at least one of (a) editing, by a second apparatus comprising a memory, of Javascript in the HTTP response to change an algorithm used for random number-based URL generation, or (b) editing, by a second apparatus comprising a memory, of Javascript in the HTTP response that performs chronologically-based URL generation to change an algorithm used for the chronologically-based URL generation;and sending, by the second apparatus, of the edited Javascript to a third apparatus.
Independent claims3
355 paragraphs in 8 sections, as filed
CROSS-REFERENCE TO RELATED APPLICATION
p-0002This application claims the benefit of U.S. Provisional Application No. 61/417,626 filed Nov. 29, 2010.
FIELD OF THE INVENTION
p-0003The present invention relates to a computer networking system and method, and particularly to a computer networking system and method that can preferably be used with a network having a satellite link.
BACKGROUND OF THE INVENTION
p-0004Satellite communication systems have been used to provide network or Internet access, but satellite links can suffer from latency, and loading web pages that require multiple round trips can therefore be slow.
SUMMARY OF THE INVENTION
p-0005In one aspect, the present invention relates to a first apparatus comprising: (a) means for receiving via a network connection, in a case where a first HTTP GET request for a first URL has been generated by a second apparatus, first data from which the first URL can be obtained; (b) means for receiving, from a web server associated with the first URL, second data from a HTTP response to a HTTP GET request for the first URL; (c) means for obtaining Javascript in accordance with Javascript in the second data; and (d) means for executing the obtained Javascript, wherein a memory and processor are included in the first apparatus. Optionally, one or more of the following may be satisfied: (1) the first apparatus may further comprise means for sending to another apparatus, via a network connection, the obtained Javascript; (2) the another apparatus may be a third apparatus comprising means for receiving the obtained Javascript and means for sending the obtained Javascript to the second apparatus, and the second apparatus may comprises means for receiving the obtained Javascript from the third apparatus and means for executing the obtained Javascript; (3) the another apparatus may be a third apparatus comprising (a) means for generating a HTTP response to the first HTTP GET request in accordance with the obtained Javascript, and (b) means for sending the HTTP response to the second apparatus, and the second apparatus may comprise means for receiving the HTTP response, means for obtaining the obtained Javascript from the HTTP response, and means for executing the obtained Javascript; (4) the another apparatus may be the second apparatus and comprise means for receiving the obtained Javascript from the first apparatus and means for executing the obtained Javascript; (5) the another apparatus may be is the second apparatus and comprise (a) a HTTP web browser that generated the first HTTP GET request and (b) a proxy software program that receives the obtained Javascript from the first apparatus, generates a HTTP response to the first HTTP GET request in accordance with the obtained Javascript, and sends the HTTP response to the web browser, which executes the obtained Javascript; (6) the executing means may comprise a web browser that executes the obtained Javascript; (7) the second data may be the HTTP response. The first apparatus may further comprise means for generating, in accordance with the first data, a HTTP GET request for the first URL, wherein the second data is data from a HTTP response to that HTTP GET request; (8) the second data may be data from a HTTP response to the first HTTP GET request; (9) the first apparatus may further comprise means for, in response to execution by the executing means of the obtained Javascript producing a request for a second URL, generating a second HTTP GET request for the second URL; means for receiving third data from a HTTP response to the second HTTP GET request; (10) the first apparatus may further comprise means for sending the third data to another apparatus; (11) the another apparatus is a third apparatus, which comprises means for receiving the third data, means for generating a HTTP response in accordance with the third data, and means for sending the HTTP response to the second apparatus; (12) the another apparatus may be the second apparatus, which comprises (a) a HTTP web browser and (b) means for receiving the third data, for generating a HTTP response in accordance with the third data, and for sending the HTTP response to the web browser; (13) the first apparatus may further comprise means for sending a notification to the another apparatus that the first apparatus is generating the second HTTP get request, wherein the notification is sent prior to sending the third data to the another apparatus; (14) the first apparatus may further comprise means for sending to the another apparatus, via a network connection, the obtained Javascript, wherein the another apparatus comprises (a) means for receiving the notification from the first apparatus and (b) means for awaiting receipt from the first apparatus of the third data without the another apparatus generating a request for the second URL; (15) the obtaining means may comprise means for modifying Javascript in the second data to obtain Javascript which is different from Javascript in the second data; (16) the first apparatus may further comprise means for sending to another apparatus, via a network connection, the obtained Javascript, wherein the another apparatus comprises means for executing the obtained Javascript using a HTTP web browser; (17) the another apparatus is the second apparatus; (18) the obtaining means comprises: means for determining whether or not Javascript in the second data should be modified; means for, when the determining means determines that Javascript in the second data should not be modified, obtaining Javascript identical to Javascript in the second data; and means for, when the determining means determines that Javascript in the second data should be modified, modifying Javascript in the second data to obtain Javascript which is different from the Javascript in the second data; (19) the first apparatus may further comprise means for sending via a network connection the obtained Javascript so that the second apparatus receives the obtained Javascript, wherein the second apparatus comprises means for executing the obtained Javascript so that both the first apparatus and the second apparatus execute the obtained Javascript; (20) the first apparatus may further comprise means for, in response to HTML in the second data including a reference to a URL, generating a second HTTP GET request for that URL; and means for, in response to Javascript in the second data that when executed produces a request for a URL, generating a third HTTP GET request for that URL; (21) the first apparatus may further comprise means for receiving a response to the second HTTP GET request and for sending to another apparatus third data in accordance with the response; and means for receiving a response to the third HTTP GET request and for sending to the another apparatus fourth data in accordance with the response; (22) the another apparatus may be the second apparatus; (23) the another apparatus may be a third apparatus comprising (a) means for generating a HTTP response in accordance with the third data and for sending the HTTP response to the second apparatus, and (b) means for generating a HTTP response in accordance with the fourth data and for sending that HTTP response to the second apparatus; (24) the first apparatus may further comprise means for sending the obtained Javascript via a network connection so that the obtained Javascript is received by the second apparatus, wherein the second apparatus comprises means for executing the obtained Javascript, and wherein, in the event that execution of the obtained Javascript produces a request for a second URL, the first apparatus generates a HTTP GET request for the second URL and the second apparatus also generates a HTTP GET request for the second URL, and the first apparatus sends third data via a network connection to cause the second apparatus to receive a HTTP response to the second apparatus's HTTP GET request for the second URL; (25) the first apparatus may send the third data to a third apparatus, which comprises (a) means for generating a HTTP response in accordance with the third data and (b) means for sending the HTTP response to the second apparatus, the HTTP response being the HTTP response to the second apparatus's HTTP GET request for the second URL; (26) the first apparatus may send the third data to the second apparatus, which comprises a web browser and a proxy program that the web browser is configured to use in the web browser's proxy settings, wherein the proxy program receives the third data and generates in accordance with the third data the HTTP response to the second apparatus's HTTP GET request for the second URL; (27) the second apparatus comprises (a) a web browser, which generates the first HTTP GET request and which has proxy settings, and (b) a program selected by the web browser's proxy settings, wherein the program receives the first HTTP GET request, obtains the first URL from the first HTTP GET request, and in accordance with the first URL sends to the first apparatus the first data, wherein the first apparatus further comprises means for sending, to the second apparatus's program, data comprising the obtained Javascript, wherein the program receives the data comprising the obtained Javascript and, in accordance with the data comprising the obtained Javascript, provides to the web browser a HTTP response to the first HTTP GET request, the HTTP response including the obtained Javascript, wherein the web browser executes the obtained Javascript, wherein the first apparatus further comprises (a) means for, in the event that the execution by the executing means of the obtained Javascript produces a request for a second URL, generating a second HTTP GET request for the second URL, (b) means for receiving a HTTP response to the second HTTP GET request, and (c) means for sending, to the first apparatus's program, third data obtained in accordance with the HTTP response, and wherein when execution by the web browser of the obtained Javascript results in generation of a HTTP GET request for the second URL, the program generates in accordance with the third data and provides to the web browser a HTTP response to the HTTP GET request for the second URL, so that it is unnecessary for the program to send the HTTP GET request for the second URL to a web server corresponding to the second URL; (28) the second apparatus and a proxy apparatus are connected via a network, and the proxy is connected to the first apparatus via a high-latency network, wherein the second apparatus comprises a web browser, which generates the first HTTP GET request, wherein the proxy apparatus receives the first HTTP GET request from the second apparatus, obtains the first URL from the first HTTP GET request, and in accordance with the first URL sends to the first apparatus the first data from which the first URL can be obtained, wherein the first apparatus further comprises means for sending, to the proxy apparatus, data comprising the obtained Javascript, wherein the proxy apparatus receives the data comprising the obtained Javascript and in accordance with the data, generates and sends to the web browser of the second apparatus a HTTP response to the first HTTP GET request, the HTTP response including the obtained Javascript, wherein the web browser executes the obtained Javascript, wherein the first apparatus further comprises (a) means for, in the event that the execution by the executing means produces a request for a second URL, generating a second HTTP GET request for the second URL, (b) means for receiving a HTTP response to the second HTTP GET request, and (c) means for sending, to the proxy apparatus, third data obtained in accordance with the HTTP response to the second HTTP GET request, and wherein when execution by the web browser of the obtained Javascript results in generation of a HTTP GET request for the second URL, the proxy apparatus generates a HTTP response thereto in accordance with the third data, so that it is unnecessary for the proxy apparatus to send the HTTP GET request for the second URL to a web server corresponding to the second URL; (29) the proxy apparatus may be a non-transparent proxy such that the web browser has proxy settings selecting the proxy apparatus; (30) the proxy apparatus is a transparent proxy such that the web browser does not have proxy settings selecting the proxy apparatus; (31) the executing means comprises a HTTP web browser program; (32) the network connecting the second apparatus and the proxy apparatus is a low-latency network; (33) the high-latency network comprises a satellite connection.
p-0006In another aspect, the present invention relates to a device comprising: a processor; a memory storing a control program to be executed by the processor; and a hardware network interface, wherein the control program comprises: (a) code for receiving, via the hardware network interface, first data relating to a first URL of a first HTTP GET request, the first HTTP GET request having been generated by a web browser of a client apparatus; (b) code for receiving second data from a first HTTP response, the first HTTP response having been generated by an apparatus corresponding to the first URL in response to a HTTP GET request for the first URL; (c) code for, if the second data includes Javascript, obtaining Javascript for execution by the control program, based on Javascript included in the second data; and (d) code for executing the obtained Javascript, wherein in response to the obtained Javascript dynamically generating a URL when executed, the control program generates a second HTTP GET request for the dynamically-generated URL. Optionally, one or more of the following may be satisfied: (1) the control program further comprises code for generating a HTTP GET request for the first URL; (2) the second data is the first HTTP response; (3) the control program further comprises code for, in response to receipt of the second data, sending third data in accordance with the second data for receipt by the client apparatus; (4) the control program is further configured to send the obtained Javascript for receipt by the client apparatus so that both the client apparatus's web browser and the control program execute the obtained Javascript; (5) the client apparatus further comprises a proxy program selected by proxy settings in the client apparatus's web browser, wherein the proxy program sends to the control program the first data relating to the first URL of the first HTTP GET request, wherein the control program is further configured to send third data to the proxy program in accordance with the second data, wherein in accordance with the third data, the proxy program generates and provides to the client apparatus's web browser a HTTP response to the first HTTP GET request; (6) the control program is further configured so that in response to receiving a HTTP response to the second HTTP GET request, the control program sends to the proxy program fourth data in accordance with that HTTP response, and wherein the proxy program, in response to the client apparatus's web browser generating a HTTP GET request for the dynamically-generated URL, generates a HTTP response in accordance with the fourth data and provides the HTTP response to the client apparatus's web browser, as a HTTP response to that HTTP GET request; (7) the proxy settings include a host setting, which is set to localhost; (8) a proxy apparatus on a same local area network as the client apparatus receives data from the first HTTP GET request, obtains the first URL of the first HTTP GET request based on the received data, and sends to the control program the first data relating to the first URL of the first HTTP GET request, wherein the control program is further configured to send third data to the proxy apparatus in accordance with the second data, in accordance with which third data the proxy apparatus generates and provides to the client apparatus's web browser a HTTP response to the first HTTP GET request, wherein the control program is further configured so that in response to receiving a HTTP response to the second HTTP GET request, the control program sends to the proxy apparatus fourth data in accordance with that HTTP response, and wherein the proxy apparatus, in response to the client apparatus's web browser generating a HTTP GET request for the dynamically-generated URL, generates a HTTP response in accordance with the fourth data and provides the HTTP response to the client apparatus's web browser, as a HTTP response to that HTTP GET request; (9) the proxy apparatus is selected by proxy settings in the client apparatus's web browser; (10) the proxy apparatus is a transparent proxy apparatus not selected by proxy settings in the client apparatus's web browser; (11) the client apparatus sends the first HTTP GET request using a source IP address corresponding to the client apparatus and a destination IP address corresponding to the URL, the source and destination IP addresses not being an IP address of the device; (12) the device has an IP address, corresponding to its hardware network interface, which is different from the source and destination IP addresses; (13) the control program comprises a web browser and another program, and the another program controls the web browser to cause the web browser to execute the obtained Javascript.
p-0007In yet another aspect, the present invention relates to an apparatus-implemented method comprising: receiving from a network, by a first apparatus including a memory, a processor, and a hardware network interface, in a case where a first HTTP GET request for a first URL has been generated by a second apparatus, first data from which the first URL can be obtained; receiving by the first apparatus, from a third apparatus which is associated with the URL, second data from a HTTP response to a HTTP GET request for the first URL; obtaining Javascript in accordance with Javascript in the second data; and executing, by the first apparatus, of the obtained Javascript. Optionally, one or more of the following may be satisfied: (1) the second data is the HTTP response; (2) the method further comprises generating, by the first apparatus, of a second HTTP GET request for the first URL, wherein the HTTP response is a HTTP response to the second HTTP GET request.
p-0008In still a further aspect, the present invention relates to a non-transitory, tangible computer-readable storage medium in which is stored a computer program which when executed effects the foregoing method.
p-0009In yet another aspect, the present invention relates to a method comprising: determining, by a first apparatus including a memory, that a second apparatus has made a request for a first URL, wherein the first URL corresponds to a third apparatus; and when a web page corresponding to the first URL comprises code that when executed generates a dynamic, non-static second URL, prefetching, by the first apparatus, of content in accordance with the second URL. Optionally, one or more of the following may be satisfied: (1) the code comprises Javascript; (2) the method further comprises a step of, when the web page comprises a static URL, prefetching, by the first apparatus, of content in accordance with the static URL; (3) the method further comprises generating, by the first apparatus, of a pre-fetch notification that is sent to a proxy for the second apparatus, the pre-fetch notification informing the proxy that content for the second URL is to be prefetched by the first apparatus; and (4) the proxy is selected from the group consisting of a proxy program executed by the second apparatus and a proxy apparatus separate from the second apparatus, and wherein in response to the proxy having received the pre-fetch notification, the proxy prevents a HTTP request for the second URL generated by a web browser of the second apparatus from being sent to a web server corresponding to the second URL.
p-0010In a still further aspect, the present invention relates to a non-transitory, tangible computer-readable storage medium in which is stored a computer program which when executed effects the foregoing method.
p-0011In still another aspect, the present invention relates to a first apparatus comprising: means for, in a case where a second apparatus has generated a first HTTP GET request for a first URL, receiving, via a network connection, data from a HTTP response, the HTTP response having been generated by a web server in response to a HTTP request for the first URL; and modifying means for obtaining, from Javascript in the data, modified Javascript, wherein at least one of the following conditions is satisfied: (a) said modifying means comprises means for, when the Javascript in the data, upon execution, uses a first random number algorithm in an instance, obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a second algorithm different from the first random number algorithm; (b) said modifying means comprises means for, when the Javascript in the data uses a first chronological algorithm in an instance, obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a third algorithm different from the first chronological algorithm; and (c) said modifying means comprises means for, when the Javascript in the data, upon execution, uses an algorithm to generate a URL in an instance, obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a different algorithm to generate a URL, wherein a memory and a processor are included in the first apparatus. Optionally, one or more of the following are satisfied: (1) the first apparatus further comprises means for sending from the first apparatus, via a network connection, data in accordance with the modified Javascript; (2) the sending means sends the data in accordance with the modified Javascript via a network connection for receipt by the second apparatus; (3) the data in accordance with the modified Javascript comprises the modified Javascript; (4) the data from the HTTP response is the HTTP response; (5) the first apparatus further comprises means for, in response to the generation by the second apparatus of the first HTTP GET request, generating a second HTTP GET request for the first URL; (6) the first apparatus further comprises means for executing the modified Javascript; (7) condition (a) is satisfied; (8) the Javascript in the data includes a function call to a first random number function that uses the first random number algorithm; (9) the second algorithm is selected such that a sequence of values output by the second algorithm when executed by a first one of two different apparatuses matches in whole or in part with a sequence of values output by the second algorithm when executed by a second one of the two different apparatuses; (10) the second algorithm is selected such that a sequence of values output by the second algorithm when executed by one apparatus and a sequence of values output by the second algorithm when executed by another apparatus are the same; (11) the first random number function is the Javascript function Math.random; (12) the second algorithm is executed by invocation in the modified Javascript of an object; (13) the second algorithm is executed by a function call in the modified Javascript to a function; (14) the first apparatus further comprises means for executing the modified Javascript; (15) the second algorithm is selected such that in a case where execution of the modified Javascript by the executing means uses the second algorithm to produce a request for a second URL and execution of the modified Javascript by the second apparatus uses the second algorithm to produce a request for a third URL, the same web page content is obtained in response to the second and third URL requests; (16) the second algorithm is selected so that the second URL and the third URL are the same; (17) the first apparatus further comprises means for sending from the first apparatus, via a network connection, data in accordance with the modified Javascript, for receipt by the second apparatus; (18) the data in accordance with the modified Javascript comprises the modified Javascript; (19) the first apparatus further comprises means for executing the modified Javascript; (20) the first apparatus further comprises means for, in response to the generation by the second apparatus of the first HTTP GET request, generating a second HTTP GET request for the first URL; (21) the second algorithm is selected such that if two different apparatuses repeatedly execute the second algorithm, each apparatus obtains a set of numerical values from the second algorithm that matches in whole or in part a set of numerical values from the second algorithm obtained by the other of the two different apparatuses; (22) the sets are identical; (23) in the case that the Javascript in the HTTP response uses the first random number function to generate a URL, then the modified Javascript uses the second algorithm instead of the first random number function to generate a URL, and execution of the modified Javascript by two apparatuses including the second apparatus results in generation of the same URL by each of the two apparatuses; (24) the means for obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a second algorithm different from the first random number algorithm comprises: (a) means for leaving unchanged in the Javascript in the data a function call to a random number function; and (b) generating Javascript not originally present in the HTTP response that redefines the random number function so that the unchanged function call executes the generated Javascript, wherein the generated Javascript, when executed, uses the second algorithm; (25) the random number function is the Javascript Math.random function, and wherein the generated Javascript assigns a new function to the Math.random variable so as to redefine the Math.random function; (26) the means for obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a second algorithm different from the first random number algorithm comprises: means for performing a search and replace function that replaces a reference in the Javascript in the data to the random number function with a reference to a different function that when executed uses the second algorithm; (27) the second algorithm is such that successive executions by a first apparatus results in a first sequence of values and successive executions by a second apparatus results in a second sequence of values, and at least the beginning value of the first sequence is the same as the beginning value of the second sequence; (28) at least the beginning values of the first sequence are the same as the beginning values of the second sequence; (29) the second algorithm is configured to return an identical value for at least a plurality of executions of the second algorithm; (30) the second algorithm is configured to return an identical value for at least a plurality of executions of the second algorithm, and then to return a different value for an execution after the plurality of executions; (31) the means for obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a second algorithm different from the first random number algorithm comprises: means for finding in the Javascript in the data a function call to a random number function; means for editing the Javascript in the data to add code which defines a different function at a position in the Javascript in the data so that the different function will already be defined at a position in the Javascript where the function call to the random number function is found; and means for replacing the found random number function call in the Javascript in the data with a call to the different function, wherein the different function uses the second algorithm; (32) condition (b) is satisfied; (33) the Javascript in the data uses the first chronological algorithm in an instance by invoking a date object that uses the first chronological algorithm, the date object returning a date and a time, and wherein the modified Javascript uses a different programming construct in place of the date object; (34) the different programming construct is an object different from the date object; (35) the different programming construct is a function call to a function; (36) the third algorithm is such that when executed by the first apparatus and when executed by the second apparatus, the third algorithm returns a same chronological result in both cases irrespective of clocks in the first and second apparatuses being imperfectly synchronized; (37) the chronological result comprises date and time; (38) the modified Javascript uses the third algorithm to generate a URL such that when the first apparatus executes the modified Javascript to generate a second URL and the second apparatus executes the modified Javascript to generate a third URL, the same web page content is obtained in response to requests for the second and third URLs; (39) the third algorithm is selected such that the second URL and the third URL are the same; (40) the third algorithm is such that when the first apparatus executes the modified Javascript that uses the third algorithm, and when another apparatus executes the modified Javascript that uses the third algorithm, the third algorithm returns the same result in both cases even when the first apparatus and the another apparatus are configured for different time zones; (41) the first apparatus further comprises (a) means for obtaining the second apparatus's timezone, (b) means for determining from the timezone a number of hours offset from the first apparatus's time, and (c) means for determining a time value in accordance with the offset; (42) the Javascript in the data includes an invocation of the date object default constructor that uses the first chronological algorithm, and wherein the means for, when the Javascript in the data uses a first chronological algorithm in an instance, obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a third algorithm different from the first chronological algorithm comprises: means for replacing the invocation in the Javascript of the date object's default constructor with a reference to a programming construct that uses the third algorithm, wherein the modified Javascript, as compared to the original Javascript, additionally includes code which defines the programming construct that uses the third algorithm; (43) the programming construct is an object different from the date object; (44) the programming construct is a function call to a function; (45) the means for, when the Javascript in the data uses the first chronological algorithm in an instance, obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a third algorithm different from the first chronological algorithm comprises: means for leaving unchanged an invocation in the Javascript of the date object's default constructor that uses the first chronological algorithm and for modifying the Javascript so as to redefine the date object so that references to the date object default constructor when invoked cause execution of the third algorithm instead of the first chronological algorithm; (46) the third algorithm returns a result comprising a rounded date field; (47) the third algorithm returns a result comprising a rounded time field; (48) the third algorithm returns a result comprising, having been rounded by using a predetermined interval, the minutes time field and all less precise fields; (49) the third algorithm returns a result comprising the minutes time field of the current time of day having been rounded to an interval evenly divisible by a integer greater than one; (50) the integer is three, so that the minutes time field is always even divisible by three; (51) the third algorithm returns a result comprising at least one date or time field having been set to a predetermined value; (52) the third algorithm sets a seconds time field to a predetermined value; (53) the third algorithm is such that even if the first apparatus and the second apparatus were to execute the different object at times that would result in a different seconds time field value if the first chronological algorithm were used, the third algorithm returns the same seconds time field value to each of the first apparatus and the second apparatus; (54) the third algorithm is used by the modified Javascript to generate a URL in accordance with a chronological measurement, and wherein the third algorithm is such that the same URL is generated by the first apparatus and the second apparatus when executing the modified Javascript even when a clock of the first apparatus is not synchronized with a clock of the second apparatus; (55) the third algorithm effects a setting procedure that sets at least one of the seconds and/or milliseconds field of the date/time value to a predetermined value; (56) the setting procedure sets both the seconds and milliseconds fields of the current time of day to respective predetermined values; (57) in the case that the Javascript in the data uses a date object to generate a URL, the date object using the first chronological algorithm, then the modified Javascript uses the third algorithm to generate a URL and execution of the modified Javascript by two apparatuses including the second apparatus results in generation of the same URL by each apparatus; (58) wherein differences between the Javascript in the data and the modified Javascript include (a) a reference in the Javascript in the data to a date object has been replaced, in the modified Javascript, by a reference to a function call to a date function, and (b) the modified Javascript, as compared to the original Javascript, additionally includes code that defines the date function; (59) condition (c) is satisfied; (60) wherein the means for, when the Javascript in the data, upon execution, uses an algorithm to generate a URL in an instance, obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a different algorithm to generate a URL comprises: one of (a) means for replacing a reference in the Javascript to a date object used to generate a URL with a reference to a different date object used to generate a URL and (b) means for replacing a reference in the Javascript to a date object used to generate a URL with a reference to a date function used to generate a URL; (61) wherein the means for, when the Javascript in the data, upon execution, uses an algorithm to generate a URL in an instance, obtaining, as the modified Javascript, Javascript that when executed instead uses in that instance a different algorithm to generate a URL comprises: means for replacing a reference in the Javascript to a random number function used to generate a URL with a reference to a different random number function used to generate a URL; (62) the first apparatus further comprises means for executing the modified Javascript, wherein execution of the modified Javascript by the executing means and execution of the modified Javascript by the second apparatus results in generation of the same URL even in the case where execution of the original Javascript by the executing means and execution of the original Javascript by the second apparatus would not result in generation of the same URL.
p-0012In a still further aspect, the present invention relates to a device comprising: a processor; a memory storing a control program to be executed by the processor; and a hardware network interface, wherein the control program comprises: (a) code for receiving via a network connection a HTTP response to a first HTTP GET request for a first URL; at least one of (b1) code for, in the event that the HTTP response includes Javascript and the Javascript includes a call to a random number function, obtaining, from the Javascript, modified Javascript that when executed causes a different function to be executed instead of the random number function, and (b2) at least one of (1) code for, in the event that the HTTP response includes Javascript and the Javascript includes a reference to a date object, obtaining, from the Javascript, modified Javascript that when executed causes a different object to be executed instead of the date object and (2) code for, in the event that the HTTP response includes Javascript and the Javascript includes a reference to a date object, obtaining, from the Javascript, modified Javascript that when executed causes a function different from the date object to be executed instead of the date object; (c) code for executing the modified Javascript; (d) code for sending the modified Javascript via a network connection for receipt by an apparatus that issued a HTTP GET request for the URL, which apparatus receives the modified Javascript and executes the modified Javascript.
p-0013In a still further aspect, the present invention relates to an apparatus-implemented method comprising: receiving from a web server, by a first apparatus comprising a memory, data from a HTTP response to a HTTP GET request for a URL; at least one of (a) in the event that the data includes Javascript and the Javascript includes a call to a random number function, obtaining by the first apparatus, based on the Javascript, modified Javascript that when executed causes a different function to be executed instead of the random number function, and (b) in the event that the data includes Javascript and the Javascript includes an invocation of the date object default constructor, obtaining by the first apparatus, based on the Javascript, modified Javascript that when executed causes execution of code other than the invocation of the date object default constructor. Optionally, one or more of the following is satisfied: (1) the method comprises (a); (2) the method further comprises generating, by the first apparatus in response to a second apparatus generating a HTTP GET request for the URL, of a HTTP GET request for the URL; (3) the method further comprises executing, by a second apparatus which had generated a HTTP GET request for the URL, of the modified Javascript.
p-0014In yet another aspect, the present invention relates to a non-transitory, tangible computer-readable memory medium in which is stored instructions that when executed by a processor effect the foregoing method.
p-0015Optionally, one or more of the following is satisfied: (1) the method comprises (b); (2) the method further comprises generating, by the first apparatus in response to a second apparatus generating a HTTP GET request for the URL, of a HTTP GET request for the URL; (3) the method further comprises executing, by a second apparatus which had generated a HTTP GET request for the URL, of the modified Javascript. In another aspect, the present invention relates to a non-transitory, tangible computer-readable memory medium in which is stored instructions that when executed by a processor effect the foregoing method.
p-0016In a still further aspect, the present invention relates to a method comprising: at least one of (a) modifying, by a first apparatus comprising a memory and a processor, of Javascript included in HTML web page data received via a network connection from a web server, such that in a case that the Javascript uses a random number function to generate a URL, the modified Javascript uses different programming instead of the random number function to generate a URL, and (b) modifying, by a first apparatus comprising a memory and a processor, of Javascript included in HTML web page data received via a network connection from a web server, such that in a case that the Javascript uses a date object to generate a URL, the modified Javascript uses programming different from the date object to generate a URL (or the modified Javascript generates a URL by using programming different from and in place of that used by the date object); sending the modified Javascript from the first apparatus for receipt by a second apparatus via a network connection; and executing by both the first apparatus and the second apparatus of the modified Javascript so that when the first apparatus executes the modified Javascript to request a URL generated using the different programming and receives a first image in response to the request, and the second apparatus executes the modified Javascript to request a URL generated using the different programming and receives a second image in response to the request, the first image and the second image are the same. Optionally, one or more of the following is satisfied: (1) wherein the method comprises (a); (2) wherein the first image and the second image are advertisements; (3) wherein the URL generated by the first apparatus using the different programming and the URL generated by the second apparatus using the different programming are the same, even in a case where URL generation by the first apparatus using the unmodified Javascript and URL generation by the second apparatus using the unmodified Javascript would have resulted in different URLs; (4) the method comprises (b); (5) the first image and the second image are advertisements; (6) the URL generated by the first apparatus using the different programming and the URL generated by the second apparatus using the different programming are the same, even in a case where URL generation by the first apparatus using the unmodified Javascript and URL generation by the second apparatus using the unmodified Javascript would have resulted in different URLs.
p-0017In yet another, additional aspect, the present invention relates to a method comprising: receiving an HTTP response from a first apparatus; at least one of (a) editing, by a second apparatus comprising a memory, of Javascript in the HTTP response to change an algorithm used for random number-based URL generation, and (b) editing, by a second apparatus comprising a memory, of Javascript in the HTTP response that performs chronologically-based URL generation to change an algorithm used for the chronologically-based URL generation; and sending, by the second apparatus, of the edited Javascript to a third apparatus. Optionally, one or more of the following is satisfied: (1) wherein the method comprises (b); (2) wherein the chronologically-based URL generation uses a date when generating a URL; (3) the chronologically-based URL generation uses a time when generating a URL; (4) the chronologically-based URL generation generates a URL using at least a date and a time; (5) the method further comprises executing by the second apparatus and by the third apparatus of the edited Javascript; (6) a tangible memory medium stores program instructions that when executed cause a computer to effect the method.
p-0018In yet a still further aspect, the present invention relates to a first apparatus comprising: means for, in a case where a second apparatus has generated a first HTTP GET request for a first URL, receiving from a web server data from a HTTP response to a HTTP request for the first URL; means for, in the event that the data from the HTTP response includes Javascript and the Javascript includes a reference to a date object, obtaining, based on the Javascript, modified Javascript that when executed causes a different construct to be executed instead of the date object, wherein a memory and a processor are included in the first apparatus. Optionally, one or more of the following conditions is satisfied: (1) the first apparatus further comprises means for sending the modified Javascript for receipt by the second apparatus; (2) the first apparatus further comprises means for sending data in accordance with the modified Javascript for receipt by the second apparatus; (3) wherein the data from the HTTP response is the HTTP response; (4) the first apparatus further comprises means for, in response to the generation by the second apparatus of the first HTTP GET request, generating a second HTTP GET request for the first URL; (5) the first apparatus further comprises means for executing the modified Javascript, wherein the different construct is a construct that returns a different date/time combination from the date object.
p-0019In an additional aspect, the present invention relates to a first apparatus comprising: means for receiving via a network connection, in a case where a first HTTP GET request for a first URL has been generated by a web browser of a second apparatus, first data from which the first URL can be obtained; means for receiving, from a web server associated with the first URL, a HTTP response to a HTTP GET request for the first URL; means for obtaining Javascript in accordance with Javascript in the HTTP response such that in the event that Javascript in the HTTP response makes use of web browser-specific information to generate a URL, the execution of the obtained Javascript uses web browser-specific information relating to the web browser of the second apparatus when generating the URL, and means for executing the obtained Javascript, wherein a memory and processor are included in the first apparatus. Optionally, one or more of the following conditions may be satisfied: (1) the first apparatus further comprises means for receiving via a network connection the web browser-specific information relating to the web browser of the second apparatus, wherein the web browser-specific information relates to a characteristic of the web browser; (2) wherein the web browser-specific information comprises web browser window geometry; (3) the first apparatus further comprises means for generating, in accordance with the first data, a second HTTP GET request for the first URL; (4) the first apparatus further comprises means for generating Javascript which, when processed by the web browser of the second apparatus, causes the second apparatus to send the web browser-specific information to another apparatus; (5) wherein the Javascript that causes the second apparatus to send the web browser-specific information to another apparatus comprises Javascript that places the web browser-specific information in a URL of a HTTP GET request; (6) wherein the Javascript that causes the second apparatus to send the web browser-specific information to another apparatus comprises Javascript that places the web browser-specific information in data of a PUT request; (7) wherein the Javascript that causes the second apparatus to send the web browser-specific information to another apparatus comprises Javascript that places the web browser-specific information in data of a POST request; (8) wherein the Javascript that causes the second apparatus to send the web browser-specific information to another apparatus comprises Javascript that places the web browser-specific information in a cookie sent via a HTTP transaction; (9) wherein the Javascript that causes the second apparatus to send the web browser-specific information to another apparatus comprises (a) Javascript that causes the web browser of the second apparatus to obtain the web browser-specific information from the web browser's Javascript Document Object Model (DOM) and (b) Javascript that causes the web browser of the second apparatus to send the obtained web browser-specific information for receipt by the first apparatus; (10) wherein the web browser-specific information includes a window width; (11) wherein the web browser-specific information includes a window height; (12) wherein the web browser-specific information includes an available width; (13) wherein the web browser-specific information includes an available height; (14) wherein the web browser-specific information includes a color depth; (15) wherein the web browser-specific information includes a pixel depth; (16) wherein the web browser-specific information includes a timezone; (17) wherein the web browser-specific information includes a Java-enabled query result; (18) wherein the web browser-specific information includes browser history information; (19) wherein the web browser-specific information includes windows geometry information, and wherein the second apparatus executes a HTTP GET request for a URL, which URL depends upon the window geometry information, to send the windows geometry information for receipt by the first apparatus; (20) the web browser-specific information includes a browser identity; (21) wherein the web browser-specific information includes a browser version; (22) wherein the web browser-specific information includes browser compatibility information; (23) wherein the web browser-specific information includes information on installed browser plugins; (24) wherein the information on installed browser plugins includes information on whether Adobe Flash is an installed browser plugin; (25) wherein a client proxy inserts Javascript into a HTTP response such that when the web browser of the second apparatus executes the Javascript, the web browser generates a HTTP request used to send the web browser-specific information to the first apparatus (the client proxy may be part of the second apparatus or in a separate apparatus, for example); (26) wherein a client proxy inserts Javascript into a HTTP response such that when the web browser of the second apparatus executes the Javascript, the Javascript causes the web browser to generates a HTTP request comprising the web browser specific information, and wherein the client proxy receives the HTTP request and sends the web browser specific information to the first apparatus.
p-0020In a still further aspect, the present invention relates to a first apparatus comprising: means for receiving via a network connection web browser-specific information regarding a characteristic of a web browser of a second apparatus; and means for executing Javascript that makes use of web browser-specific information, using the received web browser-specific information relating to the web browser of the second apparatus instead of web browser-specific information relating to a web browser of the first apparatus, wherein a memory is included in the first apparatus. Optionally, one or more of the following may be satisfied: (1) wherein the web browser-specific information includes browser window geometry information, and wherein the second apparatus executes a HTTP GET request for a URL, which URL depends upon the browser window geometry information, to send the browser window geometry information for receipt by the receiving means; (2) wherein the web browser-specific information comprises one or more of window size information, color depth, and timezone information.
p-0021In yet another aspect, the present invention relates to a first apparatus comprising: a processor; a memory storing a control program to be executed by the processor; and a hardware network interface, wherein the control program comprises code by which the control program is configured to: (a) receive, via a network connection, web browser-specific information of a second apparatus; and (b) execute Javascript such that in a case that the Javascript includes Javascript that generates a URL which relies upon web browser-specific information, the received web browser-specific information is selected to be used to generate the URL which relies upon web browser-specific information.
p-0022Still further, in an additional aspect, the present invention relates to an apparatus-implemented method comprising: receiving, by a first apparatus comprising a memory and a processor, via a network connection, in a case where a first HTTP GET request for a URL has been generated by a web browser of a second apparatus, data from which the URL can be obtained; receiving via a network connection web browser-specific information regarding a characteristic of the web browser of the second apparatus; receiving, from a web server associated with the URL, a HTTP response to a HTTP GET request for the URL; obtaining Javascript in accordance with Javascript in the HTTP response to the second HTTP GET request, wherein in the event that the Javascript in the HTTP response includes Javascript that makes use of web browser-specific information, the obtained Javascript when executed uses the received web browser-specific information relating to the web browser of the another apparatus; and executing the obtained Javascript.
p-0023Also, the present invention relates to a tangible memory medium storing a program that when executed by a system including a hardware component effects the foregoing method.
p-0024In yet a further aspect, the present invention relates to a method comprising: receiving, by a first apparatus comprising a processor and a memory, via a network connection, of web browser-specific information relating to a web browser of a second apparatus, the information describing a characteristic of the web browser; and executing Javascript that makes use of web browser-specific information, using the received web browser-specific information relating to the web browser of the second apparatus instead of web browser-specific information relating to a web browser of the first apparatus. Optionally, one or more of the following may be satisfied: (1) wherein the web browser-specific information includes browser geometry information, and wherein said receiving step receives the browser geometry information when the second apparatus executes a HTTP GET request for a URL, the URL including information from which the browser geometry information can be obtained; (2) a non-transitory storage medium comprises a program that effects the foregoing method.
p-0025Still further, the present invention also relates to a method comprising: receiving, by a first apparatus comprising a processor and a memory, of window size information of a web browser of a second apparatus, which window size information the web browser of the second apparatus uses to request an image; and using, by the first apparatus, the received window size information to pre-fetch that same image for the second apparatus.
p-0026And additionally, the present invention relates to an apparatus-implemented method comprising: receiving by a first apparatus comprising a processor, via a network connection, of Javascript from a HTTP response; injecting, by the first apparatus into the Javascript, of code that, when executed by a web browser of a second apparatus, causes window geometry information of the web browser to be sent via a network connection to the first apparatus.
p-0027Still further, the present invention relates to a first apparatus comprising: means for receiving via a network connection, in a case where a first HTTP GET request for a first URL has been generated by a second apparatus, first data from which the first URL can be obtained; means for receiving, from a web server associated with the first URL, second data from a HTTP response to a HTTP GET request for the first URL; cookie information receiving means for receiving via a network connection cookie information corresponding to a cookie of a first web browser of the second apparatus, wherein the cookie information is received separately from cookie fields of an HTTP header; and means for storing the cookie information, wherein a memory and processor are included in the first apparatus. Optionally, one or more of the following may be satisfied: (1) wherein in response to the first web browser of the second apparatus generating a HTTP GET request that uses a cookie, a client proxy obtains cookie information in accordance with the cookie and sends the cookie information to said cookie information receiving means; (2) wherein the client proxy is a program stored in a memory of the second apparatus; (3) wherein the client proxy is a transparent proxy apparatus separate from the first apparatus and the second apparatus; (4) wherein in response to a HTTP response sent to the first web browser of the second apparatus including a set cookie request, a client proxy obtains cookie information in accordance with the set cookie request and sends the cookie information to said cookie information receiving means; (5) wherein the client proxy is a program stored in a memory of the second apparatus; (6) wherein the client proxy is a transparent proxy apparatus separate from the first apparatus and the second apparatus; (7) the first apparatus further comprises: a second web browser configured to generate a second HTTP GET request for a second URL; means for determining, based on the stored cookie information, if the first web browser were to have generated a request for the second URL, whether such request would use a cookie; and means for, if said determining means determines that a request for the second URL would use a cookie if it had been generated by the first web browser, attaching a cookie from the stored cookie information to the second HTTP GET request to form a modified second HTTP GET request; (8) the first apparatus further comprises means for receiving, from a web server associated with the second URL, third data from a HTTP response to the modified second HTTP GET request for the second URL; and means for forming a second HTTP response which includes the third data and the cookie from the stored cookie information, wherein said second web browser receives the second HTTP response as a response to the second HTTP GET request. Optionally, one or more of the following may be satisfied: (1) wherein the first web browser also receives the third data; (2) the first apparatus further comprises means for updating cookie information stored in said second web browser in accordance with the cookie from the stored cookie information; (3) the second HTTP GET request is generated in accordance with the second data; (4) wherein said cookie information receiving means receives the cookie information from a client proxy, the client proxy either being part of or separate from the second apparatus.
p-0028Additionally, the present invention relates to a first apparatus comprising: means for receiving via a network connection, in a case where a first HTTP GET request for a first URL has been generated by a second apparatus, first data from which the first URL can be obtained; means for receiving, from a web server associated with the first URL, second data from a HTTP response to a HTTP GET request for the first URL; cookie information receiving means for receiving via a network connection cookie information corresponding to a cookie of a first web browser of the second apparatus, the cookie information being other than cookie information from a HTTP header; and means for storing the cookie information; a second web browser adapted to generate a second HTTP GET request for a second URL; means for determining, based on the stored cookie information, if the first web browser were to have generated a request for the second URL, whether such request would use a cookie; and means for, if said determining means determines that a request for the second URL would use a cookie if it had been generated by the first web browser, attaching a cookie from the stored cookie information to the second HTTP GET request to form a modified second HTTP GET request; means for receiving, from a web server associated with the second URL, third data from a HTTP response to the modified second HTTP GET request for the second URL; and means for updating cookie information stored in said second web browser in accordance with the cookie from the stored cookie information, wherein a memory and processor are included in the first apparatus, wherein in response to the first web browser of the second apparatus generating a HTTP GET request that uses a cookie, a client proxy obtains cookie information in accordance with the cookie and sends the cookie information to said cookie information receiving means, wherein in response to an HTTP response sent to the first web browser of the second apparatus including a set cookie request, a client proxy obtains cookie information in accordance with the set cookie request and sends the cookie information to said cookie information receiving means, and wherein the first web browser also receives the third data. Optionally, the following may be satisfied: wherein said updating means includes means for attaching the cookie from the stored cookie information to a HTTP response to the second HTTP GET request which is received by said second web browser.
p-0029Still further, the present invention, in another aspect, also relates to a device comprising: a processing unit comprising a processor; and a memory unit storing a control program to be executed by the processing unit, said memory unit comprising a memory, wherein the control program is configured to: (a) receive via a network connection data relating to a URL of a first HTTP GET request, the first HTTP GET request having been generated by a web browser of a client apparatus; (b) generate a second HTTP GET request for the URL; (c) receive, from an apparatus corresponding to the URL, a HTTP response to the second HTTP GET request; (d) receive, via a network connection, cookie information corresponding to a cookie of the web browser of the client apparatus, the cookie information being separate from information in a cookie field of an HTTP header; and (e) store the cookie information.
p-0030Further, in another aspect, the present invention relates to a method comprising: a first receiving step, performed by an apparatus comprising a processor and a memory, of receiving via a network connection data relating to a URL from a first HTTP GET request, the first HTTP GET request having been generated by another apparatus; generating, in accordance with the received data, a second HTTP GET request for a URL; a second receiving step of receiving, from a web server associated with the URL, a HTTP response to the second HTTP GET request, the HTTP response having been generated by the web server; a third receiving step of receiving via a network connection cookie information corresponding to a cookie of a web browser of the another apparatus, the cookie information being apart from an HTTP header's cookie fields; and storing the cookie information. A memory may store a program that when executed by an apparatus effects the foregoing method.
p-0031Still further, in another aspect, the present invention relates to a first apparatus comprising: means for receiving, from a web server, first data from a first HTTP response generated by the web server in response to a first HTTP GET request for a first URL generated by a web browser in a second apparatus; and means for causing the web browser to receive a second HTTP response that differs from the first HTTP response in that the second HTTP response contains data which causes the web browser to generate a second HTTP request in response to a web page received in response to the first HTTP GET request reaching a specified stage of loading in the web browser, wherein a memory and processor are included in the first apparatus. Optionally, one or more of the following may be satisfied: (1) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the end of the web page's HTML response having been parsed; (2) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the web browser generating a page load Javascript event; (3) wherein a timing of the first HTTP GET request is a start time of a time interval for loading of the web page; (4) wherein the timing of the second HTTP request is a finish time of the time interval for loading of the web page; (5) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the web browser generating a page load Javascript event, and wherein the time interval for loading of the web page is measured according to the start time and the finish time; (6) wherein said causing means comprises modifying means for obtaining, from the first data, modified first data which is included in the second HTTP response, wherein said modifying means modifies markup language code in the first data such that the web browser of the second apparatus, by processing the modified markup language code, generates the second HTTP request; (7) wherein the markup language code is HTML code, and wherein said causing means comprises means for sending data relating to the modified markup language code for receipt by the second apparatus so that the web browser processes the modified markup language code; (8) wherein the markup language code comprises HTML code, and wherein said modifying means comprises means for inserting Javascript into the HTML code to produce the modified markup language code; (9) wherein the inserted Javascript comprises a page load event handler; (10) wherein the page load event handler corresponds to an event that the web page has finished loading in the web browser; (11) wherein the page load event handler, when executed by the web browser, generates the second HTTP request; (12) wherein the second HTTP request is a request for a URL that contains text dependent upon a time; (13) wherein the time is a time when the page load event handler is invoked.
p-0032And another aspect of the present invention is a first apparatus comprising: a processor; a memory storing a control program to be executed by the processor; and a hardware network interface, wherein the control program comprises programming code instructions by which the control program is configured to: (a) receive via a network connection first data from a first HTTP response to a first HTTP GET request for a URL generated by a web browser in a second apparatus; and (b) causing the web browser to receive a second HTTP response that differs from the first HTTP response in that the second HTTP response contains data which causes the web browser to generate a second HTTP request in response to a web page received in response to the first HTTP GET request reaching a specified stage of loading in the web browser. Optionally, any one or more of the following may be satisfied: (1) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the end of the web page's HTML response having been parsed; (2) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the web browser generating a page load Javascript event; (3) wherein a timing of the first HTTP GET request is a start time of a time interval for loading of the web page; (4) wherein the timing of the second HTTP request is a finish time of the time interval for loading of the web page; (5) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the web browser generating a page load Javascript event, and wherein the time interval for loading of the web page is measured according to the start time and the finish time.
p-0033Another aspect of the present invention is: an apparatus-implemented method comprising: receiving by a first apparatus comprising a processor, from a web server, first data from a first HTTP response generated by the web server in response to a first HTTP GET request for a first URL generated by a web browser in a second apparatus; and causing the web browser to receive a second HTTP response that differs from the first HTTP response in that the second HTTP response contains data which causes the web browser to generate a second HTTP request in response to a web page received in response to the first HTTP GET request reaching a specified stage of loading in the web browser. Optionally, one or more of the following may be satisfied: (1) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the end of the web page's HTML response having been parsed; (2) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the web browser generating a page load Javascript event; (3) wherein the timing of the first HTTP GET request is a start time of a time interval for loading of the web page; (4) wherein the timing of the second HTTP request is a finish time of the time interval for loading of the web page; (5) wherein the second HTTP response includes data which causes the web browser to generate the second HTTP request in response to the web browser generating a page load Javascript event, and wherein the time interval for loading of the web page is measured according to the start time and the finish time; (6) wherein said causing comprises: modifying the first data to obtain modified first data which is included in the second HTTP response; and sending by the first apparatus of data relating to the modified first data to the second apparatus for execution by the second apparatus's web browser, and wherein the modified first data, upon execution by the web browser, causes the web browser to generate the second HTTP request; (7) wherein said modifying comprises injecting Javascript into the first data to obtain the modified first data, and wherein the Javascript includes Javascript that, upon execution by the web browser, generates the second HTTP request for a second URL; (8) wherein the second URL is a function of time; (9) wherein the Javascript includes a page load event handler that is configured to, in response to a web page load completion event, generate the second HTTP request; (10) a tangible, non-transitory apparatus-readable memory storage medium may store program code instructions that upon execution automatically effect the method.
p-0034In another aspect, the present invention relate to a method comprising: injecting, by a first apparatus comprising a processor and a memory, of Javascript into a HTTP response to be received by a second apparatus that generated a first HTTP GET request to which the HTTP response corresponds, wherein the Javascript includes Javascript which was not present in the HTTP response before the injection and which, upon execution by the second apparatus, causes the second apparatus to generate a second HTTP request in response to a web page received in response to the first HTTP GET request reaching a specified stage of loading in the second apparatus. A non-ephemeral computer-readable memory may store a program that effects the method when executed by a computer.
p-0035In the foregoing, preferably the second HTTP request is an HTTP GET request.
p-0036And another aspect of the present invention is an apparatus-implemented method comprising: receiving by a first apparatus comprising a processor, via a network connection, of Javascript from a HTTP response; and injecting, by the first apparatus into the Javascript, of a page load event handler that is triggered in response to finishing of loading of a web page by a web browser. Optionally, one or more of the following may be satisfied: (1) wherein the page load event handler generates a HTTP GET request in response to the finishing of loading of a web page; (2) wherein the page load event handler generates a HTTP POST request in response to the finishing of loading of a web page; (3) wherein the page load event handler generates a HTTP PUT request in response to the finishing of loading of a web page; (4) further comprising sending, via a network connection to a second apparatus, the Javascript having been injected with the page load event handler; (5) wherein the second apparatus executes the injected Javascript and the page load event handler generates a HTTP GET request in response to the finishing of loading by a web browser of the second apparatus of a web page.
p-0037In another aspect, the present invention relates to a first apparatus comprising: means for receiving, from a web server, first data from a first HTTP response generated by the web server in response to a first HTTP GET request for a first URL generated by a web browser in a second apparatus; modifying means for obtaining, from the first data, modified first data; and means for sending data relating to the modified first data such that a second HTTP response containing the modified first data is received by the web browser as a response to the first HTTP GET request, wherein said modifying means inserts Javascript into HTML code within the first data to produce the modified first data, wherein the inserted Javascript comprises a page load event handler which, when executed by the web browser, generates a second HTTP request, wherein a timing of the first HTTP GET request is a start time of a time interval for loading of a web page, wherein a timing of the second HTTP request is a finish time of the time interval for loading of the web page, and wherein a time interval for loading of the web page is measured according to the start time and the finish time.
p-0038Still further, in another aspect, the present invention relates to an apparatus-implemented method carried out by a system comprising a processor and a memory, the method comprising: receiving, by a client proxy, of a first HTTP GET request generated by a web browser of a client apparatus for a first URL; recording, by the client proxy, of time of receipt of the first HTTP GET request; editing, by the client proxy, of Javascript to provide code configured to cause the web browser of the client apparatus to generate a second HTTP request; sending, by the client proxy, to the web browser of the client apparatus of an HTTP response comprising the code; generating by the web browser of the client apparatus of the second HTTP request in response to receipt of the HTTP response comprising the code; receiving, by the client proxy, of the second HTTP request; recording, by the client proxy, of time of receipt of the second HTTP request; and computing a response time in accordance with a difference between the time of receipt of the first HTTP GET request as recorded by the client proxy and the time of receipt of the second HTTP request as recorded by the client proxy. Optionally, one or more of the following may be satisfied: (1) wherein the code is configured such that the second HTTP request is a last HTTP GET request carried out by the web browser when processing the HTTP response; (2) wherein the code comprises an end-of-page event handler.
p-0039In the foregoing, the second HTTP request is preferably a HTTP GET request.
p-0040These and other objects, aspects, advantages and features of the present invention will become more apparent from the following detailed description of the presently preferred embodiments taken in conjunction with the accompanying drawings.
BRIEF DESCRIPTION OF THE DRAWINGS
p-0041<figref idrefs="DRAWINGS">FIG. 1</figref> is a schematic diagram showing a satellite communications system in accordance with the present invention.
p-0042<figref idrefs="DRAWINGS">FIG. 2</figref> comprises <figref idrefs="DRAWINGS">FIGS. 2(</figref><i>a</i>) and <b>2</b>(<i>b</i>) which are schematic diagrams showing a client sub-system in accordance with the present invention, where <figref idrefs="DRAWINGS">FIG. 2(</figref><i>a</i>) depicts the physical features within the client sub-system and <figref idrefs="DRAWINGS">FIG. 2(</figref><i>b</i>) depicts the software features within the client sub-system.
p-0043<figref idrefs="DRAWINGS">FIG. 3</figref> comprises <figref idrefs="DRAWINGS">FIGS. 3(</figref><i>a</i>) and <b>3</b>(<i>b</i>) which are schematic diagrams showing an Internet Service Provider (ISP) sub-system in accordance with the present invention, where <figref idrefs="DRAWINGS">FIG. 3(</figref><i>a</i>) depicts the physical features within the ISP sub-system and <figref idrefs="DRAWINGS">FIG. 3(</figref><i>b</i>) depicts the software features within the ISP sub-system.
p-0044<figref idrefs="DRAWINGS">FIG. 4</figref> shows a web page to be obtained by a web browser, in accordance with the present invention.
p-0045<figref idrefs="DRAWINGS">FIG. 5</figref> is a sequence diagram (also colloquially referred to as a ladder diagram or timing diagram) showing the operation of a pre-fetch feature of the present invention.
p-0046<figref idrefs="DRAWINGS">FIG. 6</figref> is a flow diagram showing the pre-fetch feature operation of the proxy server of the present invention.
p-0047<figref idrefs="DRAWINGS">FIG. 7</figref> is a flow diagram showing the interactive pre-fetch feature operations of the client browser and the client proxy program of the present invention.
p-0048<figref idrefs="DRAWINGS">FIG. 8</figref> is a sequence diagram showing the contents of selected transmissions in accordance with the present invention.
p-0049<figref idrefs="DRAWINGS">FIG. 9</figref> is a flow diagram showing a Javascript modification feature of the present invention.
p-0050<figref idrefs="DRAWINGS">FIG. 10</figref> is a sequence diagram showing the re-definition of the Math.random( ) function according to the present invention.
p-0051<figref idrefs="DRAWINGS">FIG. 11</figref> is a sequence diagram showing the adding of a RandomNew( ) function according to the present invention.
p-0052<figref idrefs="DRAWINGS">FIG. 12</figref> comprises <figref idrefs="DRAWINGS">FIGS. 12(</figref><i>a</i>) and <b>12</b>(<i>b</i>) which show Javascript code relating to the re-definition of the Math.random( ) function according to the present invention, where <figref idrefs="DRAWINGS">FIG. 12(</figref><i>a</i>) shows the original Javascript code and <figref idrefs="DRAWINGS">FIG. 12(</figref><i>b</i>) shows the modified Javascript code with the re-defined Math.random( ) function.
p-0053<figref idrefs="DRAWINGS">FIG. 13</figref> comprises <figref idrefs="DRAWINGS">FIGS. 13(</figref><i>a</i>) and <b>13</b>(<i>b</i>) which show Javascript code relating to the addition of the RandomNew( ) function according to the present invention, where <figref idrefs="DRAWINGS">FIG. 13(</figref><i>a</i>) shows the original Javascript code and <figref idrefs="DRAWINGS">FIG. 13(</figref><i>b</i>) shows the modified Javascript code.
p-0054<figref idrefs="DRAWINGS">FIG. 14</figref> is a sequence diagram showing the re-definition of the Date object according to the present invention.
p-0055<figref idrefs="DRAWINGS">FIG. 15</figref> is a sequence diagram showing the adding of a DateNew object according to the present invention.
p-0056<figref idrefs="DRAWINGS">FIG. 16</figref> is a sequence diagram showing obtaining of the client browser specifics according to the present invention.
p-0057<figref idrefs="DRAWINGS">FIG. 17</figref> is a flow diagram showing the client browser specifics obtaining feature of the present invention.
p-0058<figref idrefs="DRAWINGS">FIG. 18</figref> is a sequence diagram showing the cookie tracking feature of the present invention.
p-0059<figref idrefs="DRAWINGS">FIG. 19</figref> is a flow diagram showing the cookie tracking feature of the present invention, when the client proxy does not contain promised or pre-fetched data.
p-0060<figref idrefs="DRAWINGS">FIG. 20</figref> is a flow diagram showing the cookie tracking feature of the present invention, when the proxy server receives a HTTP request from the virtual browser.
p-0061<figref idrefs="DRAWINGS">FIG. 21</figref> is a flow diagram showing the cookie tracking feature of the present invention, when the client proxy contains promised or pre-fetched data.
p-0062<figref idrefs="DRAWINGS">FIG. 22</figref> is a sequence diagram showing the web page response time feature of the present invention.
p-0063<figref idrefs="DRAWINGS">FIG. 23</figref> is a flow diagram showing the web page response time feature of the present invention.
p-0064<figref idrefs="DRAWINGS">FIG. 24</figref> comprises <figref idrefs="DRAWINGS">FIGS. 24(</figref><i>a</i>) and <b>24</b>(<i>b</i>) which show sample Javascript code within a HTML document which requests URLs.
p-0065<figref idrefs="DRAWINGS">FIG. 25</figref> comprises <figref idrefs="DRAWINGS">FIGS. 25(</figref><i>a</i>) and <b>25</b>(<i>b</i>) which are schematic diagrams of an alternative embodiment of the present invention, where the client proxy program is executed within the client PC. <figref idrefs="DRAWINGS">FIG. 25(</figref><i>a</i>) depicts the physical features within the client sub-system and <figref idrefs="DRAWINGS">FIG. 25(</figref><i>b</i>) depicts the software features within the client sub-system.
p-0066<figref idrefs="DRAWINGS">FIG. 26</figref> comprises <figref idrefs="DRAWINGS">FIGS. 26(</figref><i>a</i>) and <b>26</b>(<i>b</i>) which show sample C# code for implementing the web page response time feature of the present invention.
DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
First Embodiment
(1) General Description
p-0067<figref idrefs="DRAWINGS">FIG. 1</figref> shows an embodiment of the present invention. Reference numeral <b>1</b> denotes a satellite communications system of the present invention. That system includes a client sub-system <b>100</b> and an Internet Service Provider (ISP) sub-system <b>200</b>. System <b>1</b> is intended to provide Internet connectivity for client sub-system <b>100</b>. While sub-system <b>200</b> is described as being a sub-system of an Internet Service Provider, it is not so limited and can represent any sub-system providing the describing functions. In other words, sub-system <b>200</b> does not have to be a Internet Service Provider.
p-0068Client sub-system <b>100</b> communicates with ISP sub-system <b>200</b> by transmitting and receiving signals over a satellite network link <b>20</b> with satellite <b>10</b>. ISP sub-system <b>200</b> communicates with client sub-system <b>100</b> by transmitting and receiving signals over a satellite network link <b>30</b> with satellite <b>10</b>. Thus, a communication from client sub-system <b>100</b> to ISP sub-system <b>200</b> is first transmitted through satellite link <b>20</b> to satellite <b>10</b>, which relays it through satellite link <b>30</b> to ISP sub-system <b>200</b>. Conversely, a communication from ISP sub-system <b>200</b> to client sub-system <b>100</b> is first transmitted through satellite link <b>30</b> to satellite <b>10</b>, which relays it through satellite link <b>20</b> to client sub-system <b>100</b>. Satellite links <b>20</b> and <b>30</b> are generally high-latency links, due to the inherent delay in transmitting and receiving data over the long distance.
p-0069ISP sub-system <b>200</b> has a network link <b>40</b> to the Internet <b>50</b>. Thus, ISP sub-system <b>200</b> can communicate with web servers <b>300</b> and <b>301</b> through network links <b>60</b> and <b>61</b>, respectively. As shown, web servers <b>300</b> and <b>301</b> are connected to the Internet <b>50</b> through network links <b>60</b> and <b>61</b>. Web servers <b>300</b> and <b>301</b> could be, by way of example and not of limitation, web servers on the Internet such as a web server corresponding to the domain name uspto.gov and a web server corresponding to the domain name hughes.net, respectively. Preferably, client sub-system <b>100</b>, ISP sub-system <b>200</b>, web server <b>300</b>, and web server <b>301</b> are all associated with IP addresses which are different from each other, and they all represent separate, distinct nodes on a network, each being connected to the network by a network link or network connection.
p-0070<figref idrefs="DRAWINGS">FIGS. 2(</figref><i>a</i>) and (<i>b</i>) show the client sub-system <b>100</b> in further detail. <figref idrefs="DRAWINGS">FIG. 2(</figref><i>a</i>) shows a physical representation of client sub-system <b>100</b>.
p-0071Preferably, client sub-system <b>100</b> includes a client PC <b>110</b> and a router <b>130</b>. Client PC <b>110</b> preferably comprises a central processing unit (CPU) <b>111</b>, a memory <b>112</b>, a hardware network interface (such as a network interface card (NIC)) <b>113</b>, and software <b>150</b>. CPU <b>111</b> may also be referred to as a processor, and preferably comprises hardware circuitry for carrying out computer programming code instructions stored in a memory. Memory <b>112</b> may include any physical, non-transitory, tangible, non-ephemeral, computer-readable storage or recording medium such as, for example, one or more of non-volatile memory, random access memory (RAM), read-only memory (ROM), flash memory, a hard drive, etc. CPU <b>111</b> and memory <b>112</b> are used for executing software <b>150</b> on client PC <b>110</b>. In particular, software <b>150</b> includes one or more computer programs each comprising computer programming code instructions to be executed by CPU <b>111</b>. And while software <b>150</b> is schematically depicted as separate from memory <b>112</b>, software <b>150</b> can be stored in memory <b>112</b> for execution by CPU <b>111</b>. Also, while software <b>150</b> is schematically depicted as communicating with network interface <b>113</b>, it will be appreciated that, in actuality, it may be the case that CPU <b>111</b> electrically communicates with network interface <b>113</b> under the direction of software <b>150</b>.
p-0072Router <b>130</b> preferably includes a satellite interface <b>131</b>, a CPU <b>132</b>, a memory <b>133</b>, a hardware network interface <b>134</b>, and software <b>160</b>. CPU <b>132</b>, memory <b>133</b>, and network interface <b>134</b> are constructed like CPU <b>111</b>, memory <b>112</b>, and network interface <b>113</b> described above. Satellite interface <b>131</b> is a hardware network interface for connecting to a satellite dish to send and receive data over a satellite link. In particular, satellite interface <b>131</b> communicates with satellite <b>10</b> via satellite link <b>20</b>. The client PC <b>110</b> and the router <b>130</b> communicate with each other via network link <b>101</b>. Link <b>101</b> preferably is a wired or wireless local-area-network (LAN) according to IEEE 802.x standards, but can be any type of data link or communication network which can transfer data between two devices. If link <b>101</b> is a LAN, then NIC <b>113</b> and NIC <b>134</b> preferably have IP addresses which are different from each other. CPU <b>132</b> and memory <b>133</b> are used for executing software <b>160</b> on router <b>130</b>, where software <b>160</b> comprises one or more programs each comprising computer programming code instructions to be executed by CPU <b>132</b>. While software <b>160</b> is schematically depicted as separate from memory <b>133</b>, software <b>160</b> can be stored in memory <b>133</b> for execution by CPU <b>132</b>. Again, while software <b>160</b> is schematically depicted as communicating with network interface <b>134</b>, it will be appreciated that, in actuality, it may be the case that CPU <b>132</b> actually electrically communicates with network interface <b>134</b>.
p-0073<figref idrefs="DRAWINGS">FIG. 2(</figref><i>b</i>) schematically shows the software <b>150</b> and <b>160</b> executed within client PC <b>110</b> and router <b>130</b>, respectively. Software <b>150</b> includes (a) a client HTTP web browser <b>120</b> such as, for example, the Firefox web browser, which is a computer program for network or Internet web browsing, and (b) a TCP/IP stack <b>121</b> which is a computer program for effecting TCP/IP network communications. Client web browser <b>120</b> retrieves a web page for a URL specified by a client user (e.g., specified by a person using an input device such as a mouse or keyboard) and displays the retrieved web page on a display screen (e.g., for the person to view). Meanwhile, TCP/IP stack <b>121</b> interfaces with network interface <b>113</b> to send and receive network data, including data originating from or destined to client browser <b>120</b>.
p-0074Router <b>130</b>'s software <b>160</b> includes routing software <b>140</b> for routing network traffic to and from link <b>101</b>. Routing software <b>140</b> interfaces with satellite interface <b>131</b> to send and receive network data over satellite link <b>20</b>. Software <b>160</b> also includes client proxy software <b>141</b> for interfacing with proxy server software in ISP sub-system <b>200</b>, as discussed later. Client proxy software <b>141</b> interfaces with network interface <b>134</b> to operate as a proxy between the routing software <b>140</b> and the client PC <b>110</b>. Preferably, router <b>130</b> performs a Layer 4 switch function to transparently re-direct HTTP requests to client proxy program <b>141</b>, but one of ordinary skill in the art would appreciate that any appropriate networking arrangement which gets an HTTP request to the client proxy could be substituted.
p-0075<figref idrefs="DRAWINGS">FIGS. 3(</figref><i>a</i>) and <b>3</b>(<i>b</i>) show the ISP sub-system <b>200</b> in further detail. <figref idrefs="DRAWINGS">FIG. 3(</figref><i>a</i>) shows a physical representation of ISP sub-system <b>200</b>. ISP sub-system <b>200</b> includes a satellite interface <b>210</b>, a hardware network interface <b>220</b> such as a NIC, and a proxy server <b>250</b>. Proxy server <b>250</b> is preferably a computer, and includes a CPU <b>251</b>, a memory <b>252</b>, software <b>230</b>, and a hardware network interface <b>253</b> such as a NIC. CPU <b>251</b> and memory <b>252</b> are used for executing software <b>230</b> on proxy server <b>250</b>. CPU <b>251</b> and memory <b>252</b> are constructed like CPU <b>111</b> and memory <b>112</b> described above, and software <b>230</b> may be stored in memory <b>252</b>. Software <b>230</b> comprises one or more computer programs each comprising computer executable instructions or programming code for execution by CPU <b>251</b>.
p-0076Satellite interface <b>210</b> sends and receives data over satellite link <b>30</b> and communicates with other devices within ISP sub-system <b>200</b> using network interface <b>220</b>. Network interface <b>220</b> communicates with network interface <b>253</b> via network link <b>201</b> which may be, for example, a LAN link. Proxy server <b>250</b> communicates with client sub-system <b>100</b> by a network connection that uses links including network link <b>201</b>, satellite link <b>30</b>, and satellite link <b>20</b>. Meanwhile, proxy server <b>250</b> communicates with the Internet <b>50</b> using network link <b>40</b>.
p-0077<figref idrefs="DRAWINGS">FIG. 3(</figref><i>b</i>) shows the software <b>230</b> executed within proxy server <b>250</b>. Software <b>230</b> includes a control module <b>260</b> (e.g., a computer program) and a pre-fetch virtual browser <b>270</b>. The latter may be, for example, a HTTP web browser computer program such as Firefox, preferably the Firefox browser having been enhanced to be controlled by an external program such as control module <b>260</b>. Control module <b>260</b> controls the operation of virtual browser <b>270</b>. Control module <b>260</b> also operates as a proxy for virtual browser <b>270</b>. That is, control module <b>260</b> intercepts data requests (e.g., a request for a URL) made by virtual browser <b>270</b> and also relays response data (e.g., a response to a request for a URL) to virtual browser <b>270</b>. Control module <b>260</b> further interfaces with client proxy program <b>141</b> within router <b>130</b> of client sub-system <b>100</b>, as later discussed.
p-0078Control module <b>260</b> also includes a cookie tracker module <b>261</b> and a Javascript modifier module <b>262</b>. Cookie tracker module <b>261</b> tracks cookies within requests and responses sent by client browser <b>120</b> within client PC <b>110</b>, in coordination with client proxy program <b>141</b> within router <b>130</b>. Javascript modifier module <b>262</b> receives HTML and is configured to, when appropriate, modify Javascript within the HTML. Alternatively, module <b>262</b> receives Javascript and outputs modified Javascript. Modules <b>260</b>-<b>262</b> are preferably implemented as computer programs executed by CPU <b>251</b>.
p-0079Virtual browser <b>270</b> comprises a cookie storage module <b>271</b> and a Javascript execution module <b>272</b>. Preferably, virtual browser <b>270</b> also includes other components such as, by way of example and not of limitation, an HTML parser, web page renderer, HTTP client, etc. Cookie storage module <b>271</b> stores cookies within virtual browser <b>270</b> such that when a web page is requested, any cookie or cookies associated with that web page are retrieved and attached with the request. Javascript execution module <b>272</b> receives Javascript code within HTML and executes the Javascript. Modules <b>271</b>-<b>272</b> are preferably implemented as computer programs executed by CPU <b>251</b>. The executed Javascript can perform a variety of functions, including requesting a URL for an additional images, a sound clip, a video, or other forms of media. Such a URL can be either static or dynamic. A static URL is a fixed string of text such as, for example, “www.uspto.gov/logo.jpg”. On the other hand, a dynamic URL is dynamically generated. For example, a dynamic URL could be defined by the following: “www.uspto.gov/logo-”+SIZE+“.jpg”, which is dependent on the variable SIZE. Therefore, if SIZE=“big”, the dynamically-generated URL would be “www.uspto.gov/logo-big.jpg”, whereas if SIZE=“small”, the dynamically-generated URL would be “www.uspto.gov/logo-small.jpg”. Thus, upon execution of the Javascript, a URL is dynamically generated.
(2) Operation of Pre-Fetching Feature
p-0080<figref idrefs="DRAWINGS">FIGS. 4-8</figref> describe the pre-fetching feature of the present invention. <figref idrefs="DRAWINGS">FIG. 4</figref> shows an example of a web page <b>400</b> that client browser <b>120</b> requests (e.g., by generating a HTTP GET request for a URL corresponding to that web page). <figref idrefs="DRAWINGS">FIG. 5</figref> shows the communications between the components of system <b>100</b>. <figref idrefs="DRAWINGS">FIG. 6</figref> shows steps for the operation of proxy server <b>250</b>. <figref idrefs="DRAWINGS">FIG. 7</figref> shows steps for the operation of client browser <b>120</b> and client proxy program <b>141</b>. <figref idrefs="DRAWINGS">FIG. 8</figref> shows the contents of selected transmissions depicted in <figref idrefs="DRAWINGS">FIG. 5</figref>.
p-0081How client browser <b>120</b> loads a web page will now be described. Assume that the web page is an Internet web page which, like many web pages, is formatted in HyperText Markup Language (HTML). First, the user enters a particular Uniform Resource Locator (URL) into the client browser <b>120</b>. For example, the user types the URL www.webserver1.com/index.html into the address bar of the client browser <b>120</b>. The client browser <b>120</b> then generates a HTTP GET request for that URL. The client browser <b>120</b> then receives a HTTP response in response to the HTTP GET request. The HTTP response may, by way of example, include an HTML document containing HTML code that includes both (a) the web page's text, which is to be displayed, and (b) additional links to, for example, an image or other forms of content, which are also to be displayed. The additional links may be static links included in the HTML. Alternatively, the HTML document from the HTTP response may include Javascript that when executed by the client browser generates an additional link (i.e., a dynamically-generated link). The client browser <b>120</b> then processes the HTML document by parsing the HTML document, resulting in (a) displaying the web page's text, (b) requesting each additional link (i.e., generating a HTTP GET request for each additional link), and (c) upon receiving the requested content (e.g., in a HTTP response to each respective HTTP GET request), displaying the same.
p-0082<figref idrefs="DRAWINGS">FIG. 4</figref> shows a specific example. In more detail, as shown therein, web page <b>400</b>, as displayed on the screen of the client browser <b>120</b> when fully loaded, includes text <b>401</b>, a first image <b>402</b> (“smiley.jpg”), and a second image <b>403</b> (“ad.jpg”) such as an advertisement. In this specific example, the client browser <b>120</b> generates a HTTP request for a URL, receives a HTTP response including HTML code, the HTML code comprising (a) text <b>401</b>, (b) Javascript which when executed generates a URL for first image <b>402</b>, and (c) Javascript which when executed generates a URL for second image <b>403</b>. Here, the URLs for first image <b>402</b> and second image <b>403</b> are dynamically-generated URLs. The client browser <b>120</b> creates requests for these dynamically-generated URLs, i.e., the client browser <b>120</b> generates a HTTP GET request for the URL for first image <b>402</b> and a HTTP GET request for the URL for second image <b>403</b>. In this example, the URL for first image <b>402</b> corresponds to the same web server as the URL of web page <b>400</b>, whereas the URL for second image <b>403</b> corresponds to a separate web server. Sample fragments of Javascript code which create requests for URLs are depicted in <figref idrefs="DRAWINGS">FIGS. 24(</figref><i>a</i>) and <b>24</b>(<i>b</i>), i.e., these are examples of dynamic URL generation by Javascript.
p-0083The operative steps of proxy server <b>250</b> will now be described, with reference to <figref idrefs="DRAWINGS">FIGS. 5 and 6</figref>. First, client browser <b>120</b> generates a HTTP GET request for the URL www.webserver1.com/index.html, as discussed above, and client PC <b>110</b> sends the same on a network connection as a communication or transmission depicted by reference numeral <b>501</b>. The above URL corresponds to a particular web server, Web Server #<b>1</b> in this example. Preferably, HTTP GET request <b>501</b> is sent on an HTTP connection where an IP packet has client PC <b>110</b>'s IP address as a source IP address and Web Server #<b>1</b>'s IP address as a destination IP address. In more detail, the HTTP GET request <b>501</b> is sent out from client PC <b>110</b> by way of TCP/IP stack <b>121</b> and NIC <b>113</b> to link <b>101</b>, which constitutes sending the HTTP GET request on a network connection.
p-0084Client proxy program <b>141</b> receives the HTTP GET request <b>501</b>. In more detail, client proxy program <b>141</b> receives the HTTP GET request <b>501</b> via NIC <b>134</b> (which is connected to link <b>101</b>). Client proxy program <b>141</b>, in response to receiving the HTTP GET request, sends communication or transmission <b>502</b> to proxy server <b>250</b>, the communication including data or information relating to communication or transmission <b>501</b>, as later discussed with respect to <figref idrefs="DRAWINGS">FIG. 7</figref>. From this data or information, the URL can be obtained; for example, the data or information could comprise or be the URL or even the entire HTTP GET request. In step S<b>600</b> in <figref idrefs="DRAWINGS">FIG. 6</figref>, proxy server <b>250</b> receives communication or transmission <b>502</b> from client sub-system <b>100</b>. As will be understood, such constitutes receipt of communication or transmission <b>502</b> by proxy server <b>250</b> via a network connection (i.e., via routing <b>140</b>, satellite interface <b>131</b>, link <b>20</b>, satellite <b>10</b>, link <b>30</b>, satellite interface <b>210</b>, NIC <b>220</b>, link <b>201</b>, and NIC <b>253</b>, for example).
p-0085In a preferred embodiment, communication between client sub-system <b>100</b> and the ISP sub-system <b>200</b> may be transmitted and received according to a non-standard application layer protocol running over a TCP connection. Such a non-standard application layer protocol may be beneficial over an industry-standard format in optimizing data transmission throughput between sub-systems. For example, a proprietary format may compress the data transmission to reduce the total required transmission amount, or may combine multiple requests into a single transmission to reduce overhead. Preferably, the proprietary format is used only between router <b>130</b> and proxy server <b>250</b> so that client PC need not be modified to use any proprietary protocol. Thus, for HTTP GET request <b>501</b> made by client browser <b>120</b>, router <b>130</b> encodes HTTP GET request <b>501</b> into a proprietary format and transmits that data as communication <b>502</b>. Then, ISP sub-system <b>200</b> receives communication <b>502</b> and decodes the data to extract the contents of the HTTP GET request <b>501</b>. However, one of ordinary skill in the art would appreciate that the actual data request, or that any other network protocol format or combination thereof, could be used as a network transmission format. For example, a conventional, non-propriety network protocol like TCP/IP could be used.
p-0086In step S<b>601</b>, proxy server <b>250</b> forms (i.e., generates) its own HTTP GET request <b>503</b> for the same URL as HTTP GET request <b>501</b>. In an embodiment, an IP packet used by proxy server <b>250</b> when sending HTTP GET request <b>503</b> is configured with the proxy server <b>250</b>'s IP address as the source address and Web Server #<b>1</b>'s address as the destination address. Alternatively, the system may have advanced routing features, whereby proxy server <b>250</b> may instead send HTTP GET request <b>503</b> within an IP packet configured with another source address, such as an IP address of client sub-system <b>100</b>. Web Server #<b>1</b>, upon receipt of HTTP GET request <b>503</b>, generates a HTTP response <b>504</b> in response to the request, and sends the HTTP response <b>504</b> to proxy server <b>250</b>.
p-0087In step S<b>602</b>, proxy server <b>250</b> receives HTTP response <b>504</b> from web server #<b>1</b>. HTTP response <b>504</b> may include, for example, a HTML document which represents the layout pattern and text <b>401</b> of web page <b>400</b>. In this example, the HTML document does not include the images <b>402</b> and <b>403</b> themselves, but instead includes Javascript code which, when executed, dynamically generates URLs for image <b>402</b> and image <b>403</b>, as discussed above. Of course, the present invention is not limited to dynamically-generated URLs, and one or more URLs included in the HTML document could be static URLs instead. Preferably, both dynamic URLs and static URLs are pre-fetched.
p-0088In step S<b>603</b>, proxy server <b>250</b> sends a transmission <b>505</b> via a network connection to client proxy program <b>141</b>. Transmission <b>505</b> comprises the HTML document from HTTP response <b>504</b>, or may comprise the entire HTTP response <b>504</b>. As later discussed, proxy server <b>250</b> may modify the HTML (e.g., modify Javascript in the HTML) before sending the same. As also later discussed, client proxy program <b>141</b> uses transmission <b>505</b> to generate a HTTP response to web browser <b>120</b>'s HTTP GET request <b>501</b>, which response may include the HTML document or modified HTML document.
p-0089In step S<b>604</b>, proxy server <b>250</b> executes the Javascript within the HTML document, as seen in block <b>507</b> in <figref idrefs="DRAWINGS">FIG. 5</figref>. More specifically, control module <b>260</b> first forwards the HTML document to virtual browser <b>270</b> for processing as if for actual display. (To forward the HTML document to virtual browser <b>270</b>, the control module <b>260</b> preferably commands virtual browser <b>270</b> to retrieve the web page's URL by having virtual browser <b>270</b> generate an HTTP GET request for that URL, intercepts that HTTP GET request generated by virtual browser <b>270</b>, and returns to the virtual browser <b>270</b> an HTTP response including the HTML document.) Virtual browser <b>270</b> processes the HTML document and therefore forms a virtual layout of HTML page <b>400</b>. Virtual browser <b>270</b> also executes the Javascript within the HTML document using Javascript execution module <b>272</b>.
p-0090Javascript is frequently used to enable additional functionality in web pages. Javascript accomplishes this functionality by allowing specific defined functions to be defined and to be executed. The additional functionality includes, among other features, the ability to modify the original HTML code such that a custom web page is displayed. For instance, the Javascript may create a dynamic URL in the HTML code.
p-0091In this case, Javascript execution module <b>272</b>, in executing the Javascript, produces URLs to smiley.jpg and ad.jpg (i.e., the first and second images <b>402</b> and <b>403</b>), which virtual browser <b>270</b> requests for retrieval. Since control module <b>260</b>, in the preferred embodiment, acts as a proxy for virtual browser <b>270</b>, control module <b>260</b> intercepts the requests for these URLs. Since the same Javascript is subsequently going to be executed by client browser <b>120</b>, control module <b>260</b> recognizes that client browser <b>120</b> will later request these URLs. Virtual browser <b>270</b> also requests retrieval of any static URLs in the HTML code in a similar manner (not shown in this example).
p-0092Thus, in step S<b>605</b>, control module <b>260</b> pre-fetches these additional URLs. That is, control module <b>260</b> forms (i.e., generates) HTTP GET request <b>508</b> for smiley.jpg, and forms HTTP GET request <b>510</b> for ad.jpg. Since the URL for smiley.jpg (i.e., first image <b>402</b>) corresponds to www.webserver1.com, control module <b>260</b> sends HTTP GET request <b>508</b> to Web Server #<b>1</b>. Since the URL for ad.jpg (i.e., second image <b>403</b>) corresponds to www.webserver2.com, HTTP GET request <b>510</b> is sent by control module <b>260</b> to Web Server #<b>2</b>.
p-0093At the same time, in step S<b>606</b>, control module <b>260</b> also sends pre-fetch notifications (“promises”) <b>509</b> and <b>511</b> via a network connection to client proxy program <b>141</b> for URLs corresponding to smiley.jpg (first image <b>402</b>) and ad.jpg (second image <b>403</b>), respectively. These pre-fetch notifications comprise data serving as notifications which inform client proxy program <b>141</b> that proxy server <b>250</b> has started the process of pre-fetching content (i.e., smiley.jpg and ad.jpg) for the URLs in question, effectively “promising” that the content will be subsequently sent.
p-0094In step S<b>607</b>, control module <b>260</b> receives HTTP responses <b>512</b> and <b>514</b> for HTTP GET requests <b>508</b> and <b>510</b>, respectively, from Web Server #<b>1</b> and Web Server #<b>2</b>, respectively. The HTTP responses contain the content image data for smiley.jpg and ad.jpg (i.e., the first and second images <b>402</b> and <b>403</b>).
p-0095In step S<b>608</b>, control module <b>260</b> relays the content image data of smiley.jpg and ad.jpg to client proxy program <b>141</b> to satisfy the previously-made pre-fetch notifications <b>509</b> and <b>511</b>, respectively. As previously mentioned, the preferred embodiment encapsulates all data to be transmitted between client sub-system <b>100</b> and ISP sub-system <b>200</b>, including the content image data, into a proprietary network transmission format. However, any network transmission format, including industry-standard formats, or combinations thereof, can be alternatively used in connection with the present invention. For example, control module <b>260</b> could send the entire HTTP response to client proxy program <b>141</b> via a standard TCP/IP connection.
p-0096At the same time, in step S<b>609</b>, control module <b>260</b> also relays the content image data of smiley.jpg and ad.jpg to virtual browser <b>270</b> so that virtual browser <b>270</b> loads the images in the web page. This ensures that, in a circumstance where the pre-fetched data contains links to additional content, any additional required pre-fetching is performed to completely load the web page,
p-0097The operation of client browser <b>120</b> and client proxy program <b>141</b> will now be described, with reference to <figref idrefs="DRAWINGS">FIGS. 5 and 7</figref>.
p-0098In step S<b>700</b>, client browser <b>120</b> requests a URL. Usually, the request is by a user of client PC <b>110</b> requesting the URL (e.g., by entering a URL into an address bar displayed on the screen by client browser <b>120</b>, or by clicking using a mouse on a link to a URL, the link being displayed on the screen by client browser <b>120</b>).
p-0099In step S<b>701</b>, client browser <b>120</b> forms (i.e., generates) a HTTP GET request <b>501</b> for the URL and sends the HTTP GET request <b>501</b> according to the network settings in TCP/IP stack <b>121</b>. TCP/IP stack <b>121</b> is configured such that Internet communications are routed to router <b>130</b>. Accordingly, the request <b>501</b> is sent by client PC <b>110</b> via a network connection and is received by router <b>130</b>.
p-0100In step S<b>702</b>, client proxy program <b>141</b> intercepts HTTP GET request <b>501</b> and relays the HTTP GET request to ISP sub-system <b>200</b> as communication <b>502</b>. As previously mentioned, the preferred embodiment encapsulates communication <b>502</b> using a proprietary network transmission format, but any format can be used in connection with the present invention. Instead of sending the entire HTTP GET request, client proxy program <b>141</b> may send just the URL, or data from which the URL can be obtained.
p-0101In step S<b>703</b>, client proxy program <b>141</b> receives transmission <b>505</b> which comprises the HTML document corresponding to the requested URL. Again, transmission <b>505</b> may instead comprise the entire HTTP response that comprises the HTML document.
p-0102In step S<b>704</b>, client proxy program <b>141</b> forms (i.e., generates) a HTTP response <b>506</b> in accordance with transmission <b>505</b>. In particular, client proxy program <b>141</b> generates a HTTP response <b>506</b> which contains the HTML document from transmission <b>505</b> and transmits the HTTP response <b>506</b> to client browser <b>120</b> (so as to respond to the client browser's HTTP GET request of step S<b>701</b>). As can be seen, all communications between client browser <b>120</b> and Web Server #<b>1</b> are, in the preferred embodiment, “transparent” to client browser <b>120</b>, and client browser <b>120</b> processes HTTP response <b>506</b> as if it was originally sent by Web Server #<b>1</b>. In other words, HTTP response <b>506</b> appears to client browser <b>120</b> to have come from Web Server #<b>1</b>. This may be referred to as transparent proxying because client browser <b>120</b> thinks that HTTP response <b>506</b> came from Web Server #<b>1</b> even though it was generated by client proxy program <b>141</b>.
p-0103Client browser <b>120</b> performs steps S<b>705</b>-S<b>707</b> during the same period that client proxy program <b>141</b> performs steps S<b>708</b>-S<b>710</b>. In step S<b>705</b>, client browser <b>120</b> processes the HTML document, including executing the Javascript in the HTML document, as seen in block <b>516</b> in <figref idrefs="DRAWINGS">FIG. 5</figref>. Since the Javascript is the same code as the Javascript executed by the Javascript execution module <b>272</b> of proxy server <b>250</b> (in step S<b>604</b>), the same URLs for smiley.jpg and ad.jpg (i.e., the first and second images <b>402</b> and <b>403</b>) will be generated by client browser <b>120</b>.
p-0104In step S<b>706</b>, client browser <b>120</b> recognizes that additional content for those URLs is required to fully display the web page <b>400</b>. Thus, in step S<b>707</b>, client browser <b>120</b> requests the content for these URLs by generating HTTP GET requests <b>517</b> and <b>519</b> for the smiley.jpg and ad.jpg URLs, respectively. Client browser <b>120</b> also requests any static URLs in the HTML document in a similar manner (not shown in this example).
p-0105Meanwhile, client proxy program <b>141</b> continuously listens for transmissions from ISP sub-system <b>200</b>. In step S<b>708</b>, client proxy program <b>141</b> receives pre-fetch notifications <b>509</b> and <b>511</b> sent by control module <b>260</b> in proxy server <b>250</b>. Client proxy program <b>141</b> stores these pre-fetch notifications in memory <b>133</b>.
p-0106In step S<b>709</b>, client proxy program <b>141</b> receives transmissions <b>513</b> and <b>515</b>, which contain the pre-fetched image data corresponding to smiley.jpg and ad.jpg, respectively.
p-0107In step S<b>710</b>, client proxy program <b>141</b> stores the image data as pre-fetched data in memory <b>133</b>.
p-0108In step S<b>711</b>, client proxy program <b>141</b>, upon receipt of HTTP GET requests <b>517</b> and <b>519</b> from client browser <b>120</b>, checks memory <b>133</b>, and determines whether the URL in each HTTP GET request corresponds to data which has already been pre-fetched and stored in memory <b>133</b>. As described above for steps S<b>709</b> and S<b>710</b>, the data for smiley.jpg and ad.jpg has already been pre-fetched, received, and stored in that memory. Accordingly in step S<b>712</b>, client proxy program <b>141</b> sends the pre-fetched smiley.jpg image data in a HTTP response <b>518</b> to HTTP GET request <b>517</b>. Client proxy program <b>141</b> also sends the pre-fetched ad.jpg image data in a HTTP response <b>520</b> to HTTP GET request <b>519</b>.
p-0109By pre-fetching data which is requested from the HTML document for the original requested URL, the client sub-system <b>100</b> is able to obtain the additional content data in advance of the client browser <b>120</b> actually requesting such data. Thus, at least one round-trip delay over satellite links <b>20</b> and <b>30</b> is avoided, thereby reducing delay in fully loading web page <b>400</b>. Put another way, this is significant because neither client browser <b>120</b> nor client proxy program <b>141</b> has sent or relayed either a HTTP GET request for the URL for smiley.jpg or a HTTP GET request for the URL for ad.jpg over the satellite link. Thus, the present invention provides an advantage of preventing sending of a HTTP GET request across the network connection of the satellite link. Furthermore, because proxy server <b>250</b> pre-fetches content not only from static URLs found in a HTTP response but also from URLs dynamically generated by Javascript found in the HTTP response, the dynamically-generated-URL content can be pre-fetched by the proxy server <b>250</b> and sent or promised and sent to the client proxy program <b>141</b>, which in turn supplies the same to the client browser <b>120</b>.
p-0110For step S<b>711</b>, in the event that data for the additional URLs has not yet been stored in memory, client proxy program <b>141</b> proceeds to step S<b>713</b>. In step S<b>713</b>, client proxy program <b>141</b> checks if the URL corresponds to data which has been promised. If a pre-fetch notification has been stored in memory <b>133</b> for the URL, then client proxy program <b>141</b> recognizes that a pre-fetch operation for the URL is already underway, and at least a partial delay can be avoided by simply waiting for the content for the URL to be relayed to client sub-system <b>100</b> from proxy server <b>250</b>.
p-0111In step S<b>714</b>, client proxy program <b>141</b> finally receives the content data (corresponding to communications <b>513</b> and <b>515</b> which satisfy promises) and immediately sends the data to client browser in the form of HTTP responses <b>518</b> and <b>520</b>, as discussed above with regards to step S<b>712</b>. Client proxy program <b>141</b> also implements a timeout period in the event that a communications loss has occurred, so it can re-transmit and ensure eventual retrieval of the content data.
p-0112If client proxy program <b>141</b> has not yet received a pre-fetch notification for the additional URLs, then client proxy program <b>141</b> implements step S<b>715</b>. In step S<b>715</b>, client proxy program <b>141</b> requests the URL in a non-pre-fetch manner, to ensure that the content data is retrieved.
p-0113<figref idrefs="DRAWINGS">FIG. 8</figref> further illustrates transmissions <b>501</b>, <b>503</b>, <b>504</b>, and <b>506</b>, particularly the contents thereof. As seen in <figref idrefs="DRAWINGS">FIG. 8</figref>, HTTP GET request <b>501</b> is preferably encapsulated into a IP packet (i.e., by the TCP/IP stack). IP packets for web page retrieval are customarily sent over established TCP connections. IP packets contain a header section with the source and destination IP addresses of the packet. For request <b>501</b>, the source IP address is the client browser's <b>120</b> IP address and the destination IP address is the web server's IP address. The IP packet also has a payload section which contains the HTTP GET request.
p-0114HTTP GET request <b>503</b> is preferably also encapsulated in an IP packet. As seen in <figref idrefs="DRAWINGS">FIG. 8</figref>, the IP packet for request <b>503</b> also has a header section and a payload section. For request <b>503</b>, however, the source IP address is the proxy server's <b>250</b> IP address and the destination IP address is the web server's IP address. This allows HTTP response <b>504</b> to request <b>503</b> to be received by proxy server <b>250</b> (since the HTTP response <b>504</b> will be sent using a destination IP address equal to proxy server <b>250</b>'s IP address). The IP packet's payload section contains the HTTP GET request <b>503</b>.
p-0115HTTP response <b>504</b> is also preferably encapsulated in an IP packet with header and payload sections. The source IP address of this IP packet is that of the web server, and the destination IP address is that of proxy server <b>250</b>. The payload section of the IP packet contains the header of the HTTP response, followed by the HTML document.
p-0116HTTP response <b>506</b> is preferably encapsulated in an IP packet as well. The source IP address of this IP packet is the web server, to ensure that all intermediate transmissions through proxy server <b>250</b> and client proxy program <b>141</b> are transparent to client browser <b>120</b>. The destination IP address is that of client browser <b>120</b>. The payload section of the IP packet contains a similar, if not identical, header of HTTP response <b>504</b>, followed by HTML. In this case, the HTML is the same as the HTML within HTTP response <b>504</b>. However, as described below, the HTML within HTTP response <b>506</b> can be modified compared to the original HTML in response <b>504</b>.
p-0117Accordingly, the present invention provides the benefits of accelerated web page loading over a satellite connection. The present invention is applicable towards a variety of web browsers including Microsoft Internet Explorer, Mozilla Firefox, Google Chrome, or any other browser.
Second Embodiment
p-0118In the first embodiment, the client proxy program <b>141</b> is “transparent” to client browser <b>120</b>. In other words, the proxy settings of client browser <b>120</b> are not set to use client proxy program <b>141</b> (i.e., no configuration for client browser <b>120</b> is necessary). In an alternative second embodiment, client browser <b>120</b>'s proxy settings may be set to client proxy program <b>141</b> (i.e., client browser <b>120</b> is configured, in its proxy settings, to specify a network address corresponding to client proxy program <b>141</b> should be used to access a network).
Third Embodiment
p-0119In the first two embodiments, client proxy program <b>141</b> is located within router <b>130</b>. However, the present invention is not so limited; instead, client proxy program <b>141</b> may be located elsewhere. For example, it may be located in client PC <b>110</b> instead. Such is shown in <figref idrefs="DRAWINGS">FIG. 25</figref>. In this third embodiment, client proxy program <b>141</b> is stored within memory <b>112</b> of client PC <b>110</b>, and is executed using CPU <b>111</b>. Preferably, client browser <b>120</b> interfaces directly with client proxy program <b>141</b>, and client proxy program <b>141</b> interfaces with TCP/IP stack <b>121</b>. Preferably, client browser <b>120</b> may have its proxy settings configured to communicate with client proxy program <b>141</b>. In this case, the client proxy program <b>141</b> typically listens in on a network port of NIC <b>113</b>, and client browser <b>120</b>'s proxy settings are configured with the host being localhost and with that network port.
(3) Javascript Modification Feature
p-0120Although the above-discussed pre-fetching feature in <figref idrefs="DRAWINGS">FIGS. 4-8</figref> can transmit an unmodified HTML document of a HTTP response from ISP sub-system <b>200</b> to client sub-system <b>100</b>, the Javascript within the HTML can instead be selectively modified prior to the transmission.
p-0121Web pages often contain advertisement images, usually as a revenue source for the web page's owner. These images are sometimes requested using Javascript. When this occurs, the Javascript may create a URL for the image which depends on a Javascript function/object, such as a random number function which returns a random number or a date object which returns the current date and time. An example of a URL that has been generated in accordance with a random number and a date and time might be: www.hughes.net/advertisement/1050-20100721-222542 (where 1050 represents a four digit random number (typically generated by a pseudorandom number algorithm)) and 20100721-222542 represents 10:25 pm and 42 seconds on Jul. 21, 2010. A purpose of using a random number and/or a date and/or a time when generating a URL is to create a unique URL so that a fresh advertisement will be loaded by the browser (since the URL is unique, the browser will not find any content stored in its cache for that URL, and thus will generate a HTTP GET request for that URL, ensuring for the advertiser that a fresh image will be obtained and displayed).
p-0122Now assume that a HTTP response contains Javascript that uses a web browser's built-in Javascript random number function to generate a URL for an advertising image. If that Javascript is executed on client browser <b>120</b>, a different random number may or will be returned by the random number function when the Javascript is executed on virtual browser <b>270</b>. As a result, different URLs may or will be generated by the client browser <b>120</b> and the virtual browser <b>270</b>. Hence, any pre-fetched data obtained by virtual browser <b>270</b> will not be matched to the URL requested by client browser <b>120</b>. As such, client sub-system <b>100</b> (specifically client proxy program <b>141</b>) is required to process the client browser <b>120</b> URL request as a non-pre-fetch request, thus defeating the benefits of pre-fetching.
p-0123This same problem exists for the Javascript built-in Date object, whereby different date/time values may be returned when the Javascript is executed on client browser <b>120</b>, compared to when executed on virtual browser <b>270</b>. Such may occur when the respective clocks of client PC <b>110</b> and proxy server <b>250</b> are not perfectly synchronized or where the time zones are not the same. Again, pre-fetched data will not be matched to the same URL, and client sub-system <b>100</b> is required to process the URL request as a non-pre-fetch request.
p-0124To overcome this problem, the Javascript modification feature of the present invention modifies the Javascript in a HTML document such that a custom function is instead executed or a custom object is created and referenced. The custom function/object allows the same URLs to be created between client browser <b>120</b> and virtual browser <b>270</b>. More specifically, preferably, the proxy server <b>250</b> modifies Javascript that uses an algorithm to generate a URL to thereby obtain modified Javascript that uses a different algorithm to generate a URL. For example, if the unmodified Javascript uses a date object to generate a URL or for some other purpose, then the modified Javascript could use a different date object, or a date function, or something else altogether different. And if the unmodified Javascript uses a random number function to generate a URL or for some other purpose, then the modified Javascript could use a different random number function or something else altogether different.
p-0125<figref idrefs="DRAWINGS">FIGS. 9-15</figref> describe this Javascript modification feature of the present invention. <figref idrefs="DRAWINGS">FIG. 9</figref> describes the operation of proxy server <b>250</b> in modifying Javascript. <figref idrefs="DRAWINGS">FIGS. 10-13</figref> illustrate the modification of a random number function in Javascript. <figref idrefs="DRAWINGS">FIGS. 14-15</figref> illustrate the modification of a date object in Javascript.
p-0126<figref idrefs="DRAWINGS">FIG. 9</figref> shows the steps of proxy server <b>250</b> in modifying Javascript. In step S<b>900</b>, proxy server <b>250</b> receives communication <b>1001</b> from client proxy program <b>141</b>, similar to step S<b>600</b>. Communication <b>1001</b> contains a request for a URL, the request having been generated by client proxy program <b>141</b> in response to receipt by the client proxy program <b>141</b> of a HTTP GET request <b>1000</b> generated by client browser <b>120</b> and sent over a network connection to client proxy program <b>141</b>. Communication <b>1001</b> could comprise the HTTP GET request <b>1000</b> or instead of the entire HTTP GET request <b>1000</b> just data from which the URL could be obtained (e.g., the URL itself).
p-0127In step S<b>901</b>, proxy server <b>250</b> forms (i.e., generates) its own HTTP GET request <b>1002</b> for the same URL, similar to step S<b>601</b>.
p-0128In step S<b>902</b>, proxy server <b>250</b> receives HTTP response <b>1003</b> from the web server in response to HTTP GET request <b>1002</b>. Similar to response <b>504</b> for step S<b>602</b>, HTTP response <b>1003</b> includes a HTML document which represents the layout pattern and text <b>401</b> of web page <b>400</b>, but not the graphics components, such as image <b>402</b> and image <b>403</b>. The HTML document also includes Javascript code which, when executed, requests URLs for image <b>402</b> and image <b>403</b>.
p-0129In step S<b>903</b>, Javascript modifier module <b>262</b> within proxy server <b>250</b> parses (or scans) the Javascript code within the HTML document for references to a particular function or object. In the preferred embodiment, the particular functions/objects are the Javascript built-in Math.random( ) function and the Date object's default constructor.
p-0130In step S<b>904</b>, Javascript modifier module <b>262</b> modifies the Javascript such that the references to the original function or object now refer to a custom function or object. Javascript modifier module <b>262</b> can do this in one of at least two different ways.
p-0131One method is a re-write method. In this method, Javascript modifier module <b>262</b> re-writes the original function or object, so that references in the Javascript to the function or object are unmodified, but now instead execute the custom function or access the custom object when the unmodified references are executed. This first approach is further illustrated in <figref idrefs="DRAWINGS">FIGS. 10 and 12</figref> for the Math.random( ) function, and in <figref idrefs="DRAWINGS">FIG. 14</figref> for the Date object.
p-0132A second method is an insert and search/replace method. In this second method, Javascript modifier module <b>262</b> inserts a definition for the custom function/object as a new function/object, and then searches for and replaces all references in the Javascript to the original function/object with references to the custom function/object. This second approach is further illustrated in <figref idrefs="DRAWINGS">FIGS. 11 and 13</figref> for the Math.random( ) function, and in <figref idrefs="DRAWINGS">FIG. 15</figref> for the Date object.
p-0133Regardless of the particular method used, the Javascript modification results in modified Javascript which, when executed, executes the custom function instead of the original function and/or accesses the custom object instead of the original object. Thus, Javascript which carries out a first algorithm when executed is modified to obtain modified Javascript which carries out a second algorithm, different from the first algorithm, instead of the first algorithm.
p-0134The custom function and/or custom object returns predictable results, such that dynamic URLs generated by relying on a random number will be the same when dynamically generated by client browser <b>120</b> and when dynamically generated by virtual browser <b>270</b>.
p-0135In step S<b>905</b>, control module <b>260</b> sends a communication <b>1005</b> including HTML to client proxy program <b>141</b>. However, instead of the HTML including the original unmodified Javascript, as in step S<b>603</b>, the HTML in communication <b>1005</b> includes the modified Javascript.
p-0136In step S<b>906</b>, control module <b>260</b> also forwards the HTML including the modified Javascript to virtual browser <b>270</b> for processing as if for actual display, in accordance with the above-described pre-fetching feature.
p-0137In step S<b>907</b>, virtual browser <b>270</b> performs the pre-fetching process for the HTML with modified Javascript. This includes parsing the HTML, executing the Javascript, pre-fetching content of statically and dynamically generated URLs, and sending pre-fetch notifications, as described above in the pre-fetch feature section.
p-0138(a) Random Number Function
p-0139<figref idrefs="DRAWINGS">FIGS. 10 and 12</figref> illustrate the re-write/re-define method for the Math.random( ) function. As previously described with respect to steps S<b>900</b>-S<b>902</b>, proxy server <b>250</b> receives communication <b>1001</b> from client proxy program <b>141</b>, sends HTTP GET request <b>1002</b> to the web server, and receives from the web server HTTP response <b>1003</b>. Javascript modifier module <b>262</b> then performs steps S<b>903</b>-S<b>904</b>, corresponding to block <b>1004</b> in <figref idrefs="DRAWINGS">FIG. 10</figref>. In this case, Javascript modifier module <b>262</b> re-defines the Math.random( ) function, as seen in the code modification depicted in <figref idrefs="DRAWINGS">FIG. 12</figref>.
p-0140<figref idrefs="DRAWINGS">FIG. 12(</figref><i>a</i>) shows original Javascript code which calls the Math.random( ) function, and <figref idrefs="DRAWINGS">FIG. 12(</figref><i>b</i>) shows modified Javascript code which re-defines the Math.random( ) function by replacing the function with a custom function. Accordingly, any function calls to Math.random( ) will execute the custom function. In particular, the modified Javascript includes Javascript that defines the custom function, located at a position in the Javascript prior to a position where it will be called. Here, the custom function, called RandomNew( ) generates the same random number for the first 20 calls to that function. The line of Javascript that reads “Math.random=RandomNew” replaces, re-writes, re-defines, or overwrites, as it were, the Math.random( ) function with the RandomNew( ) function. As a result, function calls in the Javascript to Math.random( ) will, upon execution of the modified Javascript, cause the RandomNew( ) function to be executed.
p-0141As described with respect to step S<b>905</b>, control module <b>260</b> sends communication <b>1005</b> comprising the modified Javascript, such that it is received by client proxy program <b>141</b>. In accordance with communication <b>1005</b>, client proxy program <b>141</b> forms (i.e., generates) a HTTP response <b>1006</b> to client browser <b>120</b>'s HTTP GET request <b>1000</b>, and transmits HTTP response <b>1006</b> to client browser <b>120</b>, similar to step S<b>704</b>.
p-0142In block <b>1007</b>, client browser <b>120</b> processes the HTML within response <b>1006</b> and executes the modified Javascript. Therefore, client browser <b>120</b> executes the re-written Math.random( ) function (in place of the original Math.random( ) function). As a result, where the unmodified Javascript when executed uses a first algorithm for random number generation (i.e., that of the Math.random( ) function), the modified Javascript when executed uses a different algorithm (i.e., that of the re-written Math.random( ) function).
p-0143<figref idrefs="DRAWINGS">FIGS. 11 and 13</figref> illustrate the insert and search/replace method for the Math.random( ) function. As previously described with respect to steps S<b>900</b>-S<b>902</b>, proxy server <b>250</b> receives communication <b>1001</b> from client proxy program <b>141</b>, sends HTTP GET request <b>1002</b> to the web server, and receives from the web server HTTP response <b>1003</b>. Javascript modifier module <b>262</b> then performs steps S<b>903</b>-S<b>904</b>, corresponding to block <b>1104</b> in <figref idrefs="DRAWINGS">FIG. 11</figref>. In this case, Javascript modifier module <b>262</b> inserts a RandomNew( ) function definition into the original Javascript code, at a position prior to any call to the Math.random( ) function. Then, Javascript modifier module <b>262</b> locates code fragments which call Math.random( ) (i.e., searches in the Javascript for Javascript function calls to the Math.random( ) function) and replaces them with calls to RandomNew( ).
p-0144This Javascript code modification is depicted in <figref idrefs="DRAWINGS">FIG. 13</figref>. <figref idrefs="DRAWINGS">FIG. 13(</figref><i>a</i>) shows original Javascript code which calls the Math.random( ) function, and <figref idrefs="DRAWINGS">FIG. 13(</figref><i>b</i>) shows modified Javascript code which inserts the RandomNew( ) function and replaces original Math.random( ) calls with RandomNew( ) calls. Accordingly, any function calls to Math.random( ) will be modified to function calls to RandomNew( ). Described in other words, at the top of the Javascript, a definition for RandomNew( ) not present in the original Javascript has been inserted, and the line RandNum=Math.random( ) from the original Javascript has been changed to RandNum=RandomNew( ) in the modified Javascript. When this line is executed by client browser <b>120</b> or virtual browser <b>270</b>, the RandomNew( ) function will be called instead of the Math.random( ) function. In other words, an algorithm used by the original Javascript for random number generation is replaced by a different algorithm.
p-0145As described with respect to step S<b>905</b>, control module <b>260</b> sends communication <b>1105</b> comprising the modified Javascript, such that it is received by client proxy program <b>141</b>. In response to communication <b>1105</b>, client proxy program <b>141</b> forms (i.e., generates) a HTTP response <b>1106</b> to HTTP GET request <b>1000</b>, and transmits HTTP response <b>1106</b> to client browser <b>120</b>, similar to step S<b>704</b>.
p-0146In block <b>1107</b>, client browser <b>120</b> processes the HTML within HTTP response <b>1106</b> and executes the modified Javascript. Therefore, client browser <b>120</b> executes the inserted RandomNew( ) function instead of the Math.random( ) function.
p-0147As seen in <figref idrefs="DRAWINGS">FIGS. 12 and 13</figref>, the custom function is executed instead of the original random number function in Javascript. In doing so, the custom function ensures that at least a first number of calls to the function will return a predictable value instead of a randomly generated value.
p-0148In the preferred embodiment, the first twenty executions of the custom function return the same predictable value. Also in the preferred embodiment, both client browser <b>120</b> and virtual browser <b>270</b> execute the same custom function, so both browsers will return the same predictable value. Thus, any requests for URL which are dependent on the returned value of the built-in random number function will be identical on both client browser <b>120</b> and virtual browser <b>270</b> (i.e., the requested URLs will be the same and thus, for example, the same advertising image will be obtained).
p-0149However, one of ordinary skill in the art will appreciate that any function or object which enables the URL requests to return identical content can be used as a replacement. For instance, the executed function or returned results can even be different between client browser <b>120</b> and virtual browser <b>270</b>, as long as the returned results coordinate with each other. An example of when the returned results coordinate with each other is when the same advertising image is obtained. Notably, even though the built-in Javascript Math.random( ) construct is a function, it can be appreciated that such function could be replaced with an object or any other appropriate programming construct type.
p-0150Ultimately, any custom function, object, or other programming construct which enables pre-fetched data from these URL requests to be used in client browser <b>120</b> can be incorporated into this feature of the present invention.
p-0151(b) Date Object
p-0152<figref idrefs="DRAWINGS">FIG. 14</figref> illustrates the re-write method for the Date object. As previously described with respect to steps S<b>900</b>-S<b>902</b>, proxy server <b>250</b> receives communication <b>1001</b> from client proxy program <b>141</b>, sends HTTP GET request <b>1002</b> to the web server, and receives from the web server HTTP response <b>1003</b>. Javascript modifier module <b>262</b> then performs steps S<b>903</b>-S<b>904</b>, corresponding to block <b>1404</b> in <figref idrefs="DRAWINGS">FIG. 14</figref>. In this case, Javascript modifier module <b>262</b> re-defines the Date object.
p-0153As described with respect to step S<b>905</b>, control module <b>260</b> sends communication <b>1405</b> comprising the modified Javascript, such that it is received by client proxy program <b>141</b>. In accordance with communication <b>1405</b>, client proxy program <b>141</b> generates a HTTP response <b>1406</b> to HTTP GET request <b>1000</b>, and transmits HTTP response <b>1406</b> to client browser <b>120</b>, similar to step S<b>704</b>.
p-0154In block <b>1407</b>, client browser <b>120</b> processes the HTML within HTTP response <b>1406</b> and executes the modified Javascript. Therefore, client browser <b>120</b> creates a custom default constructor as the Date object, and references the custom default constructor by referencing the Date object. In other words, where the original Javascript when executed uses a first algorithm that returns a chronological measurement (e.g., the date object), the modified Javascript when executed uses a different algorithm.
p-0155<figref idrefs="DRAWINGS">FIG. 15</figref> illustrates the insert and search/replace method for the Date object. As previously described with respect to steps S<b>900</b>-S<b>902</b>, proxy server <b>250</b> receives communication <b>1001</b> from client proxy program <b>141</b>, sends HTTP GET request <b>1002</b> to the web server, and receives from the web server HTTP response <b>1003</b>. Javascript modifier module <b>262</b> then performs steps S<b>903</b>-S<b>904</b>, corresponding to block <b>1504</b> in <figref idrefs="DRAWINGS">FIG. 15</figref>. In this case, Javascript modifier module <b>262</b> inserts a definition for a DateNew function to the original Javascript code. Then, Javascript modifier module <b>262</b> locates code fragments which reference the Date object's default constructor and replaces them with references to the DateNew function (i.e., search and replace).
p-0156As described with respect to step S<b>905</b>, control module <b>260</b> sends communication <b>1505</b> comprising the modified Javascript, such that it is received by client proxy program <b>141</b>. In response to communication <b>1505</b>, client proxy program <b>141</b> (i.e., generates) forms a HTTP response <b>1506</b> to HTTP GET request <b>1000</b>, and transmits HTTP response <b>1506</b> to client browser <b>120</b>, similar to step S<b>704</b>.
p-0157In block <b>1507</b>, client browser <b>120</b> processes the HTML within HTTP response <b>1506</b> and executes the modified Javascript. Therefore, client browser <b>120</b> defines a DateNew function and refers to it instead of the Date object's default constructor. Again, where the original Javascript, when executed, uses an algorithm that returns a chronological measure (e.g., the Date object), the modified Javascript, when executed, uses a different algorithm.
p-0158In both approaches for modifying the Javascript, the custom date function/object/default-constructor replaces the original Date object in Javascript. By doing so, the custom function/object/default-constructor ensures that a date value returned when executed by client browser <b>120</b> will match the value returned when executed by virtual browser <b>270</b>, even if clocks of client PC <b>110</b> and proxy server <b>250</b> are not perfectly synchronized or different time zones are used.
p-0159In the preferred embodiment, the replacement custom function/object/default-constructor retrieves the current date and time, but modifies at least one field of the date/time value, such that the date/time values between execution by client browser <b>120</b> and by virtual browser <b>270</b> are identical. In the preferred embodiment, the replacement function/object/default-constructor takes the current date/time and rounds the minutes field of the value down to a three-minute interval. Additionally, the replacement function/object/default-constructor sets the seconds and milliseconds fields of the date/time value to fixed non-zero values.
p-0160For instance, a date/time value with a time of “10:55:32 and 333 millisecs” would be rounded down to “10:54:01 and 19 millisecs”, and a date/time value with a time of “10:57:10 and 425 millisecs” would be rounded down to “10:57:01 and 19 millisecs”. That is, the minutes field is rounded down to the nearest three-minute interval, the seconds field is set to “01”, and the milliseconds field is set to “19”.
p-0161Thus, as with the random number function modification feature, any request for a URL which is dependent on a date/time value will be identical on both client browser <b>120</b> and virtual browser <b>270</b>. Additionally, control module <b>260</b> controls virtual browser <b>270</b> such that the date/time values are identical, even when proxy server <b>250</b> and client sub-system <b>100</b> are located in different timezones. Control module <b>260</b> may accomplish this by, for example, retrieving the timezone information of client browser <b>120</b>, as discussed in greater detail below. Then, control module <b>260</b> can set virtual browser <b>270</b> to the same timezone. Or, a date/time value can be calculated according to a pre-determined timezone offset between client browser <b>120</b> and virtual browser <b>270</b>. Alternatively, the date/time value could also be generated according to a pre-defined timezone (e.g., GMT) on both client browser <b>120</b> and virtual browser <b>270</b>. In the end, since the date/time values are identical, URLs generated using the date/time values will also be identical, and therefore the images obtained from those URLs can also be identical.
p-0162However, one of ordinary skill in the art will appreciate that any function or object which enables the URL requests to return identical content can be used as a replacement. For instance, the custom functions/objects/default-constructors or returned results can even be different between client browser <b>120</b> and virtual browser <b>270</b>, as long as the returned date/time results coordinate with each other. An example of when the returned results coordinate with each other is when the same advertising image is obtained. Notably, even though the built-in Javascript Date construct is an object, it can be appreciated that such object could be replaced with a function or any other appropriate programming construct type.
p-0163Ultimately, any custom object, function, or other programming construct which enables pre-fetched data from these URL requests to be used in client browser <b>120</b> can be incorporated into this feature of the present invention.
p-0164This feature of the present invention is also not limited to the aforementioned built-in Javascript random number function and date/time object. This feature can be extended or applied to any function, object, or other programming construct which benefits from modification and/or replacement.
(4) Browser Specifics Feature
p-0165Another feature of the present invention relates to the capture of browser specific information of the client browser. This feature ensures that characteristics of virtual browser <b>270</b> match that of client browser <b>120</b>, so that URLs that are requested by client browser <b>120</b> upon execution of Javascript match the URLs that virtual browser <b>270</b> requests, in the case that the URLs depend upon browser-specific information.
p-0166In certain circumstances, Javascript creates URLs that depend on the individual browser specific information. This information may include, by way example and not of limitation, characteristics of a browser such as the height or width of the browser (i.e., a window of the browser), the maximum height or width of the browser (i.e., a window of the browser), a color depth, a pixel depth, a timezone, a Java-enabled query result, a browser history characteristic of a web browser, a browser identity, a browser version, a browser compatibility, installed browser plugins, other window geometry, etc.
p-0167For instance, a web page may contain Javascript which determines the browser window height and width and decides whether to request a large high-resolution version of an image or alternatively, a smaller low-resolution version. If the web page is being loaded on a client PC is a netbook or other device having a small screen, then the low-resolution version may be preferred. On the other hand, if the web page is being loaded on a desktop with a large monitor, then the high-resolution version is preferred.
p-0168Also, a web page may contain Javascript which determines whether the browser has a Adobe Flash plugin installed. If the Flash plugin is installed, Flash-enabled content may be preferred. On the other hand, if the Flash plugin is not installed, non-Flash-enabled content is preferred.
p-0169Synchronization of specific information of client browser <b>120</b> with virtual browser <b>270</b> is important in the present invention in order for the Javascript executed between the two browsers to perform identically. For instance, if different URLs are formed by the executed Javascript between client browser <b>120</b> and virtual browser <b>270</b>, then the pre-fetched content by virtual browser <b>270</b> is unsuitable for client browser <b>120</b>, as the URLs do not match. Accordingly, providing virtual browser <b>270</b> with the browser specifics of client browser <b>120</b> ensures that the same URLs are created by executed Javascript in both virtual browser <b>270</b> and client browser <b>120</b>.
p-0170<figref idrefs="DRAWINGS">FIGS. 16 and 17</figref> describe this browser specifics feature of the present invention. <figref idrefs="DRAWINGS">FIG. 16</figref> illustrates the communications between the various components for this feature. <figref idrefs="DRAWINGS">FIG. 17</figref> describes the operation of client browser <b>120</b>, client proxy program <b>141</b>, and proxy server <b>250</b> in transferring client browser specifics information.
p-0171In step S<b>1700</b>, client browser <b>120</b> requests a URL, similar to step S<b>700</b>. Again, the request is usually by a user of client PC <b>110</b> requesting the URL.
p-0172In step S<b>1701</b>, client browser <b>120</b> forms a HTTP GET request <b>1600</b> for the URL and sends it (via a network connection) according to the network settings in TCP/IP stack <b>121</b>, similar to step S<b>701</b>.
p-0173In step S<b>1702</b>, client proxy program <b>141</b> intercepts request <b>1600</b> and relays the request to ISP sub-system <b>200</b> as communication <b>1601</b>, similar to step S<b>702</b>.
p-0174In step S<b>1703</b>, proxy server <b>250</b> forms its own HTTP GET request <b>1602</b> for the same URL, similar to step S<b>601</b>.
p-0175In step S<b>1704</b>, proxy server <b>250</b> receives HTTP response <b>1603</b> (that was generated and sent by the web server), similar to step S<b>602</b>.
p-0176In step S<b>1705</b>, proxy server <b>250</b> modifies Javascript in the HTML document within HTTP response <b>1603</b>, as seen in block <b>1604</b> in <figref idrefs="DRAWINGS">FIG. 16</figref>. Specifically, control module <b>260</b> instructs Javascript modifier module <b>262</b> to insert Javascript code into the HTML document. The inserted Javascript code, when executed on a web browser, will extracts browser specifics information from that browser. Again, this information may include a height, a width, a maximum height or width, a color depth, a pixel depth, a timezone, a Java-enabled query result, or a browser history characteristic of the web browser. However, the information could also include any other information regarding the web browser, its underlying device, or any other specific information.
p-0177Note that unlike many other instances in this description where both proxy server <b>250</b> and client PC execute the same Javascript, here there is no need for proxy server <b>250</b> to execute the inserted Javascript since it is intended for client browser <b>120</b>. Thus, proxy server <b>250</b> may ignore, skip, or otherwise not execute the inserted Javascript.
p-0178In the preferred embodiment, the executed Javascript code, after extracting the browser specific information, encodes the information into a specific URL. Thus, a web browser such as client browser <b>120</b>, upon executing the Javascript, requests the specific URL.
p-0179In step S<b>1706</b>, control module <b>260</b> sends a communication <b>1605</b> containing HTML to client proxy program <b>141</b>. However, instead of the HTML containing the original Javascript, as in step S<b>603</b>, the HTML in communication <b>1605</b> contains the modified Javascript.
p-0180In step S<b>1707</b>, client proxy program <b>141</b> receives communication <b>1605</b>. In accordance therewith, client proxy program <b>141</b> forms a HTTP response <b>1606</b> which contains the HTML document and transmits it to client browser <b>120</b>, similar to step S<b>704</b>. In this case though, the HTML document includes the modified Javascript.
p-0181In step S<b>1708</b>, client browser <b>120</b> processes the HTML document, including executing the modified Javascript in the HTML document, as seen in block <b>1607</b> in <figref idrefs="DRAWINGS">FIG. 16</figref>. The modified Javascript, when executed, accumulates the browser specific information.
p-0182The obtained information preferably includes information inside the Javascript Document Object Model (DOM) within client browser <b>120</b>. The information to be gathered may include:
p-0183<tables id="TABLE-US-00001" num="00001"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="2"><colspec colname="1" colwidth="105pt" align="left" /><colspec colname="2" colwidth="112pt" align="left" /><thead><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row><row><entry>Browser Specific Information</entry><entry>Javascript variable/property</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry>Screen height</entry><entry>window.screen.availHeight</entry></row><row><entry>Screen width</entry><entry>window.screen.availWidth</entry></row><row><entry>Browser window height</entry><entry>window.innerHeight</entry></row><row><entry>Browser window width</entry><entry>window.innerWidth</entry></row><row><entry>Browser has Java enabled?</entry><entry>window.navigator.javaEnabled( )</entry></row><row><entry>Color depth</entry><entry>window.screen.colorDepth</entry></row><row><entry>Pixel depth</entry><entry>window.screen.pixelDepth</entry></row><row><entry>Timezone</entry><entry>Date( ).getTimezoneOffset( )</entry></row><row><entry>Length of browser history</entry><entry>window.history.length</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables><br /> However, the foregoing list is non-inclusive, and any other information can be included.
p-0184Further in step S<b>1708</b>, the modified Javascript, upon accumulating this information, forms a URL having the information embedded within. For example, the modified Javascript may concatenate the results into a string and append the string to a URL to be retrieved from a predetermined and unique hostname. An example of a URL to be requested might be “http://www.forstatspurposesonly.com/browserspecifics-availWidth1024-availHeight768”. As can be seen, this URL communicates an available width and height of 1024×768. Client browser <b>120</b> also requests the URL using a HTTP GET request <b>1608</b>. Since TCP/IP stack <b>121</b> is configured to route Internet communications through router <b>130</b>, request <b>1608</b> is received by router <b>130</b>.
p-0185For simplicity, only the browser width and height is shown in <figref idrefs="DRAWINGS">FIG. 16</figref>. As seen in <figref idrefs="DRAWINGS">FIG. 16</figref>, client browser <b>120</b> executes the modified Javascript and as a result determines that the browser width is 800 pixels and the browser height is 600 pixels. The modified Javascript is further configured to form a URL with a particular host (e.g., IP address 1.1.1.1 in <figref idrefs="DRAWINGS">FIG. 16</figref>). The modified Javascript then appends the information as the path for the URL such that the information can be easily decoded from the URL. In <figref idrefs="DRAWINGS">FIG. 16</figref>, this is accomplished using the path “/800-600.html” (i.e., the URL contains the width and height and thus is a function of window geometry). However, one of ordinary skill in the art would understand that any other construction of URLs could also be applied.
p-0186In step S<b>1709</b>, client proxy program <b>141</b> intercepts HTTP GET request <b>1608</b>. Client proxy program <b>141</b> recognizes from the format of the URL within request <b>1608</b> that the URL corresponds to client browser specific information. Client proxy program <b>141</b> extracts the client browser specific information from the URL.
p-0187Note that client proxy program <b>141</b> preferably does not send the HTTP GET request <b>1608</b> to the Internet since there is no need to do so; indeed, the host name in the request could even be fictitious because the HTTP GET request is merely a vehicle to communicate the browser specific information to client proxy program <b>141</b>. However, in the preferred embodiment, client proxy program <b>141</b> returns a HTTP response (e.g., 404 not found error) to this HTTP GET request to client browser <b>120</b>, so that this request does not remain pending in client browser <b>120</b>.
p-0188In step S<b>1710</b>, client proxy program <b>141</b> sends the client browser specific information, in communication <b>1609</b>, to proxy server <b>250</b>. As previously noted, the preferred embodiment preferably utilizes a proprietary network protocol format, but any format capable of effectively transmitting the information can be used.
p-0189In the preferred embodiment, the specific information is sent only if it is new or has been modified. If the specific information matches that of the previously-sent information, re-sending of this identical information is not required and is thus not performed. However, the specific information may alternatively be sent to proxy server <b>250</b> in every instance.
p-0190In step S<b>1711</b>, proxy server <b>250</b> receives communication <b>1609</b>. Upon receiving communication <b>1609</b>, control module <b>260</b> stores the client browser specific information, as seen in block <b>1610</b> in <figref idrefs="DRAWINGS">FIG. 16</figref>. Control module <b>260</b> then ensures that any further Javascript executed by virtual browser <b>270</b> which retrieves or otherwise uses browser specific information returns (i.e., uses) the stored browser specific information of client browser <b>120</b>.
p-0191Control module <b>260</b> may accomplish this in one of numerous ways. In one approach, control module <b>260</b> may configure Javascript modifier module <b>262</b> to insert Javascript into future received HTML documents for virtual browser <b>270</b>, whereby the inserted Javascript overwrites virtual browser's <b>270</b> browser specific information.
p-0192As another approach, control module <b>260</b> may configure Javascript modifier module <b>262</b> to modify the original Javascript so that all references to function calls to browser specific information are changed to the static value of the stored client browser specific information. For instance, if the stored client browser screen height value is 600, Javascript modifier module <b>262</b> replaces the Javascript code “x=window.screen.availHeight” with “x=600”.
p-0193Accordingly, in step S<b>1712</b>, when virtual browser <b>270</b> later receives an HTML document for processing for virtual display, any URLs generated from Javascript execution, which are dependent on browser specifics information, will match URLs generated when client browser <b>120</b> also executes the Javascript.
p-0194Instead of encoding the client browser specific information in a URL associated with a HTTP GET request, the modified Javascript may alternatively encode the information using another format. For example, the modified Javascript may place the client browser specific information within a HTTP PUT request, a HTTP POST request, or a cookie. Like the URL method, client browser <b>120</b> transmits the request or cookie (e.g., via HTTP), which is then intercepted by client proxy program <b>141</b>.
p-0195As another alternative, proxy server <b>250</b>, instead of client proxy program <b>141</b>, may perform the interception and decoding of communications containing embedded client browser specific information.
p-0196In the end, any particular technique for conveying client browser specific information may be employed as long as it is ultimately received by proxy server <b>250</b>.
(5) Cookie Tracking Feature
p-0197Another feature of the present invention relates to the synchronization of cookies between client sub-system <b>100</b> and ISP sub-system <b>200</b>. This feature allows a close representation of client browser's <b>120</b> cookies to be replicated in virtual browser <b>270</b>. Using this feature, any URLs which depend on client browser's <b>120</b> stored cookies are accurately replicated in virtual browser <b>270</b>.
p-0198<figref idrefs="DRAWINGS">FIGS. 18 through 21</figref> describe this cookie tracking feature of the present invention. <figref idrefs="DRAWINGS">FIG. 18</figref> illustrates the communications between the various components for this feature. <figref idrefs="DRAWINGS">FIG. 19</figref> describes the operation of client proxy program <b>141</b> and proxy server <b>250</b> for this feature, when client proxy program <b>141</b> does not contain promised or pre-fetched data. <figref idrefs="DRAWINGS">FIG. 20</figref> describes the operation of proxy server <b>250</b> when it receives a HTTP request from virtual browser <b>270</b>. <figref idrefs="DRAWINGS">FIG. 21</figref> describes the operation of client proxy program <b>141</b> and proxy server <b>250</b> for this feature, when client proxy program <b>141</b> contains promised or pre-fetched data.
p-0199This feature is accomplished by client proxy program <b>141</b> and/or proxy server <b>250</b> inspecting all HTTP GET requests from client browser <b>120</b> and all HTTP responses to client browser <b>120</b>. In the inspection process, client proxy program <b>141</b> and/or proxy server <b>250</b> monitor the “COOKIE” fields of HTTP GET requests, and monitor the “SET-COOKIE” fields of HTTP responses. In the preferred embodiment, client proxy program <b>141</b> performs the inspection and monitoring steps, and sends any updated conclusions about cookies to proxy server <b>250</b> to update the contents within cookie tracker module <b>261</b>.
p-0200The cookie tracking feature of the present invention will next be described with respect to the steps of <figref idrefs="DRAWINGS">FIG. 19</figref> in relation to the communications and processes depicted in <figref idrefs="DRAWINGS">FIG. 18</figref>. In <figref idrefs="DRAWINGS">FIG. 18</figref>, communications <b>1800</b>, <b>1802</b>-<b>1805</b>, <b>1807</b>-<b>1809</b>, <b>1811</b>-<b>1815</b> and <b>1817</b>, and blocks <b>1801</b> and <b>1806</b> demonstrate an instance when client browser <b>120</b> does not have an existing cookie for the URL, but where a new cookie is attached to the HTTP response. Communications <b>1811</b>-<b>1815</b> and <b>1817</b>, and blocks <b>1810</b> and <b>1816</b> demonstrate an instance where client browser <b>120</b> has an existing cookie and attaches it to a HTTP GET request.
p-0201The instance when client browser <b>120</b> does not have an existing cookie for the URL will first be discussed, with references to communications <b>1800</b>, <b>1802</b>-<b>1805</b>, <b>1807</b>-<b>1809</b>, <b>1811</b>-<b>1815</b> and <b>1817</b>, and blocks <b>1801</b> and <b>1806</b> in <figref idrefs="DRAWINGS">FIG. 18</figref>.
p-0202In step S<b>1900</b>, client browser <b>120</b> requests a URL, similar to step S<b>700</b>. Again, the request is usually by a user of client PC <b>110</b> requesting the URL.
p-0203In step S<b>1901</b>, client browser <b>120</b> forms a HTTP GET request <b>1800</b> for the URL and sends it (via a network connection) according to the network settings in TCP/IP stack <b>121</b>, similar to step S<b>701</b>. Client browser <b>120</b> does not hold an existing cookie for webserver1.com, so request <b>1800</b> does not contain a COOKIE field.
p-0204In step S<b>1902</b>, client proxy program <b>141</b> intercepts request <b>1800</b>. Client proxy program <b>141</b> checks request <b>1800</b> to determine if the request contains a COOKIE field, and compares it against existing conclusions it has previously made regarding the cookies stored within client browser <b>120</b>. The cookie conclusions are data relating to cookies believed to be stored within client browser <b>120</b>. The conclusions may include information on whether a cookie exists, whether a cookie has been deleted, an expiration date and time of a cookie, the domain of the cookie, the path of the cookie, or any other cookie attribute. Conclusions about a cookie may involve a level of speculation on attributes of the cookie. For instance, if a previously unknown cookie is discovered and the domain and path of the cookie cannot be directly ascertained, client proxy program <b>141</b> may presume that the domain is the broad domain of the hostname, and that the path is the universal path (“/”).
p-0205In step S<b>1903</b>, client proxy program <b>141</b> determines whether its existing conclusion about one or more cookies believed to be stored within client browser <b>120</b> has been changed, based on request <b>1800</b>. Referring to <figref idrefs="DRAWINGS">FIG. 18</figref>, client proxy program <b>141</b> does not modify its cookie conclusions for webserver1.com. Steps S<b>1902</b> and S<b>1903</b> are collectively depicted as block <b>1801</b> in <figref idrefs="DRAWINGS">FIG. 18</figref> for the instance of webserver1.com.
p-0206In step S<b>1904</b>, client proxy program <b>141</b> sends a communication containing updated conclusions about stored cookies to proxy server <b>250</b>, if an updated conclusion is decided. In the instance of webserver1.com, no conclusion was updated, so no communication is sent.
p-0207In step S<b>1905</b>, proxy server <b>250</b> receives the updated cookie conclusions, if sent by client proxy program <b>141</b> in step S<b>1904</b>, and stores the updated cookie information in cookie tracker module <b>261</b>.
p-0208In step S<b>1906</b>, client proxy program <b>141</b> relays request <b>1800</b> to ISP sub-system <b>200</b> as communication <b>1802</b>.
p-0209In step S<b>1907</b>, proxy server <b>250</b> forms (i.e., generates) its own HTTP GET request <b>1803</b> for the same URL as HTTP GET request <b>1800</b>, similar to step S<b>601</b>.
p-0210In step S<b>1908</b>, proxy server <b>250</b> receives HTTP response <b>1804</b> from the web server, similar to step S<b>602</b>. In this case, response <b>1803</b> contains a SET-COOKIE field with cookie information.
p-0211In step S<b>1909</b>, proxy server <b>250</b> sends a communication <b>1805</b> including the contents of HTTP response <b>1804</b> to client proxy program <b>141</b>.
p-0212In step S<b>1910</b>, client proxy program <b>141</b> checks the contents of HTTP response within communication <b>1805</b> to determine if the response contains a SET-COOKIE field, and compares it against existing conclusions it has previously made regarding the cookies stored within client browser <b>120</b>, in a similar manner to step S<b>1902</b>.
p-0213In step S<b>1911</b>, client proxy program <b>141</b> determines whether its existing conclusion about one or more cookies believed to be stored within client browser <b>120</b> or to be imminently stored within client browser <b>120</b> will be changed, based on HTTP response <b>1804</b>, in a similar manner to step S<b>1903</b>. This may commonly occur if the HTTP response contains a SET-COOKIE field, as seen HTTP response <b>1804</b> in <figref idrefs="DRAWINGS">FIG. 18</figref>. Referring to <figref idrefs="DRAWINGS">FIG. 18</figref>, client proxy program <b>141</b> modifies its cookie conclusions for webserver1.com, based on the HTTP responses. Steps S<b>1910</b> and S<b>1911</b> are collectively depicted as block <b>1806</b> in <figref idrefs="DRAWINGS">FIG. 18</figref> for the instance of webserver1.com.
p-0214In step S<b>1912</b>, client proxy program <b>141</b> sends a communication containing updated conclusions about stored cookies to proxy server <b>250</b>, as seen in communication <b>1808</b> for webserver1.com.
p-0215In step S<b>1913</b>, proxy server <b>250</b> receives the updated cookie conclusions, if sent by client proxy program <b>141</b> in step S<b>1912</b>, and stores the updated cookie information in cookie tracker module <b>261</b>.
p-0216In step S<b>1914</b>, client proxy program <b>141</b> forms a HTTP response <b>1807</b> which contains the HTML document from the HTTP response <b>1804</b> and forwards the HTTP response <b>1807</b> to client browser <b>120</b>, similar to step S<b>704</b>.
p-0217The instance when client browser <b>120</b> has an existing cookie for the URL will next be discussed, with references to communications <b>1811</b>-<b>1815</b> and <b>1817</b>, and blocks <b>1810</b> and <b>1816</b> in <figref idrefs="DRAWINGS">FIG. 18</figref>.
p-0218In step S<b>1900</b>, client browser <b>120</b> requests a URL, similar to step S<b>700</b>. Again, the request is usually by a user of client PC <b>110</b> requesting the URL.
p-0219In step S<b>1901</b>, client browser <b>120</b> forms a HTTP GET request <b>1809</b> for the URL and sends it (via a network connection) according to the network settings in TCP/IP stack <b>121</b>, similar to step S<b>701</b>. Client browser <b>120</b> holds an existing cookie for webserver2.com, so request <b>1809</b> contains a COOKIE field.
p-0220In step S<b>1902</b>, client proxy program <b>141</b> intercepts request <b>1809</b>. Client proxy program <b>141</b> checks request <b>1809</b> to determine if the request contains a COOKIE field, and compares it against existing conclusions it has previously made regarding the cookies stored within client browser <b>120</b>. The cookie conclusions are data relating to cookies believed to be stored within client browser <b>120</b>. The conclusions may include information on whether a cookie exists, whether a cookie has been deleted, an expiration date and time of a cookie, the domain of the cookie, the path of the cookie, or any other cookie attribute. Conclusions about a cookie may involve a level of speculation on attributes of the cookie. For instance, if a previously unknown cookie is discovered and the domain and path of the cookie cannot be directly ascertained, client proxy program <b>141</b> may presume that the domain is the broad domain of the hostname, and that the path is the universal path (“/”).
p-0221In step S<b>1903</b>, client proxy program <b>141</b> determines whether its existing conclusion about one or more cookies believed to be stored within client browser <b>120</b> has been changed, based on request <b>1809</b>. This may commonly occur if request <b>1809</b> contains a COOKIE field that holds a new cookie previously unknown to client proxy program <b>141</b>, as seen in request <b>1809</b>. Referring to <figref idrefs="DRAWINGS">FIG. 18</figref>, client proxy program <b>141</b> modifies its cookie conclusions for webserver2.com, based on the HTTP GET requests. Steps S<b>1902</b> and S<b>1903</b> are collectively depicted as blocks <b>1810</b> in <figref idrefs="DRAWINGS">FIG. 18</figref> for the instance of webserver2.com.
p-0222In step S<b>1904</b>, client proxy program <b>141</b> sends a communication containing updated conclusions about stored cookies to proxy server <b>250</b>, as seen in communication <b>1811</b> for webserver2.com.
p-0223In step S<b>1905</b>, proxy server <b>250</b> receives the updated cookie conclusions, if sent by client proxy program <b>141</b> in step S<b>1904</b>, and stores the updated cookie information in cookie tracker module <b>261</b>.
p-0224In step S<b>1906</b>, client proxy program <b>141</b> relays request <b>1809</b> to ISP sub-system <b>200</b> as communication <b>1812</b>.
p-0225In step S<b>1907</b>, proxy server <b>250</b> forms (i.e., generates) its own HTTP GET request <b>1813</b> for the same URL as HTTP GET request <b>1809</b>, similar to step S<b>601</b>.
p-0226In step S<b>1908</b>, proxy server <b>250</b> receives HTTP response <b>1814</b> from the web server, similar to step S<b>602</b>. In this case, response <b>1814</b> does not contain a SET-COOKIE field with cookie information.
p-0227In step S<b>1909</b>, proxy server <b>250</b> sends a communication <b>1815</b> including the contents of HTTP response <b>1814</b> to client proxy program <b>141</b>.
p-0228In step S<b>1910</b>, client proxy program <b>141</b> checks the contents of HTTP response within communication <b>1815</b> to determine if the response contains a SET-COOKIE field, and compares it against existing conclusions it has previously made regarding the cookies stored within client browser <b>120</b>, in a similar manner to step S<b>1902</b>.
p-0229In step S<b>1911</b>, client proxy program <b>141</b> determines whether its existing conclusion about one or more cookies believed to be stored within client browser <b>120</b> or to be imminently stored within client browser <b>120</b> will be changed, based on HTTP response <b>1814</b>, in a similar manner to step S<b>1903</b>. This may commonly occur if the HTTP response contains a SET-COOKIE field. Referring to <figref idrefs="DRAWINGS">FIG. 18</figref>, client proxy program <b>141</b> does not modify its cookie conclusions for webserver2.com. Steps S<b>1910</b> and S<b>1911</b> are collectively depicted as block <b>1806</b> in <figref idrefs="DRAWINGS">FIG. 18</figref> in the instance of webserver2.com.
p-0230In step S<b>1912</b>, client proxy program <b>141</b> sends a communication containing updated conclusions about stored cookies to proxy server <b>250</b>, if an updated conclusion is decided. In the instance of webserver2.com, no conclusion was updated, so no communication is sent.
p-0231In step S<b>1913</b>, proxy server <b>250</b> receives the updated cookie conclusions, if sent by client proxy program <b>141</b> in step S<b>1912</b>, and stores the updated cookie information in cookie tracker module <b>261</b>.
p-0232In step S<b>1914</b>, client proxy program <b>141</b> forms a HTTP response <b>1817</b> which contains the HTML document from the HTTP response <b>1814</b> and forwards the HTTP response <b>1817</b> to client browser <b>120</b>, similar to step S<b>704</b>.
p-0233The operation of proxy server <b>250</b> will now be described with respect to <figref idrefs="DRAWINGS">FIG. 20</figref>. The steps in <figref idrefs="DRAWINGS">FIG. 20</figref> depict the pre-fetching operation of the present invention, when utilizing the cookie tracking feature of the present invention. These steps are executed as the pre-fetching operation is initiated and virtual browser <b>270</b> generates a request for an additional URL for pre-fetching.
p-0234In Step S<b>2000</b>, virtual browser <b>270</b>, while processing an HTML document for a URL, produces a request for an additional URL, and thus forms a HTTP GET request for the additional URL.
p-0235In step S<b>2001</b>, control module <b>260</b> intercepts the request for the additional URL.
p-0236In step S<b>2002</b>, control module <b>260</b> analyzes the cookie information within the HTTP GET request. Control module <b>260</b> accesses the stored cookies within cookie tracker module <b>261</b> to determine whether the HTTP GET request would contain a cookie field if it were sent by client browser <b>120</b>. If control module <b>260</b> determines that a cookie would have been attached to the request if sent by client browser <b>120</b>, it updates the cookie information within the HTTP GET request with the cookie information stored in the cookie tracker module <b>261</b>. In the preferred embodiment, control module <b>260</b> modifies only the first HTTP GET request for a specific host within a web page to be loaded. Since cookies may be further modified with SET-COOKIE fields within the web page or with Javascript execution, the modification of only the first HTTP GET request for a specific host ensures that the further cookie modifications within the web page are properly executed.
p-0237In step S<b>2003</b>, control module <b>260</b> sends the updated HTTP GET request, which contains the updated cookies, to the appropriate web server, similar to step S<b>605</b>.
p-0238In step S<b>2004</b>, control module <b>260</b> sends a pre-fetch notification (“promise”) to client proxy program <b>141</b>, informing client proxy program <b>141</b> that proxy server <b>250</b> has started the process of pre-fetching content for the additional URL. This step is similar to step S<b>606</b>.
p-0239In step S<b>2005</b>, control module <b>260</b> receives the HTTP response to the updated HTTP GET request, similar to step S<b>607</b>.
p-0240In step S<b>2006</b>, control module <b>260</b> modifies the HTTP response to produce a modified HTTP response that is forwarded to virtual browser <b>270</b>. The modified HTTP response contains a SET-COOKIE field, which will update and correct any inconsistencies of stored cookies within cookie storage module <b>271</b> of virtual browser <b>270</b>. For instance, if a cookie should be added to cookie storage module <b>271</b> within virtual browser <b>270</b>, a SET-COOKIE field will be added which contains such cookie information. On the other hand, if a cookie is to be deleted within virtual browser <b>270</b>, a SET-COOKIE field with already-expired expiration attributes is added to the HTTP response. In the preferred embodiment, control module <b>260</b> modifies only the first HTTP response for a specific host within a web page to be loaded. Since cookies may be further modified with SET-COOKIE fields within the web page or with Javascript execution, the modification of only the first HTTP response for a specific host ensures that the further cookie modifications within the web page are properly executed.
p-0241In step S<b>2007</b>, control module <b>260</b> forwards the modified HTTP response to virtual browser <b>270</b> such that virtual browser <b>270</b> can process the information within as if for virtual display.
p-0242In step S<b>2008</b>, control module <b>260</b> forwards the original, unmodified HTTP response to client proxy program <b>141</b>. Since the objective is for proxy server <b>250</b> to replicate the cookies within client browser <b>120</b>, the cookies are already stored within client browser <b>120</b>. Accordingly, no cookie modification is required for client browser <b>120</b>.
p-0243By performing these steps of <figref idrefs="DRAWINGS">FIG. 20</figref>, control module <b>260</b> corrects inconsistencies within virtual browser <b>270</b> relating to its cookie storage module <b>271</b> so that the cookie storage module <b>271</b> in virtual browser <b>270</b> is maintained as close as possible to the cookies within client browser <b>120</b>.
p-0244The operation of the cookie tracking feature of the present invention, in an instance when client proxy program <b>141</b> contains promised or pre-fetched data, will now be described with respect to <figref idrefs="DRAWINGS">FIG. 21</figref>.
p-0245In step S<b>2100</b>, client browser <b>120</b> forms a HTTP GET request for an additional URL, similar to step S<b>706</b>. The additional URL corresponds to additional content required for displaying the desired web page in client browser <b>120</b>.
p-0246In step S<b>2101</b>, client browser <b>120</b> forwards the HTTP GET request to client proxy program <b>141</b>, similar to step S<b>707</b>.
p-0247In step S<b>2102</b>, client proxy program <b>141</b> checks whether the URL corresponds to promised or pre-fetched data, similar to step S<b>711</b>. If the URL does not correspond to such data, client proxy program <b>141</b> proceeds as if no pre-fetched data exists or is forthcoming, using the steps of <figref idrefs="DRAWINGS">FIG. 19</figref>. That is, client proxy program <b>141</b> treats the HTTP GET request as if it were a new, separate URL. If the URL corresponds to promised or pre-fetched data, client proxy program <b>141</b> proceeds to step S<b>2103</b>, after promised data has been received as pre-fetched data.
p-0248In step S<b>2103</b>, client proxy program <b>141</b> compares any cookies in the HTTP GET request for the additional URL with cookies that were used by proxy server <b>250</b> to obtain the pre-fetched data. This cookie information is preferably attached with the pre-fetched data as the data is sent by proxy server <b>250</b> to client proxy program <b>141</b>.
p-0249In step S<b>2104</b>, client proxy program <b>141</b> checks whether the cookies match between the HTTP GET request and the cookies used for pre-fetching. A cookie match indicates that the pre-fetched data is identical to data that would be returned if client browser <b>120</b> had made the request directly to the web server. In the preferred embodiment, a match is satisfied when the cookies in the HTTP GET request are a subset of the cookies used for pre-fetching, and that the values of the cookies in the HTTP GET request match the values of the cookies used for pre-fetching. However, a match is acceptable even if additional cookies or values within the pre-fetching set of cookies are present. That is, the cookies match even if the cookies used for pre-fetching contain additional information (e.g., additional cookies or fields) not present in the cookies in the HTTP GET request.
p-0250In other words, a match is acceptable even if additional cookies within the prefetching set of cookies are present. In this context additional cookies means additional names where a cookie is a name/value pair. That is, the cookies match even if the cookies used for prefetching contain additional cookies (name/value pairs) provided that the prefetch request had the same name/value pairs for each of the client browser's cookie name/value pairs. For example, assume that the client proxy receives a prefetched image along with three cookies. If an HTTP GET request generated by the client apparatus's web browser has two cookies whose name/value pairs match two of those three cookies, then the client proxy concludes that a match is present and that the prefetched image is usable to fulfill the HTTP GET request.
p-0251If the cookies do not match, the pre-fetched data may not correspond to the actual data that would be returned. Accordingly, client proxy program <b>141</b> cannot rely on the pre-fetched data, and thus proceeds as if no pre-fetched data exists, according to the steps of <figref idrefs="DRAWINGS">FIG. 19</figref>.
p-0252If the cookies match, client proxy program <b>141</b> proceeds to step S<b>2105</b>.
p-0253In step S<b>2105</b>, client proxy program <b>141</b> checks the contents of the pre-fetched data to determine if the response contains a SET-COOKIE field, and compares it against existing conclusions it has previously made regarding the cookies stored within client browser <b>120</b>, similar to step S<b>1910</b>.
p-0254In step S<b>2106</b>, client proxy program <b>141</b> determines whether its existing conclusion about one or more cookies believed to be stored within client browser <b>120</b> or will be imminently stored within client browser <b>120</b> will be changed, based on the pre-fetched data, similar to step S<b>1911</b>.
p-0255If a conclusion has changed, then client proxy program <b>141</b> proceeds to step S<b>2107</b>, which sends the updated conclusion to proxy server <b>250</b>, similar to step S<b>1912</b>.
p-0256In step S<b>2108</b>, proxy server <b>250</b> receives the updated cookie conclusions and stores the updated cookie information in cookie tracker module <b>261</b>.
p-0257In step S<b>2109</b>, client proxy program <b>141</b> forwards the pre-fetched data to client browser <b>120</b> as a HTTP response, similar to step S<b>712</b>. As such, client browser <b>120</b> receives the accurate content corresponding to the additional URL.
p-0258As seen in <figref idrefs="DRAWINGS">FIGS. 18-21</figref>, this cookie tracking feature allows virtual browser <b>270</b> to access equivalent cookies as client browser <b>120</b>, thereby allowing more pre-fetched content from the pre-fetch operation of proxy server <b>250</b> to be matched, and thus suitably provided to client browser <b>120</b>.
p-0259While the above preferred embodiment uses client proxy program <b>141</b> to track cookies, it can also be appreciated that proxy server <b>250</b> alone or a combination of client proxy program <b>141</b> and proxy server <b>250</b> can be used to implement this feature of the present invention.
p-0260Preferably, both client proxy program <b>141</b> and control module <b>260</b> perform cookie tracking.
p-0261More detail about the above-discussed cookie tracking carried out by the preferred embodiment will now be discussed. A cookie, as far as cookie tracking purposes is concerned, has the following attributes: (1) Name—a string; (2) Value—a string; (3) Domain—e.g. “.google.com”; (4) Path—a file path, e.g. “/” or “/downloads/recent”; and (5) Expiration—a date and time (or on session end).
p-0262A cookie can be placed into a browser via: (1) HTTP response header SET-COOKIE field—this provides all of the above attributes; (2) Javascript—this provides all of the above attributes, but cannot be observed by watching network activity; or (3) via either of the above mechanisms at a time when the browser's networking activity cannot be observed (e.g. when a laptop is moved and accesses the Internet via some other network).
p-0263A cookie appears in an HTTP request header's COOKIE field, but only the Name and Value attributes appear. The Domain, Path and Expiration cannot be directly determined from the HTTP request header's COOKIE field.
p-0264A cookie may be removed from a browser via: (1) HTTP response header SET-COOKIE field with an already expired expiration attribute; (2) Javascript; (3) the browser user explicitly commanding the browser to delete one or more cookies; or (4) the browser being restarted (which removes all cookies with a session end expiration attribute).
p-0265Cookie tracking involves observing all HTTP transactions (HTTP request headers and HTTP response headers) coming from a browser. The output of cookie tracking is the estimate of each tracked cookie's attributes. An output is provided when a given cookie is first found to exist, when a given cookie has been determined to be deleted and when the estimated value of one or more attributes has changed. The name and the value are typically known exactly. The domain, path and expiration are just estimated by cookie tracking when a cookie has only been observed in HTTP request header COOKIE fields, not in an HTTP response SET-COOKIE field.
p-0266Cookie tracking makes the usually valid assumption that a cookie is uniquely identified by name and by the overall domain (e.g. .google.com) with which it is associated.
p-0267Cookie tracking of HTTP response headers involves merely scanning for SET-COOKIE fields. When such a field is found, the expiration attribute is examined. The cookie is deleted (if present in the tracker's database) when the SET-COOKIE expiration attribute is already expired. Otherwise, the cookie is created within the tracker's data base with confirmed attribute settings if it is not already present. The cookie is updated with the SET-COOKIE attributes and with each attribute having a confirmed status when the cookie is already present in the cookie tracking database.
p-0268Cookie tracking of HTTP request headers involves discovering new cookies and placing them in the cookie tracker's database, refining the estimated attributes of cookies already in the cookie tracker's database and when appropriate deleting cookies already in the cookie tracker's database.
p-0269Every HTTP request header's cookie field is examined by the Cookie Tracker. The domain is determined from the HTTP request's hostname field (e.g. the domain for news.google.com is .google.com). If a new cookie is discovered (a unique cookie name/domain value), it is placed into the database with unconfirmed domain, path and expiration fields.
p-0270A database entry maintains the set of all hostnames that have been observed to have the cookie. This is used to refine the domain attribute.
p-0271A database entry also maintains the set of all paths that have been observed to have the cookie. This is used to refine the path attribute.
p-0272The initial estimate of the domain is the broadest possible interpretation (e.g. .google.com which matches all Google web sites, not .mail.google.com). The initial estimate of the path is the broadest possible interpretation (i.e. “/” or every path within the server. The initial estimated value of a discovered cookie's expiration is “never expire”. The expiration estimated value is only updated when a SET-COOKIE for the cookie is later observed.
p-0273If an existing cookie is seen in a HTTP request it is used to refine the cookies estimated domain and path. If the hostname for the HTTP request is different from the hostname from the original discovery (e.g. news.google.com rather than www.google.com) this confirms that the domain is the whole domain (e.g. .google.com). The cookie's domain attribute is updated to a “confirmed” status.
p-0274If a cookie's domain has a confirmed status or the HTTP request is a request for the same hostname as when the cookie was discovered, the cookie's path is scrutinized next. The set of all paths seen to have the cookie is compared and the longest common path is calculated. The longest common path is maintained in the cookie's database entry. E.g., if the cookies was seen in /downloads/recent and /downloads/ancient then the longest common path is /downloads.
p-0275If an existing cookie is found to not be present in an HTTP request to a hostname which is known to match the cookie (e.g. the original hostname for an unconfirmed domain or the whole domain for a confirmed domain), then path may be refined or the cookie may be determined to have been deleted. The cookie is determined to have been deleted when: (1) the cookie has an unconfirmed path attribute and the HTTP request's path falls within the longest common path (e.g. the path is /downloads/favorites and the longest common path is /downloads); or (2) the cookie has a confirmed path attribute (from an HTTP response SET-COOKIE field) and the HTTP request's path field falls within the confirmed path.
p-0276In either case, the cookie is determined to be deleted because it should have been present if not already deleted.
p-0277An opportunity for refining the path estimate exists when: (1) an existing cookie with an unconfirmed path attribute is found to not be present in an HTTP request whose hostname matches either the cookie's confirmed domain or the original hostname; and (2) the HTTP request's path falls outside of the longest common path (e.g. the path is /uploads); and (3) the cookie does not appear in any of the HTTP request header's cookie fields.
p-0278The estimate for the cookie's path is updated to the first place the HTTP request's path differs from the longest common path. Following our example, the best estimate of the cookies path is moved from “/” to “/download”.
p-0279That is how cookie tracking works. In the preferred embodiment of the present invention (the preferred embodiment having a virtual prefetch browser): cookie tracking is performed in the client proxy to track the end-user browser's cookies and also by the proxy server's control module (program) to track the virtual browser's cookies.
p-0280Also, as explained above, in the preferred embodiment, there is communication between the client proxy and the proxy server's control module to communicate updated cookie conclusions. In particular, a cookie tracker (such as the client proxy) provides an output whenever the estimate of a tracked cookie's attribute changes. Such an output includes the affected cookie's estimated attributes: name, value, domain, path, expiration. This output is communicated to the proxy server's control module which can use the output to update its cookie tracking database.
p-0281The proxy server's control module carries out its cookie tracking as it monitors the virtual browser's HTTP transactions. This is how discrepancies are discovered and fixed up (in modified virtual browser HTTP requests and by inserting SET-COOKIE fields into HTTP responses). In other words, the proxy server's control module can modify a virtual browser HTTP request by adding or changing a cookie in the request, in accordance with the control module's cookie tracking database, and can insert a SET-COOKIE field into a HTTP response to be provided by the control module to the virtual browser, also in accordance with the control module's cookie tracking database. For example, if the virtual browser generates an HTTP request, and the control module determines based on the cookie tracking database that the request is lacking a cookie or that it contains an outdated cookie, then the control module can add or update the cookie, as the case may be, thereby forming a modified HTTP request. If the control module wishes to update the virtual browser's stored cookies, then the control module may, for example, use a SET-COOKIE field in a HTTP response to be provided by the control module to the virtual browser so as to provide a cookie generated by the control module in accordance with the cookie tracking database. As a result, the virtual browser stores the cookie in its cookie storage.
p-0282As can be seen from the foregoing, in the preferred embodiment, the client proxy sends cookie conclusions via a network data communication to the proxy server. These cookie conclusions, which are obtained by the client proxy using the cookie tracking method discussed above, may provide the proxy server (which is also using the cookie tracking method at its end) with an even better estimation of the status of cookies actually stored by the client apparatus's web browser. This type of cookie synchronization (or estimated cookie synchronization as it were) allows the proxy server, when pre-fetching content on behalf of that web browser, to use cookies as close as possible to those that the web browser would use.
p-0283Preferably, the cookie conclusions are sent from the client proxy to the proxy server separate and apart from cookie fields in an HTTP header from the client apparatus's web browser (e.g., an HTTP request generated by the client apparatus's web browser), and more preferably are sent separate and apart from cookie fields in any HTTP header or information in those cookie fields.
(6) Web Pane Response Time Feature
p-0284A further feature of the present invention relates to the tracking of the time required for the client browser to fully load a web page. This feature allows statistics to be accumulated to evaluate the performance of the present invention and to adjust any system settings for optimal operation.
p-0285<figref idrefs="DRAWINGS">FIGS. 22</figref>, <b>23</b>, and <b>26</b> describe this web page response time feature of the present invention. <figref idrefs="DRAWINGS">FIG. 22</figref> illustrates the communications between the various components for this feature. <figref idrefs="DRAWINGS">FIG. 23</figref> describes the operation of client browser <b>120</b>, client proxy program <b>141</b>, and proxy server <b>250</b> for this feature. <figref idrefs="DRAWINGS">FIG. 26(</figref><i>a</i>) shows sample C# code that creates a Javascript fragment for generating an HTTP request upon a page load event. <figref idrefs="DRAWINGS">FIG. 26(</figref><i>b</i>) shows sample C# code which creates a Javascript fragment for generating a HTTP request when the end of the HTML has been parsed.
p-0286In step S<b>2300</b>, client browser <b>120</b> requests a URL, similar to step S<b>700</b>. Again, the request is usually by a user of client PC <b>110</b> requesting the URL.
p-0287In step S<b>2301</b>, client browser <b>120</b> forms a HTTP GET request <b>2200</b> for the URL and sends it (via a network connection) according to the network settings in TCP/IP stack <b>121</b>, similar to step S<b>701</b>.
p-0288In step S<b>2302</b>, client proxy program <b>141</b> intercepts request <b>2200</b>. Client proxy program <b>141</b> marks the time that it receives request <b>2200</b> as the begin-time (“Time <b>1</b>”). That is, the begin-time corresponds to the time that client proxy program <b>141</b> receives the first HTTP request for a web page.
p-0289In step S<b>2303</b>, client proxy program <b>141</b> relays request <b>2200</b> to ISP sub-system <b>200</b> as communication <b>2201</b>, similar to step S<b>702</b>.
p-0290In step S<b>2304</b>, proxy server <b>250</b> forms its own HTTP GET request <b>2202</b> for the same URL, similar to step S<b>601</b>.
p-0291In step S<b>2305</b>, proxy server <b>250</b> receives HTTP response <b>2203</b> from the web server, similar to step S<b>602</b>.
p-0292In step S<b>2306</b>, proxy server <b>250</b> inserts Javascript in the HTML document within HTTP response <b>2203</b>, as seen in block <b>2204</b> in <figref idrefs="DRAWINGS">FIG. 22</figref>. Specifically, control module <b>260</b> instructs Javascript modifier module <b>262</b> to insert Javascript code into the HTML document. The inserted Javascript code, when executed on a web browser, causes the web browser to perform an action such that ultimately, proxy server <b>250</b> receives data representing the web page response time. Sample code for inserting such Javascript is depicted in <figref idrefs="DRAWINGS">FIGS. 26(</figref><i>a</i>) and <b>26</b>(<i>b</i>). In the preferred embodiment, client proxy program <b>141</b> processes start and end times to calculate the final web page response time, and sends the calculated response time to proxy server <b>250</b>. However, one of ordinary skill in the art will appreciate that proxy server <b>250</b>, or a combination of client proxy program <b>141</b> and proxy server <b>250</b>, may perform such processing and calculations.
p-0293In the preferred embodiment, two different time values are determined. However, one of ordinary skill in the art will appreciate that either of the two time values, or any other time value representing the end of the web page loading process may be alternatively used.
p-0294As previously mentioned, the begin-time value is the time when client proxy program <b>141</b> (and thus in the preferred embodiment, router <b>130</b>) first receives HTTP request <b>2200</b>. It can be appreciated that this time is a close approximation to time when the client browser <b>120</b> transmits HTTP request <b>2200</b>. This is because network link <b>101</b> between client PC <b>110</b> and router <b>130</b> is customarily a low-latency network, particularly when compared to the higher-latency satellite links <b>20</b> and <b>30</b>. Therefore, in the preferred embodiment, the recorded begin-time is the point when client proxy program <b>141</b> receives the initial HTTP request. Alternatively, a different response time may be calculated, whereby a page start URL may be inserted into the beginning of the HTML document, such that the begin time is the time when client proxy program <b>141</b> receives a HTTP GET request for the page start URL.
p-0295The first end-time value is the time when the web browser has finished processing the HTML. This is accomplished by inserting additional first Javascript code into the HTML document as close to the end of the document as possible. Preferably, the inserted Javascript is placed after all other Javascript code and just before the </body> tag, if there are no scripts after the tag.
p-0296The second end-time value is the time when the web browser has finished processing the entire page. This is accomplished by inserting additional second Javascript code into the HTML document which registers an event handler for an end-of-page event. This customarily corresponds with the “on Load” event. When the web browser has determined that the web page has completed loading, the web browser will execute the Javascript event handler.
p-0297In the inserted Javascript for both time value determinations, the execution of the Javascript requests a URL corresponding to the time value determination. The URL may contain a timestamp for the time value, or may simply be a specific URL recognizable by client proxy program <b>141</b> or proxy server <b>250</b>.
p-0298In step S<b>2307</b>, control module <b>260</b> sends a communication <b>2205</b> containing HTML to client proxy program <b>141</b>. However, instead of the HTML containing the original Javascript from HTTP response <b>2203</b>, as in step S<b>603</b>, the HTML in communication <b>2205</b> contains the modified Javascript with the inserted Javascript code.
p-0299In step S<b>2308</b>, client proxy program <b>141</b> receives communication <b>2205</b> and generates a HTTP response <b>2206</b> which contains the HTML document and transmits it to client browser <b>120</b>, similar to step S<b>704</b>. However, here the HTML document includes the modified Javascript.
p-0300In step S<b>2309</b>, client browser <b>120</b> begins processes the HTML document, including executing the modified Javascript in the HTML document, as seen in block <b>2207</b> in <figref idrefs="DRAWINGS">FIG. 22</figref>.
p-0301In step S<b>2310</b>, client browser <b>120</b> reaches the end of the HTML document, where it encounters the first inserted Javascript code, as seen in block <b>2208</b> in <figref idrefs="DRAWINGS">FIG. 22</figref>. Client browser <b>120</b> executes the first inserted Javascript code, which forms a specific URL. Client browser <b>120</b> requests this URL as a HTTP GET request <b>2209</b>.
p-0302In step S<b>2311</b>, client proxy program <b>141</b> intercepts request <b>2209</b>. Client proxy program <b>141</b> recognizes the specific URL within request <b>2209</b> as corresponding to the end of HTML in client browser <b>120</b> loading the web page.
p-0303In step S<b>2312</b>, client proxy program <b>141</b> marks the time of receiving request <b>2209</b> (“Time <b>2</b>”). Client proxy program <b>141</b> also returns a HTTP response <b>2210</b> of “404 Not-Found”, to provide client browser <b>120</b> a response to request <b>2209</b> and satisfy the request.
p-0304Meanwhile, in step S<b>2313</b>, client browser finally finishes processing the entire web page, and thus, triggers an end-of-page event, as seen in block <b>2211</b> in <figref idrefs="DRAWINGS">FIG. 22</figref>. The event causes an event handler, defined in the second inserted Javascript code, to be executed. The event handler forms a second specific URL. Client browser <b>120</b> requests this second URL as a HTTP GET request <b>2212</b>.
p-0305In step S<b>2314</b>, client proxy program <b>141</b> intercepts request <b>2212</b>. Client proxy program <b>141</b> recognizes the specific URL within request <b>2212</b> as corresponding to the event handler being executed in client browser <b>120</b> after the end-of-page event. If the URL does not contain timestamp information, client proxy program <b>141</b> marks the time of receiving request <b>2212</b>. Alternatively, if the text of the URL has embedded timestamp information, client proxy program <b>141</b> decodes and extracts timestamp information from the embedded timestamp information. An example of the URL having embedded time stamp information (i.e., the URL is a function of time and/or date) is the following: http://www.forresptimeonlypurposes.com/timestampdate20101111-timestamptime161200-timestampmicrosec=945679.
p-0306In step S<b>2315</b>, client proxy program <b>141</b> marks this end-of-page timing data (“Time <b>3</b>”). Client proxy program <b>141</b> also returns a HTTP response <b>2213</b> of “404 Not-Found”, to provide client browser <b>120</b> a response to request <b>2212</b> and satisfy the request.
p-0307In step S<b>2316</b>, client proxy program <b>141</b> uses the begin-time, the end-of-HTML time, and/or the end-of-page time to calculate the web page response time for client browser <b>120</b>. In the time calculations, client proxy program <b>141</b> may discount any communications delay between client browser <b>120</b> and client proxy program <b>141</b> as being negligible. Alternatively, the time can be compensated for this delay according to any appropriate and well-known method.
p-0308In step S<b>2317</b>, client proxy program <b>141</b> sends the web page response times to proxy server <b>250</b> as communication <b>2214</b>.
p-0309Instead of using a URL associated with a HTTP GET request, the modified Javascript may alternatively encode the timing information using another format. For example, the modified Javascript may place the timing information within a HTTP PUT request, a HTTP POST request, or a cookie. Like the URL method, client browser <b>120</b> transmits the HTTP request or cookie (e.g., via HTTP), which is then intercepted by client proxy program <b>141</b>.
p-0310As another alternative to the embodiment, proxy server <b>250</b> may perform the processing of the specific end-of-HTML and end-of-page URLs sent by client browser <b>120</b> or the processing of the web page response times, instead of client proxy program <b>141</b> performing such processing.
p-0311Again, in this web page response scheme which uses Javascript injection, there is no need for proxy server <b>250</b> to execute the modified Javascript (since the modified Javascript is intended to be executed by client browser <b>120</b>), so proxy server <b>250</b> may skip or otherwise ignore or not execute the modified Javascript when executing Javascript in a HTTP response.
p-0312Additional General Comments
p-0313The following numbered comments are applicable to all of the foregoing embodiments:
p-0314(1) In the foregoing description, where reference is made to a “program”, such refers to programming code or instructions including without limitation object code, machine code, source code, scripting code, etc. which can be executed by a computer and more particularly by the computer's processor or processing unit or CPU, etc. Thus, when it is stated that a “program” takes some action, it means that the program includes programming code or instructions that when executed as discussed above effect that action.
p-0315(2) In the foregoing description, where reference is made to a link or network link, such may also be referred to as a network connection. Sending data on a network connection by one apparatus for receipt by another apparatus can cover the case where the apparatuses are connected directly by a single link, or the case where the apparatuses are connected indirectly with one or more links and/or one or more apparatuses, routers, or other devices intervening therebetween.
p-0316(3) In the foregoing description, when it is described that the client PC's web browser generates a HTTP GET request for a URL and sends the HTTP GET request on a network connection, it is understood that all of the various hardware and software components in between the web browser and the physical level are implicated. Thus, for example, when the client PC's web browser <b>120</b> generates a HTTP GET request, the HTTP GET request is received and processed by TCP/IP stack <b>121</b> after which it is sent using TCP/IP on network link <b>101</b>. Likewise, when proxy server <b>250</b> sends data to client proxy program <b>141</b>, the data passes through NIC <b>253</b>, NIC <b>220</b>, satellite interface <b>210</b>, link <b>30</b>, satellite <b>10</b>, link <b>20</b>, satellite interface <b>131</b>, and routing <b>140</b>, before reaching client proxy program <b>141</b>. In other words, where it is described that some type of data is sent from one apparatus to another, the reader should understand that the data is passing, in fact, through the various hardware or physical components or network links or connections and through the various software or program components described.
p-0317(4) While the present invention has been discussed above in the context of HTTP protocol over a satellite link, the present invention is not limited to that protocol; instead, some other protocol, at the application level or other level, could be employed. For instance, Hypertext Transfer Protocol Secure (HTTPS) is understood to be an alternative and widely-used protocol to HTTP.
p-0318(5) While the present invention has been discussed above with respect to web pages, again it is not so limited and other content could be used.
p-0319(6) While the present invention has been discussed above with respect to a satellite connection, it is not so limited, and any type of connection between apparatuses could be employed.
p-0320(7) While the client PC and other apparatuses have been described above as being computers or the like, the present invention is not so limited, and instead such could be replaced by a variety of other devices including, for example, a television, cellular telephone, personal digital assistant (PDA), gaming system, or any other electronic device for connecting to a network such as the Internet or some other network.
p-0321(8) It should also be appreciated that instead of satellite and the Internet, any alternative network or network link can be incorporated with the present invention.
p-0322(9) While the present invention has been described as using network links such as LAN links, or WAN links such as a satellite link, or network interface cards, or various types of switching or routing, it will be appreciated that any forms or links, routing, switching, etc. may be used in place of the described networking components.
p-0323(10) In the description above, mention is made of the proxy server <b>250</b> receiving a HTTP response sent by a web server. However, the present invention is not limited to the cases where the entire HTTP response is received by proxy server <b>250</b>. Instead, proxy server <b>250</b> could receive data from the HTTP response such as, for example, just a portion of the HTTP response. The proxy server <b>250</b> does not necessarily have to receive the entire HTTP response. Also, the proxy server <b>250</b> could begin taking action such as prefetching a dynamically-generated URL before receiving an entire HTTP response.
p-0324(11) In the description above, mention is made of the HTTP response including a HTML document, or an HTML document including Javascript. However, the present invention is not so limited. An HTTP response typically includes an initial line, one or more header lines, and then a message body. The message body may, for example, be HTML, or it may be some other data type (e.g., plain text, image (e.g., GIF), etc.). Thus, in the description above, where reference is made to the HTML document (i.e., a HTML message body) of the HTTP response, it should be understood that the invention is not limited to the same, but any other HTTP response is also envisioned. Also, the proxy server <b>250</b> may send to the client proxy program <b>141</b> either (1) the entire HTTP response or (2) data obtained in accordance with the HTTP response (e.g., just the HTTP response message body or some other subset of the HTTP response). What is preferred is that the proxy server <b>250</b> sends to the client proxy program <b>141</b> data from which the client proxy program <b>141</b> can generate a HTTP response to send to the client browser <b>120</b>.
p-0325(12) In the description above, mention is made of the Javascript contained within the HTML document. However, the present invention is not so limited. The Javascript may be contained in a separate discrete document, accessed via a URL contained in the HTML document. In this circumstance, the client browser <b>120</b> and virtual browser <b>270</b> first request the separate document (e.g., via HTTP by the URL of the document) and then execute the Javascript upon receipt of the document. Thus, the present invention is operative to modify and execute Javascript regardless of whether it is located in the HTML document or in a separate referenced document.
p-0326(13) In the description above, where various flowcharts and procedures are described, if it is not otherwise specified, then it should be assumed that the flowcharts and procedures are effected by software programs stored in memories of the type discussed above, which programs, when executed by a processor such as a CPU, carry out the described steps.
p-0327(14) In the description above, it is explained that when the client browser <b>120</b> generates a first HTTP GET request for a first URL, the client proxy program <b>141</b> can send data to the proxy server <b>250</b>, from which data the first URL can be obtained. When the proxy server <b>250</b> receives this data, the proxy server <b>250</b> generates a second HTTP GET request for the first URL. This second HTTP GET request is, as described above, sent using TCP/IP with a source IP address being an IP address of the proxy server <b>250</b>, and a destination address being an IP address of the web server, so that a HTTP response from the web server will be sent via TCP/IP with the IP address of the proxy server <b>250</b> being the IP destination address. However, the present invention is not limited to the foregoing. Instead, the proxy server <b>250</b> could be a transparent proxy server. In such a case, instead of generating a second HTTP GET request, the proxy server could simply forward the first HTTP GET request (which was sent using a source IP address corresponding to the client PC <b>110</b> and a destination IP address of the web server). In such a case, when the web server generates a HTTP response, the HTTP response is sent using TCP/IP with the IP address of the client PC <b>110</b> being the destination address. The proxy server <b>250</b> could detect the HTTP response on the network, and even though the proxy server <b>250</b> did not generate its own HTTP GET request, the proxy server <b>250</b> could obtain the HTTP response or data therefrom, and then manipulate the Javascript as discussed above and/or pre-fetch content from dynamically-generated and/or static URLs as discussed above.
p-0328(15) In the discussion above, it is explained that the first HTTP GET request for the first URL, generated by the client browser <b>120</b> of the client PC <b>110</b>, may be sent using IP where the source IP address is that of the client PC. Of course, if the client PC's IP address is a private IP address on a LAN, then router <b>130</b> may perform network address translation before forwarding the IP packet to sub-system <b>200</b>. In that case, the first HTTP GET request may be sent using TCP/IP where an IP source address is changed from that of the client PC <b>110</b> to a public IP address of the router <b>130</b>. Of course, in such a configuration, TCP/IP communications from the Internet intended for client PC <b>110</b> may have the router <b>130</b>'s public IP address as the destination IP address, and the router <b>130</b> then performs translation, usually based on port number, to change the destination IP address to the client PC's IP address (i.e., the private address). It will be appreciated that the present invention is intended to also cover this case.
p-0329(16) While an embodiment using a satellite network has been described above, the invention is not limited to satellite networks. Other relatively long-latency networks could alternatively be used. Indeed, any network, whether long-latency or not, could be used.
p-0330(17) While an embodiment using the public Internet has been described above, the invention is not limited to using the Internet. Any other network could be used including, for example, an enterprise private network or some other private network.
p-0331(18) While <figref idrefs="DRAWINGS">FIG. 2</figref> depicts a single client PC <b>110</b>, the invention is not limited to one client PC. Of course, there could be multiple client PCs.
p-0332(19) While <figref idrefs="DRAWINGS">FIG. 2</figref> depicts a personal computer (PC), the invention is not limited to PCs. The invention also applies, for example, to other devices with browsers or that generate requests for web content, such requests including but not being limited to HTTP protocol requests.
p-0333(20) While it has been described above that the user may type a URL into the address bar of the client browser <b>120</b>, the invention is not so limited. Instead of typing a URL, the user could select a link by, for example, clicking on it, or the client browser <b>120</b> itself could trigger the movement to a new web page. Any of the myriad ways for requesting web content are covered.
p-0334(21) While embodiments have been described in which the proxy server injects Javascript into an HTML document or HTTP response or the like, the invention is not so limited. Alternatively, another apparatus could carry out the injection. For example, the client proxy could be the one to inject the Javascript.
p-0335(22) Another advantage offered by the present invention over conventional pre-fetch systems is that where the HTTP response from the webserver contains Javascript that sets a cookie, the proxy server can execute the Javascript and set the cookie (whereas a proxy server in a conventional pre-fetch system would not execute the Javascript and thus could not set the cookie). As a result, when making an HTTP GET request (e.g., when retrieving a URL contained in the HTTP response), the proxy server can use the cookie.
p-0336(23) While the present invention is applied to a satellite communications system, it not limited to such. For example, the present invention can be applied to a cellular communications system or a wireless communications system or a wired network. It will be understood that the present invention can be applied to any networking or communications system which may benefit from the present invention.
p-0337(24) While the present invention describes a preferred embodiment containing hardware and/or software, it will be understood that any of those various components can be alternatively implemented in hardware, software, or a combination thereof.
p-0338(25) Unless specified otherwise, the term “memory” as discussed above with respect to the various apparatuses, refers to a physical computer memory, examples of which include RAM, ROM, and other examples of computer hardware memory. In other words, the memory is a tangible physical object and is a non-ephemeral and non-transitory form of matter. Also all of the “apparatuses”, “devices”, and the like described herein are also tangible physical objects that are non-ephemeral and that include at least some hardware.
p-0339(26) While the preferred embodiments have been described above as using HTTP, HTML, and the like, the present invention is not limited to the foregoing, and other protocols including, without limitation, other markup languages or methods of sending web content, could be used.
p-0340(27) While terms in the foregoing description such as editing or modifying Javascript have been used to describe, by way of example and not of limitation, how the present invention can cause the client apparatus's web browser to receive an HTTP response that contains Javascript not present in an HTTP response generated by the web server, it should be understood that there might not be any Javascript in the original, unmodified HTTP response generated by the web server; in such a case, the present invention may be said to “inject” or insert Javascript so that the client apparatus's web browser receives an HTTP response that includes the injected Javascript, which was not present in the original, unmodified HTTP response generated by the web server. Thus, it will be appreciated that where the application refers to or depicts “modifying” Javascript in an embodiment, the invention is not limited to “modifying” Javascript and also covers inserting or injecting Javascript or the like.
p-0341(28) Unless stated otherwise, “contains” shall have the meaning of “comprises”. Thus, for example, a packet that contains certain data is not limited to that data but may also include other data.
p-0342(29) While embodiments have been described in which there are a client proxy and a proxy server, the invention is not so limited. Instead of having both a client proxy and a proxy server, that sub-system could be replaced, for example, by a single proxy.
p-0343(30) While embodiments have been described in which the proxy server inserts, injects, modifies, or edits Javascript, the invention is not so limited. Instead, the client proxy could carry out such steps. Such could be especially preferable if there is only one proxy. An example of the client proxy carrying out such steps could be that the client proxy may, instead of the proxy server, insert or inject Javascript into a HTTP response such that the client apparatus's web browser, when executing the Javascript, sends browser-specific information to another apparatus (e.g., to the proxy server).
p-0344(31) While embodiments have been described in which the client proxy and/or proxy server monitor the cookie fields of HTTP GET requests generated by the client apparatus's web browser, the invention is not so limited. Preferably, not only HTTP GET requests but also various HTTP requests (e.g., GETs, PUTs, POSTs, etc.) are monitored.
INDUSTRIAL APPLICABILITY
p-0345The present invention provides a communications system that improves the transfer of data over a communications link.
CONCLUSION
p-0346Except as otherwise disclosed herein, the various components shown in outline or in block form in the figures are individually well known and their internal construction and operation are not critical either to the making or using of this invention or to a description of the best mode of the invention.
p-0347Although specific embodiments of the present invention have been described above in detail, it will be understood that this description is merely for purposes of illustration. When it is said that something “is”, “shall”, “will”, or “should be” the case, for example, these expressions are not meant to limit the invention, but are merely providing a specific example or specific examples. Various modifications of and equivalent structures corresponding to the disclosed aspects of the preferred embodiments in addition to those described above may be made by those skilled in the art without departing from the spirit of the present invention which is defined in the following claims, the scope of which is to be accorded the broadest interpretation so as to encompass such modifications and equivalent structures.
Contents8
27 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11 Sheet 12 Sheet 13 Sheet 14 Sheet 15 Sheet 16 Sheet 17 Sheet 18 Sheet 19 Sheet 20 Sheet 21 Sheet 22 Sheet 23 Sheet 24 Sheet 25 Sheet 26 Sheet 27
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US11151330B2 | Cited by | United States of America | Applicant |
| US10120862B2 | Cited by | United States of America | Applicant |
| US10592707B2 | Cited by | United States of America | Applicant |
| US10360279B2 | Cited by | United States of America | Applicant |
| US2002010761A1 | Cites | United States of America | Applicant |
| US2002099818A1 | Cites | United States of America | Applicant |
| US2003229900A1 | Cites | United States of America | Applicant |
| US2004093327A1 | Cites | United States of America | Applicant |
| US2004250205A1 | Cites | United States of America | Search report |
| US2005021791A1 | Cites | United States of America | Applicant |
| US2005204041A1 | Cites | United States of America | Applicant |
| US2007274503A1 | Cites | United States of America | Applicant |
| US2008195712A1 | Cites | United States of America | Applicant |
| US2009019105A1 | Cites | United States of America | Applicant |
| US2009083395A1 | Cites | United States of America | Applicant |
| US2009083646A1 | Cites | United States of America | Applicant |
| US2009249300A1 | Cites | United States of America | Applicant |
| US2009271514A1 | Cites | United States of America | Applicant |
| US2009292984A1 | Cites | United States of America | Applicant |
| US2009300196A1 | Cites | United States of America | Applicant |
| US2009300208A1 | Cites | United States of America | Applicant |
| US2009313318A1 | Cites | United States of America | Applicant |
| WO2010081160A2 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| US2010198880A1 | Cites | United States of America | Applicant |
| US2010223322A1 | Cites | United States of America | Applicant |
| US2010228880A1 | Cites | United States of America | Applicant |
| US2010250650A1 | Cites | United States of America | Applicant |
| US2011119370A1 | Cites | United States of America | Applicant |
| US2011124319A1 | Cites | United States of America | Applicant |
| US2011179469A1 | Cites | United States of America | Applicant |
| US2011185016A1 | Cites | United States of America | Applicant |
| US2011208550A1 | Cites | United States of America | Search report |
| US2011307238A1 | Cites | United States of America | Applicant |
| US2012136926A1 | Cites | United States of America | Applicant |
| US2012136928A1 | Cites | United States of America | Applicant |
| US2012137210A1 | Cites | United States of America | Search report |
| US2012198558A1 | Cites | United States of America | Search report |
| US6907429B2 | Cites | United States of America | Applicant |
| US6910180B1 | Cites | United States of America | Applicant |
| US6941338B1 | Cites | United States of America | Applicant |
| US6944827B2 | Cites | United States of America | Applicant |
| US7024477B2 | Cites | United States of America | Applicant |
| US7389330B2 | Cites | United States of America | Applicant |
| US7665082B2 | Cites | United States of America | Applicant |
| US7712141B1 | Cites | United States of America | Applicant |
| US7716281B2 | Cites | United States of America | Applicant |
| US7751542B2 | Cites | United States of America | Applicant |
| US7954052B2 | Cites | United States of America | Search report |
| US8024400B2 | Cites | United States of America | Applicant |
| US8078759B2 | Cites | United States of America | Applicant |
| US8111414B2 | Cites | United States of America | Search report |
| US8131861B2 | Cites | United States of America | Search report |
| US8150798B2 | Cites | United States of America | Search report |
| US8150939B1 | Cites | United States of America | Applicant |
| US8234369B2 | Cites | United States of America | Applicant |
| US8275790B2 | Cites | United States of America | Applicant |
| US8392841B1 | Cites | United States of America | Applicant |
| US8417772B2 | Cites | United States of America | Applicant |
| Aug. 2, 2012 European Search Report in European Patent Appln. No. 11191134.3. | Non-patent | – | Applicant |
| Webmaster General Forum, "Hughes Network Systems cause the most 404 errors", http://www.webmasterworld.com/webmaster/4058789.htm, 2010, pp. 1-5. | Non-patent | – | Applicant |
| EL810 Mobile PEP-Box Terminal Elevation Product Family, ELEVATION, R2/10.2008, www.newtec.eu, pp. 1-2. | Non-patent | – | Applicant |
| "Opera Mini", Opera Mini-Wikipedia, the free encyclopedia, Nov. 5, 2010, http://en.wikipedia.org/wiki/Opera-Mini (Date retrieved: Nov. 11, 2010), pp. 1-12. | Non-patent | – | Applicant |
| "Opera Mini technology", Opera Solutions: Opera Mini, http://www.opera.com/business/solutions/mini/technology/ (Date retrieved: Nov. 11, 2010), pp. 1-2. | Non-patent | – | Applicant |
| "Google Labs Has Re-Released the Much-Maligned Web Accelerator", Antezeta SEO & Web Analytics Consulting, Antezeta.com/.../google-web-accelerator (Date retrieved: Nov. 24, 2010) pp. 1-4. | Non-patent | – | Applicant |
| ESA ARTES "Satellite Communication System Elements, Technologies, and Applications: Fast Internet via Satellite", Tellitec Engineering GmbH, Berlin, Germany, Aug. 28, 2004, pp. 1-6. | Non-patent | – | Applicant |
| ViaSat "Innovative Bandwidth Savings Techniques Beyond Modulation", Transforming Satellite Broadband Communications, Paul Sandoval, Viasat Inc., May 27, 2008. | Non-patent | – | Applicant |
| ViaSat, "Transforming Satellite Broadband", http://www.sspi.com.br/portal/images/stories/pdfs/viasat-sspi-vsat-day-2009, 2009. | Non-patent | – | Applicant |
| Sep. 10, 2012 European Official Action in European Patent Appln. No. 11191134.3. | Non-patent | – | Applicant |
| Gourley, et al., HTTP: The Definitive Guide, Sep. 27, 2002, O'Reilly Media Inc. | Non-patent | – | Applicant |
18 members in 2 offices
Members18
| Document | Office | Kind | |
|---|---|---|---|
| US2012136926A1 | United States of America | A1 | |
| US2012136927A1 | United States of America | A1 | |
| US2012136928A1 | United States of America | A1 | |
| US2012137210A1 | United States of America | A1 | |
| EP2485161A2 | European Patent Office (EPO) | A2 | |
| EP2495670A1 | European Patent Office (EPO) | A1 | |
| EP2485161A3 | European Patent Office (EPO) | A3 | |
| EP2533161A1 | European Patent Office (EPO) | A1 | |
| EP2533162A1 | European Patent Office (EPO) | A1 | |
| US8880594B2 | United States of America | B2 | |
| US8903894B2 | United States of America | B2 | |
| US8909697B2This record | United States of America | B2 | |
| US2017277807A1 | United States of America | A1 | |
| US10360279B2 | United States of America | B2 | |
| EP2495670B1 | European Patent Office (EPO) | B1 | |
| EP2485161B1 | European Patent Office (EPO) | B1 | |
| US10496725B2 | United States of America | B2 | |
| EP2533162B1 | European Patent Office (EPO) | B1 |
61 transactions on the USPTO file
Allowed after 1 non-final rejection and 1 RCE.
- Non-final rejections
- 1
- Final rejections
- 0
- RCEs
- 1
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Payment of Maintenance Fee, 8th Year, Large EntityM1552 | M1552 | |
| Payment of Maintenance Fee, 4th Year, Large EntityM1551 | M1551 | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Response to Reasons for AllowanceREAS | REAS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Reasons for AllowanceEX.R | EX.R | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Reasons for AllowanceEX.R | EX.R | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Response after Non-Final ActionA... | A... | |
| Request for Extension of Time - GrantedXT/G | XT/G | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| PG-Pub Issue NotificationPG-ISSUE | PG-ISSUE | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Application Is Now CompleteCOMP | COMP | |
| Sent to Classification ContractorPGPC | PGPC | |
| Filing ReceiptFLRCPT.O | FLRCPT.O | |
| Cleared by L&R (LARS)L128 | L128 | |
| Referred to Level 2 (LARS) by OIPE CSRL198 | L198 | |
| Preliminary AmendmentA.PE | A.PE | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Initial Exam Team nnIEXX | IEXX |
8 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Maintenance fee paymentMAFP | MAFP | |
| Maintenance fee paymentMAFP | MAFP | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Maintenance fee paymentMAFP | MAFP | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF | |
| AssignmentAS | AS | |
| AssignmentAS | AS |
Numbers
- Publication
- 08909697
- Application
- 13306251
Titles
- English
- Computer networking system and method with javascript execution for pre-fetching content from dynamically-generated URL and javascript injection to modify date or random number calculation
Patent term adjustment
- A delay
- +238 daysthe office missed an examination deadline
- Applicant delay
- −77 days
- Net adjustment
- 161 days
Classification
- CPC, 1
- G06F16/9574
- IPC, 2
- G06F15 16
- G06F17 30
- USPC, 14
- 709203000
- 709202000
- 709205000
- 709206000
- 709217000
- 709228000
- 715234000
- 715273000
- 715760000
- 715762000
- 725105000
- 725106000
- 725107000
- 725108000