乐闻世界logo
搜索文章和话题

DNS相关问题

How do I set up GitHub Pages to redirect DNS requests from a subdomain to the top-level domain?

1. Setting up the GitHub Pages RepositoryFirst, ensure you have a GitHub repository for hosting your website files. In the repository settings, locate the 'Pages' section and select a branch as your deployment source.2. Configuring the Top-Level DomainIn the repository's Pages settings, add a custom domain. Here, enter your top-level domain, such as .3. Updating DNS RecordsNext, log in to your domain registrar's management interface to configure DNS settings.Adding A Records for the Top-Level DomainGitHub provides specific IP addresses for A records, which must be added to the DNS settings for the top-level domain. For example:Adding CNAME Records for the www SubdomainFor subdomains like , add a CNAME record pointing to .4. Redirect SettingsWhile DNS records handle resolution from www to the top-level domain, HTTP-level redirects may be necessary to ensure users accessing are redirected to . GitHub Pages automatically manages www-to-non-www redirects for the top-level domain, so once DNS is correctly configured, this step typically requires no additional user action.5. Testing the ConfigurationFinally, verify both and are accessible, with the www version correctly redirecting to the top-level domain. Use tools like to test HTTP headers:This should display a 301 redirect to .ExampleSuppose I have a project with the domain . I followed the above steps to set up GitHub Pages and DNS. Initially, I configured only the top-level domain in GitHub Pages and added A records for it in the DNS provider. Later, I discovered that accessing did not redirect to , so I added a CNAME record for pointing to . After a few hours, DNS propagated, and everything worked smoothly, with successfully redirecting to .This method ensures that regardless of how users input the domain, it is unified to a single address, thereby avoiding content duplication and fragmented SEO weight issues.
答案1·2026年3月24日 21:08

How secure is HTTP_ORIGIN?

HTTP_ORIGIN Security AnalysisHTTP_ORIGIN is an HTTP header that contains the source (protocol, domain, and port) of the page initiating a cross-origin request. It informs the server about the origin of the request. This header is primarily used in CORS (Cross-Origin Resource Sharing) security policies to help the server decide whether to accept or reject the request.Security OverviewThe security of HTTP_ORIGIN depends on how it is used:Server Validation: If the server correctly validates the HTTPORIGIN header and implements strict security policies based on it, HTTPORIGIN can enhance application security. The server can be configured to accept requests only from specific origins and reject all other requests that do not meet the criteria.Forgery Risk: Although HTTPORIGIN is difficult to forge directly from the client-side browser, in certain scenarios (such as when the server supports redirects), malicious users can modify the HTTPORIGIN by configuring proxies or exploiting server-side vulnerabilities. Therefore, relying solely on HTTP_ORIGIN cannot fully defend against CSRF (Cross-Site Request Forgery) or other security attacks.Comparison with Referer: Compared to the Referer header (another commonly used header for identifying the request origin), HTTPORIGIN contains less information (only protocol, domain, and port, without specific paths or query strings). This level of abstraction makes HTTPORIGIN less susceptible to data leakage exploits in certain scenarios compared to Referer.Practical Application ExampleIn a previous project I worked on, we developed a multi-tenant SaaS application that needed to handle requests from different customer domains. We used HTTP_ORIGIN to verify that requests originated from allowed domains. By configuring CORS policies on the server side, we explicitly specified which domains were permitted, thereby enhancing the application's security.ConclusionOverall, HTTPORIGIN can serve as an auxiliary security measure to enhance website security. However, to achieve higher security standards, it is best to combine it with other security measures (such as tokens, cookie flags, etc.) rather than relying solely on HTTPORIGIN to mitigate all cybersecurity risks. When designing security policies, it is crucial to understand and assess all potential risks and attack vectors.
答案1·2026年3月24日 21:08

Create a domain name pointing to an IP of port different than 80

