Interface nsIHttpChannelType

nsIHttpChannel

This interface allows for the modification of HTTP request parameters and the inspection of the resulting HTTP response status and headers when they become available.

Hierarchy

Properties

URI: nsIURI

The URI corresponding to the channel. Its value is immutable.

allowSTS: boolean

This attribute of the channel indicates whether or not the underlying HTTP transaction should be honor stored Strict Transport Security directives for its principal. It defaults to true. Using OCSP to bootstrap the HTTPs is the likely use case for setting it to false.

This attribute may only be set before the channel is opened.

Throws

NS_ERROR_IN_PROGRESS or NS_ERROR_ALREADY_OPENED if called after the channel has been opened.

browserId: uint64_t

ID of the browser for this channel.

NOTE: The setter of this attribute is currently for xpcshell test only. Don't alter it otherwise.

canceled: boolean

True if the channel has been canceled.

canceledReason: string
channelId: uint64_t

Unique ID of the channel, shared between parent and child. Needed if the channel activity needs to be monitored across process boundaries, like in devtools net monitor. See bug 1274556.

classicScriptHintCharset: string
contentCharset: string

The character set of the channel's content if available and if applicable. This attribute only applies to textual data.

The value of the contentCharset attribute is a mixedcase string.

contentDisposition: number

Access to the type implied or stated by the Content-Disposition header if available and if applicable. This allows determining inline versus attachment.

Setting contentDisposition provides a hint to the channel about the disposition. If the hint is DISPOSITION_ATTACHMENT and a normal Content-Disposition header is present, the hinted value will always be used. If the hint is DISPOSITION_FORCE_INLINE then the disposition is inline and the header is not used. The value from Content-Disposition header is only used when the hinted value is not DISPOSITION_INLINE or DISPOSITION_FORCE_INLINE. If the header is missing the hinted value will be used if set.

Implementations should throw NS_ERROR_NOT_AVAILABLE if the header either doesn't exist for this type of channel or is empty, and return DISPOSITION_ATTACHMENT if an invalid/noncompliant value is present.

contentDispositionFilename: string

Access to the filename portion of the Content-Disposition header if available and if applicable. This allows getting the preferred filename without having to parse it out yourself.

Setting contentDispositionFilename provides a hint to the channel about the disposition. If a normal Content-Disposition header is present its value will always be used. If it is missing the hinted value will be used if set.

Implementations should throw NS_ERROR_NOT_AVAILABLE if the header doesn't exist for this type of channel, if the header is empty, if the header doesn't contain a filename portion, or the value of the filename attribute is empty/missing.

contentDispositionHeader: string

Access to the raw Content-Disposition header if available and applicable.

Implementations should throw NS_ERROR_NOT_AVAILABLE if the header either doesn't exist for this type of channel or is empty.

Deprecated

Use contentDisposition/contentDispositionFilename instead.

contentLength: int64_t

The length of the data associated with the channel if available. A value of -1 indicates that the content length is unknown. Note that this is a 64-bit value and obsoletes the "content-length" property used on some channels.

contentType: string

The MIME type of the channel's content if available.

NOTE: the content type can often be wrongly specified (e.g., wrong file extension, wrong MIME type, wrong document type stored on a server, etc.), and the caller most likely wants to verify with the actual data.

Setting contentType before the channel has been opened provides a hint to the channel as to what the MIME type is. The channel may ignore this hint in deciding on the actual MIME type that it will report.

Setting contentType after onStartRequest has been fired or after open() is called will override the type determined by the channel.

Setting contentType between the time that asyncOpen() is called and the time when onStartRequest is fired has undefined behavior at this time.

The value of the contentType attribute is a lowercase string. A value assigned to this attribute will be parsed and normalized as follows: 1- any parameters (delimited with a ';') will be stripped. 2- if a charset parameter is given, then its value will replace the the contentCharset attribute of the channel. 3- the stripped contentType will be lowercased. Any implementation of nsIChannel must follow these rules.

decodedBodySize: uint64_t

The size of the message body received by the client, after removing any applied content-codings

documentCharacterSet: string
encodedBodySize: uint64_t

The size in octets of the payload body, prior to removing content-codings

isDocument: bool

Returns true if the channel is used to create a document. It returns true if the loadFlags have LOAD_DOCUMENT_URI set, or if LOAD_HTML_OBJECT_DATA is set and the channel has the appropriate MIME type. Note: May have the wrong value if called before OnStartRequest as we don't know the MIME type yet.