Configuring a domain to point to a specific IP address and use a port other than 80 involves several key steps. Typically, the Domain Name System (DNS) itself does not directly support port information; DNS primarily handles resolving domain names to IP addresses. Specifying a non-standard port is typically handled at the application layer, such as in web links or application configurations. However, I can provide a detailed explanation of how to set this up, along with the relevant network configurations.Step 1: Purchase and Register a DomainFirst, you need to purchase and register a domain from a domain registrar. Choose an appropriate domain registrar and register your chosen domain, such as .Step 2: DNS ConfigurationOnce you have the domain, the next step is to configure DNS records to point the domain to your server's IP address. This typically involves setting up an A record (or AAAA record for IPv6):A record: Points the domain to an IPv4 address. For example, point to .Step 3: Server ConfigurationAssume your application is not running on the standard port 80 but on another port, such as 3000. You need to configure the server to listen on the non-standard port. Here are common server software configuration examples:Apache Configuration: Edit the Apache configuration file (e.g., ), add or modify the directive to listen on the new port, for example:And configure virtual hosts to respond to this port:Nginx Configuration: In Nginx, you modify the file, setting the directive in the block:Step 4: Client AccessWhen accessing from the client side, the port number must be specified, such as by visiting in a browser. Since DNS does not handle port information, the client must explicitly specify the port number.ExampleSuppose you have a development environment with a web application running on port 3000. You can set up the DNS A record to point to your development server IP, then configure Apache or Nginx on the server to listen on port 3000. Developers and testers need to access the application via .Through the above steps, even though DNS itself does not directly support ports, you can successfully configure the domain to point to a specific IP address on a non-80 port.
答案1·2026年3月24日 21:08

How to disable direct access to a web site by ip address

Blocking direct access to a website via IP address is a common security and management practice that can be achieved through multiple approaches. Below, I outline several commonly used methods:1. Web Server ConfigurationExample: Using Apache ServerIn Apache servers, you can modify the configuration file (typically or ) to block direct access via IP address. The following is a configuration example:In this example, if attempting to access via IP , the server will return a 403 Forbidden error.Example: Using Nginx ServerFor Nginx, you can use the block in the configuration file:This will terminate any request attempting direct access via IP.2. Firewall RulesYou can set up firewall rules at the server level to block access via specific IP addresses, which typically involves blocking HTTP or HTTPS requests from that IP.Example: Using iptablesThese commands will drop all incoming packets destined for the server IP address on ports 80 and 443.3. Content Delivery Network (CDN) ConfigurationIf using a CDN such as Cloudflare, you can configure page rules to block access requests made directly via IP address. This is typically done in the CDN's management interface.ConclusionBlocking direct access to a website via IP address is a critical security measure that can effectively prevent common attacks and unauthorized access. Based on the specific server environment and requirements, you can select the appropriate method to implement. In practice, it is essential to consider the maintenance and updates of rules to ensure the effectiveness of security policies.
答案1·2026年3月24日 21:08

How to point subdomain to a Heroku app, and root domain to another Heroku app?

This typically involves configuring the DNS (Domain Name System) and some settings on Heroku. The following are the steps and examples:1. PreparationEnsure you have two Heroku applications, such as and . Additionally, ensure you have purchased a domain, such as .2. Configure the Root DomainFirst, configure the root domain () to point to one of the Heroku applications (e.g., ):Add a Custom Domain to the Heroku Application:Log in to the Heroku Dashboard.Select your application (e.g., ).Navigate to "Settings" > "Domains and certificates" > "Add domain".Add your root domain ().Configure DNS Provider:Log in to your domain registrar or DNS provider's control panel.Set up an or record (if supported by your DNS provider) pointing to . If not supported, you can set multiple records pointing to the IP addresses provided by Heroku for your root domain.3. Configure the SubdomainNext, configure the subdomain (e.g., ) to point to another Heroku application (e.g., ):Add a Custom Domain to Another Heroku Application:Repeat the above step 1, but this time add the domain to .Configure DNS Provider:In the DNS settings, add a record for pointing to .ExampleAssuming your DNS provider supports records:Root Domain ():Type: Name: Value: Subdomain ():Type: Name: Value: NotesDNS changes may take some time (typically a few minutes to several hours) to propagate globally.Ensure you update the SSL certificate to support the newly added custom domains if HTTPS is enabled on Heroku.By setting it up this way, you can achieve the root domain and subdomain pointing to different Heroku applications. This is useful for managing large projects and distributed service architectures.
答案1·2026年3月24日 21:08

How to get the domain value for a cookie in JavaScript?

In JavaScript, retrieving the domain attribute value of a cookie can be achieved by parsing the string. However, it is important to note that due to security reasons, the browser's same-origin policy restricts JavaScript from accessing cookies that do not belong to the current domain. In other words, JavaScript can only access cookies within the same domain as the current webpage and cannot directly retrieve the domain attribute of a cookie.Implementation StepsRead all cookies under the current domain: Using retrieves all accessible cookies under the current domain, returning a string where each cookie is separated by a semicolon and space.Parse the cookie string: Split the string obtained from using a semicolon and space to get individual key-value pairs.Retrieve the value of a specific cookie: Iterate through the split array to find the desired cookie key and extract its value.Example CodeBelow is an example code snippet demonstrating how to read and parse the cookie string in JavaScript to retrieve the value of a specific cookie:NoteThe above method cannot retrieve other cookie attributes such as Domain, Path, or expiration time (Expires/Max-Age). These attributes are not included in due to security considerations. If you need to check these attributes on the server side, you should do so on the server side, such as by setting and checking these cookie attributes in HTTP response headers.
答案1·2026年3月24日 21:08

Nginx resolver -- dns

Nginx is a high-performance web and reverse proxy server. The DNS resolution process primarily occurs when handling requests to external servers, such as backend servers. DNS resolution refers to the process of converting domain names to IP addresses. In Nginx configuration, if using a domain name to point to backend servers, Nginx must first resolve these domain names before establishing connections and forwarding data.Nginx's DNS Resolution ProcessWhen using a domain name to point to backend servers in the Nginx configuration file, such as with the directive:If is a domain name, Nginx resolves it at startup or on the first request. Nginx handles DNS resolution with the following characteristics:Caching Mechanism: Nginx caches the results of DNS resolution. The cache duration can be controlled using the directive and the parameter. For example:This indicates that DNS resolution results will be cached for 300 seconds.Resolution Updates: After the cache expires, if another request requires the domain, Nginx will re-resolve the DNS.Asynchronous Resolution: Starting from Nginx 1.9.13, Nginx supports asynchronous DNS resolution, meaning the DNS resolution process does not block the main worker processes.Application ExampleFor instance, suppose you have a dynamically scalable backend service deployed on the cloud, where the IP addresses of these services may change for various reasons (such as auto-scaling or failover migration). Using a domain name instead of a fixed IP address to configure Nginx's is highly beneficial. By properly configuring DNS cache duration and resolution strategies, you can ensure user requests are always forwarded to the correct server while avoiding performance issues from frequent DNS resolution.ConclusionOverall, Nginx's DNS resolution functionality is critical. It supports efficient and flexible backend service location and connection, particularly well-suited for dynamic cloud environments. With proper configuration, it ensures high availability and fast response times for services.
答案1·2026年3月24日 21:08

How do I redirect a naked ( apex ) domain to www using Route 53?

Redirecting a naked domain (e.g., ) to a domain with 'www' (e.g., ) in AWS Route 53 is a common requirement. This is primarily because many websites aim to provide services through a unified URL, enhancing brand recognition and improving SEO. To achieve this functionality, follow these steps:Configure DNS Records:Create an A Record: First, create an A record (or a CNAME record if using a CDN or other indirect addressing methods) for . This record points to the IP address of your web server or a domain resolving to an IP address.Alias Record: Since DNS standards prohibit CNAME records for naked domains, Route 53 provides a special record type called an Alias record. Create an Alias record for the naked domain that directly points to .Configure Redirection (if needed):Although Alias records handle DNS queries, they do not handle HTTP redirection. If you want to redirect users from to at the HTTP layer, configure redirection rules on your web server. Below are examples for common web servers:Apache Server: In Apache, add the following rule to the file:This code checks if the requested host is and permanently redirects to .Nginx Server: In Nginx, add a server block to the configuration file:This configuration permanently redirects requests for to .This covers the basic steps for redirecting a naked domain to www using AWS Route 53. By properly configuring DNS records and web server redirection rules, you can effectively manage traffic and ensure users access the correct website address.
答案1·2026年3月24日 21:08

Regular expression for url