isMainDocumentChannel: boolean

Indicates whether channel should be treated as the main one for the current document. If manually set to true, will always remain true. Otherwise, will be true if LOAD_DOCUMENT_URI is set in the channel's loadflags.

loadFlags: nsLoadFlags

The load flags of this request. Bits 0-15 are reserved.

When added to a load group, this request's load flags are merged with the load flags of the load group.

loadGroup: nsILoadGroup

The load group of this request. While pending, the request is a member of the load group. It is the responsibility of the request to implement this policy.

loadInfo: nsILoadInfo

The LoadInfo object contains information about a network load, why it was started, and how we plan on using the resulting response. If a network request is redirected, the new channel will receive a new LoadInfo object. The new object will contain mostly the same information as the pre-redirect one, but updated as appropriate. For detailed information about what parts of LoadInfo are updated on redirect, see documentation on individual properties.

name: string

The name of the request. Often this is the URI of the request.

notificationCallbacks: nsIInterfaceRequestor

The notification callbacks for the channel. This is set by clients, who wish to provide a means to receive progress, status and protocol-specific notifications. If this value is NULL, the channel implementation may use the notification callbacks from its load group. The channel may also query the notification callbacks from its load group if its notification callbacks do not supply the requested interface.

Interfaces commonly requested include: nsIProgressEventSink, nsIPrompt, and nsIAuthPrompt/nsIAuthPrompt2.

When the channel is done, it must not continue holding references to this object.

NOTE: A channel implementation should take care when "caching" an interface pointer queried from its notification callbacks. If the notification callbacks are changed, then a cached interface pointer may become invalid and may therefore need to be re-queried.

originalURI: nsIURI

The original URI used to construct the channel. This is used in the case of a redirect or URI "resolution" (e.g. resolving a resource: URI to a file: URI) so that the original pre-redirect URI can still be obtained. This is never null. Attempts to set it to null must throw.

NOTE: this is distinctly different from the http Referer (referring URI), which is typically the page that contained the original URI (accessible from nsIHttpChannel).

NOTE: originalURI isn't yet set on the new channel when asyncOnChannelRedirect is called.

owner: nsISupports

The owner, corresponding to the entity that is responsible for this channel. Used by the security manager to grant or deny privileges to mobile code loaded from this channel.

NOTE: this is a strong reference to the owner, so if the owner is also holding a strong reference to the channel, care must be taken to explicitly drop its reference to the channel.

protocolVersion: string

Returns the network protocol used to fetch the resource as identified by the ALPN Protocol ID.

Throws

NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

redirectionLimit: number

This attribute specifies the number of redirects this channel is allowed to make. If zero, the channel will fail to redirect and will generate a NS_ERROR_REDIRECT_LOOP failure status.

NOTE: An HTTP redirect results in a new channel being created. If the new channel supports nsIHttpChannel, then it will be assigned a value to its |redirectionLimit| attribute one less than the value of the redirected channel's |redirectionLimit| attribute. The initial value for this attribute may be a configurable preference (depending on the implementation).

referrerInfo: nsIReferrerInfo

Get/set the referrer information. This contains the referrer (URI) of the resource from which this channel's URI was obtained (see RFC2616 section 14.36) and the referrer policy applied to the referrer.

This attribute may only be set before the channel is opened.

Setting this attribute will clone new referrerInfo object by default.

NOTE: The channel may silently refuse to set the Referer header if the URI does not pass certain security checks (e.g., a "https://" URL will never be sent as the referrer for a plaintext HTTP request). The implementation is not required to throw an exception when the referrer URI is rejected.

Throws

NS_ERROR_IN_PROGRESS if set after the channel has been opened.

Throws

NS_ERROR_FAILURE if used for setting referrer during visitRequestHeaders. Getting the value will not throw.

requestContextID: uint64_t

Identifies the request context for this load.

requestMethod: string

REQUEST CONFIGURATION

Modifying request parameters after asyncOpen has been called is an error. Set/get the HTTP request method (default is "GET"). Both setter and getter are case sensitive.

This attribute may only be set before the channel is opened.

NOTE: The data for a "POST" or "PUT" request can be configured via nsIUploadChannel; however, after setting the upload data, it may be necessary to set the request method explicitly. The documentation for nsIUploadChannel has further details.

Throws

NS_ERROR_IN_PROGRESS if set after the channel has been opened.