When processing and validating URLs, using regular expressions is a highly effective approach. The structure of a URL typically includes the protocol, domain, port (optional), path, query string, and fragment. A robust URL regular expression should be able to match various types of URLs and extract these components.Here is an example. This regular expression can match most common URLs and provide capture groups to extract the protocol, domain, path, and other information:Let's break down this regular expression to see how each part works:: This part matches the protocol at the beginning of the URL, which can be http, https, or ftp. Here, a non-capturing group (?:) is used to group the protocol without capturing its content. The indicates that the 's' character is optional.: This part matches the "://" following the protocol.: This part matches the domain.is a non-capturing group that matches one or more strings consisting of lowercase letters, digits, or hyphens, followed by a dot. The ensures at least one such combination.matches the top-level domain, which must have at least two letters.: This part is optional and matches the path in the URL, where matches the slash, and matches any sequence of non-whitespace characters.This regular expression covers most standard URL cases. However, in practical use, it may need to be adjusted according to specific requirements to accommodate different URL formats and needs. For example, if additional matching for port numbers or query parameters is required, the expression may need to be further extended.
答案1·2026年3月24日 21:08

Non-blocking ( async ) DNS resolving in Java

Implementing asynchronous DNS resolution in Java is commonly achieved through specific libraries, as the Java standard library (Java SE) does not natively support asynchronous DNS resolution. Below are examples of methods and libraries for implementing asynchronous DNS resolution:1. Using Netty's Asynchronous DNS ResolverNetty is a high-performance network application framework that provides asynchronous DNS resolution capabilities. The class in Netty can be used for non-blocking DNS resolution.Example code:This code initializes an and constructs a . Asynchronous resolution is initiated by calling the method, and a listener is added via to process the results.2. Using Asynchronous HTTP Client LibrariesCertain asynchronous HTTP client libraries, such as Apache's AsyncHttpClient or Jetty's HttpClient, may internally support asynchronous DNS resolution. While primarily designed for HTTP requests, they can be configured for DNS queries.Example code (using AsyncHttpClient):In this example, although the primary purpose is executing an HTTP GET request, it internally leverages asynchronous DNS resolution to resolve the hostname.3. Using Third-Party LibrariesBeyond Netty and HTTP clients, there are libraries specifically designed for asynchronous DNS resolution, such as . These libraries can be directly utilized as asynchronous DNS resolution solutions in Java.Regardless of the approach, the key to implementing asynchronous DNS resolution lies in leveraging Java's non-blocking I/O capabilities or relying on third-party libraries that handle I/O operations asynchronously. This enhances application responsiveness and performance, particularly when handling multiple network requests or responses dependent on external services.
答案1·2026年3月24日 21:08

How to CNAME to Amazon API Gateway Endpoint

In cloud computing and network architecture, using CNAME (Canonical Name) records is a common method for pointing one domain to another. Within Amazon Web Services (AWS), you can point a custom domain to an Amazon API Gateway endpoint using a CNAME record. Below are the steps:Step 1: Create or Configure an API in Amazon API GatewayFirst, ensure your API is configured in Amazon API Gateway. If you're new, create a new API via the AWS Management Console.Step 2: Deploy Your APIDeploy the API to a stage, such as or . After deployment, API Gateway generates a default execution URL in the format:Step 3: Create a Custom DomainIn the Amazon API Gateway console, select or create the API you want to use.Go to the 'Custom Domain' section.Click 'Create' or 'Add Custom Domain'.Enter the domain you want the API to use, such as .Choose a security certificate. You can import an SSL/TLS certificate from AWS Certificate Manager (ACM) or upload your own certificate.Complete the configuration and save.Step 4: Create Path-Based Routing (Optional)If your API needs to support multiple paths, set up path mapping in the custom domain configuration. This allows different paths to route to different APIs or stages within API Gateway.Step 5: Update DNS RecordsGo to your DNS provider (e.g., GoDaddy, Google Domains).Find the DNS management page and add a CNAME record for your custom domain.Set the CNAME value to the target domain provided by API Gateway for your custom domain, such as:Note that this points to the AWS endpoint for the custom domain configured in API Gateway, not directly to the API's default execution URL.ExampleSuppose you have a weather query API on API Gateway and want to access it via . You have created and deployed the API, and your default execution URL might be:You can set a custom domain for this API and add a CNAME record via your DNS provider as follows:This way, when users access , they are actually accessing the API configured on Amazon API Gateway.
答案1·2026年3月24日 21:08

Why isn’t it possible to use a CNAME alias to Google Storage with HTTPS?