requestSize: uint64_t

size consumed by the request header fields and the request payload body

requestSucceeded: boolean

Returns true if the HTTP response code indicates success. The value of nsIRequest::status will be NS_OK even when processing a 404 response because a 404 response may include a message body that (in some cases) should be shown to the user.

Use this attribute to distinguish server error pages from normal pages, instead of comparing the response status manually against the set of valid response codes, if that is required by your application.

Throws

NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

responseStatus: number

RESPONSE INFO

Accessing response info before the onStartRequest event is an error. Get the HTTP response code (e.g., 200).

Throws

NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

responseStatusText: string

Get the HTTP response status text (e.g., "OK").

NOTE: This returns the raw (possibly 8-bit) text from the server. There are no assumptions made about the charset of the returned text. You have been warned!

Throws

NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

securityInfo: nsITransportSecurityInfo

Transport-level security information (if any) corresponding to the channel.

NOTE: In some circumstances TLS information is propagated onto non-nsIHttpChannel objects to indicate that their contents were likely delivered over TLS all the same.

FIXME(bz, bug 1528449) is that still true now that document.open() doesn't do this?

status: number

The error status associated with the request.

topLevelContentWindowId: uint64_t

ID of the top-level document's inner window. Identifies the content this channels is being load in.

transferSize: uint64_t

size consumed by the response header fields and the response payload body