First, let's explore several key concepts: CNAME aliases, HTTPS, and how Google Cloud Storage is used.CNAME AliasesCNAME (Canonical Name record) is a DNS record type that maps one domain to another. It is commonly used to direct subdomains to another domain rather than directly to an IP address.HTTPSHTTPS (Hypertext Transfer Protocol Secure) is an encrypted protocol for secure communication over the web. It relies on SSL/TLS to provide data encryption, integrity, and authentication.Google Cloud StorageGoogle Cloud Storage is a scalable storage service enabling developers and businesses to store and access data at any scale.Why CNAME Aliases Fail for HTTPS Access to Google Cloud StorageSSL/TLS Certificate Issues: When accessing content over HTTPS, SSL/TLS certificates authenticate the server's identity and encrypt communication. These certificates include domain information essential for validation. Using a CNAME alias for HTTPS access to Google Cloud Storage causes the browser to validate the original Google Cloud Storage domain (e.g., ), not the custom domain pointed to by the CNAME. If the certificate's domain doesn't match the browser's request, a security warning is displayed.Configuration Constraints for Google Cloud Storage: While Google Cloud Storage supports custom domains, it requires configuring specific DNS records and verifying domain ownership through Google's process. This setup does not permit HTTPS access through CNAME records; instead, it mandates the use of Google-managed SSL certificates for secure connections.ConclusionThus, attempting to access Google Cloud Storage via HTTPS by merely adding a CNAME record will fail due to SSL certificate problems. The proper method involves correctly configuring the domain and managing SSL certificates through Google Cloud Platform to meet Google's specifications and ensure HTTPS security.
答案1·2026年3月24日 21:08

How to force DNS refresh for a website?

Changing DNS Records- As a website administrator, if you want changes to take effect quickly, the primary consideration is to reduce the TTL (Time-To-Live) value of DNS records. TTL determines how long DNS records are cached on DNS servers. Setting TTL to a lower value, such as a few minutes, causes DNS servers to re-query the original records after a short period to obtain the latest updates.Clearing Local DNS CacheFor end users who want to see changes immediately, they can clear DNS cache on their own devices. For example, on Windows systems, they can run to achieve this.Using Public DNS Service Cache Clearing ToolsMajor DNS service providers like Google DNS or Cloudflare offer tools to manually clear specific domain caches. Visit their respective pages, enter your domain, and request cache refresh.Requesting Cache Refresh from ISPIn some cases, you may need to contact your ISP (Internet Service Provider) to request cache clearance for your website on their DNS servers. This is relatively uncommon and is typically done when persistent issues arise.Real-World Example:In my previous work experience, I was responsible for a website migration project for an online e-commerce platform. During migration, we needed to update the website's IP address. To make users see the new site quickly, I pre-set the TTL of DNS records to a very low value (approximately 5 minutes). After migration completion, I updated the DNS records to point to the new IP address and notified all customers using our service that if they encountered access issues, they could clear their local DNS cache. Additionally, we monitored the cache status of Google DNS and Cloudflare and refreshed it using their provided tools when necessary.Through these operations, we successfully completed the website's smooth transition within a short time, reducing the duration of user access interruptions.
答案1·2026年3月24日 21:08

How to configure heroku application DNS to Godaddy Domain?

When configuring DNS for your Heroku application to point to a GoDaddy domain, follow these steps to ensure a smooth setup. Below are the detailed instructions and examples:Step 1: Obtain the Heroku Application's DNS TargetLog in to your Heroku account.Select the application you want to link to your GoDaddy domain.Navigate to the "Settings" page of the application.In the "Domains and certificates" section, click "Add domain".Enter your domain (e.g., www.example.com), then click "Next".Heroku will provide a DNS target (e.g., ). Make a note of this information, as it will be used when configuring DNS in GoDaddy.Step 2: Configure the Domain in GoDaddyLog in to your GoDaddy account.Go to the "My Products" page and click the "DNS" button next to the domain you want to configure.On the DNS management page, you may need to add or modify a CNAME record.To add a new CNAME record, click "Add" and select "CNAME".In the "Host" field, enter the subdomain portion (e.g., if your Heroku domain is www.example.com, enter ).In the "Points to" field, enter the DNS target obtained from Heroku (e.g., ).Set the TTL (Time to Live), recommended to use automatic or one hour.If existing CNAME records point to other addresses, update them to point to the DNS target provided by Heroku.Save the changes.Step 3: Verification and TestingDNS changes may take several hours to a full day to propagate globally, known as DNS propagation time.Use tools like or to verify DNS records are correctly updated. For example, running should display the CNAME record pointing to Heroku.Once DNS changes are effective, you should be able to access your Heroku application by entering your domain (e.g., www.example.com).NotesEnsure your Heroku application is ready to receive traffic from the custom domain.If SSL certificate requirements exist (for HTTPS support), set up an SSL certificate on Heroku.Monitor your domain and Heroku application for any issues that may arise during DNS changes.By following these steps, you can successfully configure your Heroku application to use a GoDaddy domain. If you encounter issues, leverage the customer support resources for both Heroku and GoDaddy.
答案1·2026年3月24日 21:08

How to overcome root domain CNAME restrictions?

在域名系统(DNS)中,根据RFC 1034规定,根域(顶级域)不能设置CNAME记录,因为CNAME记录会指向另一个域名,而根域必须能直接解析到IP地址以保证域名解析的稳定和可靠。这一限制确实会在某些场景下给域名管理带来不便。不过,有几种方法可以间接解决或绕过这一限制:1. 使用ALIAS或ANAME记录一些DNS提供商提供了ALIAS或ANAME记录,这两种类型的记录在功能上类似于CNAME,但可以用于根域。当DNS查询到ALIAS或ANAME记录时,DNS提供商会在后台解析这个记录指向的地址,然后将其A记录(IP地址)返回给查询者,从而实现类似CNAME的功能,但不违反DNS的规范。例子:假设你拥有一个域名,并希望将其指向在AWS上托管的一个应用。通常情况下,AWS会提供一个域名而不是IP地址。在这种情况下,你可以在你的DNS提供商处设置一个ALIAS记录,将指向AWS提供的域名。DNS提供商会自动解析这个域名并将结果作为A记录返回。2. 使用URL重定向如果目的只是为了将根域重定向到另一个域名,可以使用HTTP重定向而不是DNS记录。这通常在Web服务器层面实现,比如使用Apache或Nginx的重定向规则。例子:在Apache服务器中,可以添加以下配置到.htaccess文件中,实现将所有访问的请求重定向到:这种方法不涉及DNS层面的设置,而是在HTTP协议层面完成重定向。3. 使用第三方服务一些第三方服务如Cloudflare提供了灵活的DNS管理功能,包括允许在技术上实现类似于根域CNAME的配置。这些服务通过特殊的技术手段绕过了标准DNS协议的一些限制。例子:在Cloudflare,你可以设置CNAME Flattening,Cloudflare会在根域上做CNAME记录的展开,将其解析成A记录,这样用户在访问你的根域时,实际上访问的是CNAME指向的目标。总结虽然RFC标准中规定根域不能直接使用CNAME记录,但通过使用ALIAS或ANAME记录、配置HTTP重定向或利用第三方服务等方法,可以有效地解决或绕过这一限制。选择哪种方法取决于具体需求和实际环境。
答案1·2026年3月24日 21:08

Is it possible to have SSL certificate for IP address, not domain name?

Yes, providing SSL certificates for IP addresses is entirely possible.Typically, SSL certificates are associated with domain names to ensure the security of data transmitted over the internet. However, in specific cases, SSL certificates can be directly associated with IP addresses.The primary purpose of SSL certificates is to encrypt data, ensuring secure transmission, and to verify the identity of the server through the certificate's validation mechanism. When SSL certificates are associated with IP addresses, they are primarily used for servers without domain names or specific network devices, such as certain API servers or internal servers accessed solely via IP addresses.For example, consider a company that uses an API server accessible via IP address, which stores sensitive financial data. To ensure the security of this data during transmission, the company may apply for an SSL certificate for this IP address. This ensures that any communication attempting to access the API is encrypted, protecting the data from man-in-the-middle attacks.However, it's important to note that not all Certificate Authorities (CAs) support issuing certificates directly for IP addresses. Additionally, certificates issued for IP addresses typically require the IP address to be public and static, meaning it does not change frequently. Furthermore, when applying for a certificate, appropriate proof of ownership must be provided to verify the IP address.In summary, while not common, providing SSL certificates for IP addresses is entirely feasible for ensuring secure data transmission in specific environments.
答案1·2026年3月24日 21:08