Methods

  • Increases the reference count for this interface. The associated instance will not be deleted unless the reference count is returned to zero.

    Returns

    The resulting reference count.

    Returns number

  • Parameters

    • aIID: object
    • Optional aInstancePtr: object

    Returns any

  • A run time mechanism for interface discovery.

    Returns

    NS_OK if the interface is supported by the associated instance, NS_NOINTERFACE if it is not.

    aInstancePtr must not be null.

    Parameters

    • aIID: object

      [in] A requested interface IID

    • aInstancePtr: object

      [out] A pointer to an interface pointer to receive the result.

    Returns void

  • Decreases the reference count for this interface. Generally, if the reference count returns to zero, the associated instance is deleted.

    Returns

    The resulting reference count.

    Returns number

  • Call this method to see if we need to strip the request body headers for the new http channel. This should be called during redirection.

    Parameters

    • aMethod: string

    Returns bool

  • Asynchronously open this channel. Data is fed to the specified stream listener as it becomes available. The stream listener's methods are called on the thread that calls asyncOpen and are not called until after asyncOpen returns. If asyncOpen returns successfully, the channel promises to call at least onStartRequest and onStopRequest.

    If the nsIRequest object passed to the stream listener's methods is not this channel, an appropriate onChannelRedirect notification needs to be sent to the notification callbacks before onStartRequest is called. Once onStartRequest is called, all following method calls on aListener will get the request that was passed to onStartRequest.

    If the channel's and loadgroup's notification callbacks do not provide an nsIChannelEventSink when onChannelRedirect would be called, that's equivalent to having called onChannelRedirect.

    If asyncOpen returns successfully, the channel is responsible for keeping itself alive until it has called onStopRequest on aListener or called onChannelRedirect.

    Implementations are allowed to synchronously add themselves to the associated load group (if any).

    NOTE: Implementations should throw NS_ERROR_ALREADY_OPENED if the channel is reopened. NOTE: Implementations should throw an error if the channel has been cancelled prior asyncOpen being called.

    See

    nsIChannelEventSink for onChannelRedirect

    Parameters

    • aListener: nsIStreamListener

      the nsIStreamListener implementation

    Returns void

  • Cancels the current request. This will close any open input or output streams and terminate any async requests. Users should normally pass NS_BINDING_ABORTED, although other errors may also be passed. The error passed in will become the value of the status attribute.

    Implementations must not send any notifications (e.g. via nsIRequestObserver) synchronously from this function. Similarly, removal from the load group (if any) must also happen asynchronously.

    Requests that use nsIStreamListener must not call onDataAvailable anymore after cancel has been called.

    Parameters

    • aStatus: number

      the reason for canceling this request.

      NOTE: most nsIRequest implementations expect aStatus to be a failure code; however, some implementations may allow aStatus to be a success code such as NS_OK. In general, aStatus should be a failure code.

    Returns void

  • Get the value(s) of a particular response header in the form and order it has been received from the remote peer. There can be multiple headers with the same name.

    Throws

    NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest) or if the header is not set in the response.

    Parameters

    • aHeader: string

      The case-insensitive name of the response header to query (e.g., "Set-Cookie").

    • aVisitor: nsIHttpHeaderVisitor

      the header visitor instance.

    Returns void

  • Get the value of a particular request header.

    Returns

    the value of the request header.

    Throws

    NS_ERROR_NOT_AVAILABLE if the header is not set.

    Parameters

    • aHeader: string

      The case-insensitive name of the request header to query (e.g., "Cache-Control").

    Returns string

  • Get the value of a particular response header.

    Returns

    the value of the response header.

    Throws

    NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest) or if the header is not set in the response.

    Parameters

    • header: string

    Returns string

  • These methods encode/decode the TRR mode to/from the loadFlags. Helper methods Get/SetTRRModeImpl are provided so implementations don't need to duplicate code.

    Requests with TRR_DEFAULT_MODE will use the mode indicated by the pref

    • see network.trr.mode in all.js Requests with TRR_DISABLED_MODE will always use native DNS, even if the pref is set to mode3 (TRR-only). Requests with TRR_FIRST_MODE will first use TRR then fallback to regular DNS, unless TRR is disabled by setting the pref to mode5, parental control being enabled, or the domain being in the exclusion list. Requests with TRR_ONLY_MODE will only use TRR, unless not allowed by the same conditions mentioned above.

    Returns nsIRequest_TRRMode

  • Returns true if the server sent the equivalent of a "Cache-control: no-cache" response header. Equivalent response headers include: "Pragma: no-cache", "Expires: 0", and "Expires" with a date value in the past relative to the value of the "Date" header.

    Throws

    NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

    Returns boolean

  • Returns true if the server sent a "Cache-Control: no-store" response header.

    Throws

    NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

    Returns boolean

  • Indicates whether the request is pending. nsIRequest::isPending is true when there is an outstanding asynchronous event that will make the request no longer be pending. Requests do not necessarily start out pending; in some cases, requests have to be explicitly initiated (e.g. nsIChannel implementations are only pending once asyncOpen returns successfully).

    Requests can become pending multiple times during their lifetime.

    Returns

    TRUE if the request has yet to reach completion.

    Returns

    FALSE if the request has reached completion (e.g., after OnStopRequest has fired).

    Note

    Suspended requests are still considered pending.

    Returns boolean

  • Returns true if the server sent a "Cache-Control: private" response header.

    Throws

    NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

    Returns boolean

  • In e10s, the information that the CORS response blocks the load is in the parent, which doesn't know the true window id of the request, so we may need to proxy the request to the child.

    Parameters

    • aMessage: string

      The message to print in the console.

    • aCategory: string

      The category under which the message should be displayed.

    Returns void

  • Parameters

    • aMessageName: string
    • aWarning: boolean
    • aURL: string
    • aContentType: string

    Returns void

  • Synchronously open the channel.

    Returns

    blocking input stream to the channel's data.

    NOTE: nsIChannel implementations are not required to implement this method. Moreover, since this method may block the calling thread, it should not be called on a thread that processes UI events. Like any other nsIChannel method it must not be called on any thread other than the XPCOM main thread.

    NOTE: Implementations should throw NS_ERROR_IN_PROGRESS if the channel is reopened.

    Returns nsIInputStream

  • Instructs the channel to immediately redirect to a new destination. Can only be called on channels that have not yet called their listener's OnStartRequest(). Generally that means the latest time this can be used is one of: "http-on-examine-response" "http-on-examine-merged-response" "http-on-examine-cached-response"

    When non-null URL is set before AsyncOpen: we attempt to redirect to the targetURI before we even start building and sending the request to the cache or the origin server. If the redirect is vetoed, we fail the channel.

    When set between AsyncOpen and first call to OnStartRequest being called: we attempt to redirect before we start delivery of network or cached response to the listener. If vetoed, we continue with delivery of the original content to the channel listener.

    When passed aTargetURI is null the channel behaves normally (can be rewritten).

    This method provides no explicit conflict resolution. The last caller to call it wins.

    Throws

    NS_ERROR_NOT_AVAILABLE if called after the channel has already started to deliver the content to its listener.

    Parameters

    • aTargetURI: nsIURI

    Returns void

  • Resumes the current request. This may have the effect of re-opening any underlying transport and will resume the delivery of data to any open streams.

    Returns void

  • Set a request header with empty value.

    This should be used with caution in the cases where the behavior of setRequestHeader ignoring empty header values is undesirable.

    This method may only be called before the channel is opened.

    Throws

    NS_ERROR_IN_PROGRESS if called after the channel has been opened.

    Throws

    NS_ERROR_FAILURE if called during visitRequestHeaders.

    Parameters

    • aHeader: string

      The case-insensitive name of the request header to set (e.g., "Cookie").

    Returns void

  • Creates and sets new ReferrerInfo object

    Parameters

    • aUrl: string

      referrer url

    • aPolicy: nsIReferrerInfo_ReferrerPolicyIDL

      referrer policy of the created object

    • aSendReferrer: boolean

      indicates if the referrer should not be sent or not even when it's available.

    Returns void

  • Set referrer Info without clone new object. Use this api only when you are passing a referrerInfo to the channel with 1-1 relationship. Don't use this api if you will reuse the referrer info object later. For example when to use: channel.setReferrerInfoWithoutClone(new ReferrerInfo());

    Parameters

    • aReferrerInfo: nsIReferrerInfo

    Returns void

  • Set the value of a particular request header.

    This method allows, for example, the cookies module to add "Cookie" headers to the outgoing HTTP request.

    This method may only be called before the channel is opened.

    Throws

    NS_ERROR_IN_PROGRESS if called after the channel has been opened.

    Throws

    NS_ERROR_FAILURE if called during visitRequestHeaders.

    Parameters

    • aHeader: string

      The case-insensitive name of the request header to set (e.g., "Cookie").

    • aValue: string

      The request header value to set (e.g., "X=1").

    • aMerge: boolean

      If true, the new header value will be merged with any existing values for the specified header. This flag is ignored if the specified header does not support merging (e.g., the "Content- Type" header can only have one value). The list of headers for which this flag is ignored is an implementation detail. If this flag is false, then the header value will be replaced with the contents of |aValue|.

      If aValue is empty and aMerge is false, the header will be cleared.

    Returns void

  • Set the value of a particular response header.

    This method allows, for example, the HTML content sink to inform the HTTP channel about HTTP-EQUIV headers found in HTML tags.

    Throws

    NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

    Throws

    NS_ERROR_ILLEGAL_VALUE if changing the value of this response header is not allowed.

    Throws

    NS_ERROR_FAILURE if called during visitResponseHeaders, VisitOriginalResponseHeaders or getOriginalResponseHeader.

    Parameters

    • header: string
    • value: string
    • merge: boolean

    Returns void

  • Parameters

    • aSource: UniqueProfileChunkedBuffer

    Returns void

  • Suspends the current request. This may have the effect of closing any underlying transport (in order to free up resources), although any open streams remain logically opened and will continue delivering data when the transport is resumed.

    Calling cancel() on a suspended request must not send any notifications (such as onstopRequest) until the request is resumed.

    NOTE: some implementations are unable to immediately suspend, and may continue to deliver events already posted to an event queue. In general, callers should be capable of handling events even after suspending a request.

    Returns void

  • Flags a channel to be upgraded to HTTPS.

    Upgrading to a secure channel must happen before or during "http-on-modify-request". If redirectTo is called early as well, it will win and upgradeToSecure will be a no-op.

    Throws

    NS_ERROR_NOT_AVAILABLE if called after the channel has already started to deliver the content to its listener.

    Returns void

  • Call this method to visit all non-default (UA-provided) request headers. Calling setRequestHeader while visiting request headers has undefined behavior. Don't do it!

    Parameters

    • aVisitor: nsIHttpHeaderVisitor

      the header visitor instance.

    Returns void

  • Call this method to visit all response headers in the form and order as they have been received from the remote peer. Calling setResponseHeader while visiting response headers has undefined behavior. Don't do it!

    Throws

    NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

    Parameters

    • aVisitor: nsIHttpHeaderVisitor

      the header visitor instance.

    Returns void

  • Call this method to visit all request headers. Calling setRequestHeader while visiting request headers has undefined behavior. Don't do it!

    Parameters

    • aVisitor: nsIHttpHeaderVisitor

      the header visitor instance.

    Returns void

  • Call this method to visit all response headers. Calling setResponseHeader while visiting response headers has undefined behavior. Don't do it!

    Throws

    NS_ERROR_NOT_AVAILABLE if called before the response has been received (before onStartRequest).

    Parameters

    • aVisitor: nsIHttpHeaderVisitor

      the header visitor instance.

    Returns void

Generated using TypeDoc