recursal/MDN huggingface dataset:
Fetch directive
===============

**CSP fetch directives** are used in a `Content-Security-Policy` header and control locations from which certain resource types may be loaded. For instance, `script-src` allows developers to allow trusted sources of script to execute on a page, while `font-src` controls the sources of web fonts.

All fetch directives fall back to `default-src`. That means, if a fetch directive is absent in the CSP header, the user agent will look for the `default-src` directive.

See Fetch directives for a complete list.

See also
--------

* Glossary
    + CSP
    + Reporting directive
    + Document directive
    + Navigation directive
* Reference
    + https://www.w3.org/TR/CSP/#directives-fetch
    + `upgrade-insecure-requests`
    + `block-all-mixed-content`
    + `Content-Security-Policy`
Top layer
=========

The **top layer** is a specific layer that spans the entire width and height of the viewport and sits on top of all other layers displayed in a web document. It is created by the browser to contain elements that should appear on top of all other content on the page.

Elements placed in the top layer generate a new stacking context, as do their corresponding `::backdrop` pseudo-elements.

Elements that will appear in the top layer include:

* Fullscreen elements, i.e. elements that have been caused to display in fullscreen mode by a successful `Element.requestFullscreen()` call.
* `<dialog>` elements displayed as a modal via a successful `HTMLDialogElement.showModal()` call.
* Popover elements shown via a successful `HTMLElement.showPopover()` call.

Some browsers, such as Chrome, show elements placed in the top layer inside a special DOM tree entry. For example:

![An element in the top layer, as shown in the chrome devtools](/en-US/docs/Glossary/Top_layer/top_layer_devtools.png)

Note that the top layer is an internal browser concept and cannot be directly manipulated from code. You can target elements placed in the top layer using CSS and JavaScript, but you cannot target the top layer itself.

See also
--------

* The stacking context
* Fullscreen API
* `<dialog>` element, `HTMLDialogElement` interface
* Popover API
* `:fullscreen` pseudo-class
Frame rate (FPS)
================

A **frame rate** is the speed at which the browser is able to recalculate, layout and paint content to the display. The **frames per second**, or **fps**, is how many frames can be repainted in one second. The goal frame rate for in website computer graphics is 60fps.

Movies generally have a frame rate of 24 fps. They are able to have fewer frames per second because the illusion of life is created with motion blurs. When moving on a computer screen there are no motion blurs (unless you are animating an image sprite with motion blurs).

See also
--------

* Frame rate (Wikipedia)
* FPS (Glossary)
IANA
====

**IANA** (Internet Assigned Numbers Authority) is a subsidiary of ICANN charged with recording and/or assigning domain names, IP addresses, and other names and numbers used by Internet protocols.

See also
--------

* Official website
* IANA on Wikipedia
Telnet
======

**Telnet** is a command line tool and an underlying TCP/IP protocol for accessing remote computers.

See also
--------

* Telnet on Wikipedia
Pseudo-element
==============

In CSS, a **pseudo-element** selector applies styles to parts of your document content in scenarios where there isn't a specific HTML element to select. For example, rather than putting the first letter of each paragraph in its own element, you can style them all with `p``::first-letter`.

See also
--------

* Pseudo-elements
Operator
========

Reserved **syntax** consisting of punctuation or alphanumeric characters that carries out built-in functionality. For example, in JavaScript the addition operator ("+") adds numbers together and concatenates strings, whereas the "not" operator ("!") negates an expression — for example making a `true` statement return `false`.

See also
--------

* Operator (computer programming) on Wikipedia
* JavaScript operators
Bézier curve
============

A **Bézier curve** (pronounced [bezje]) is a mathematically described curve used in computer graphics and animation. In vector images, they are used to model smooth curves that can be scaled indefinitely.

The curve is defined by a set of control points with a minimum of two. Web related graphics and animations often use cubic Béziers, which are curves with four control points P0, P1, P2, and P3.

To draw a quadratic Bézier curve, two imaginary lines are drawn, one from P0 to P1 and the other from P1 to P2. A third imaginary line is drawn with its starting point moving steadily on the first helper line and the end point on the second helper line. On this imaginary line a point is drawn from its starting point moving steadily to its end point. The curve this point describes is the Bézier curve. Here's an animated illustration demonstrating the creation of the curve:

![Drawing a Bézier curve](/en-US/docs/Glossary/Bezier_curve/b%C3%A9zier_2_big.gif)

See also
--------

* Bézier curve on Wikipedia
* Cubic Bézier easing functions in CSS
* `keySplines` SVG attribute
Guard
=====

Guard is a feature of `Headers` objects (as defined in the `Fetch spec`, which affects whether methods such as `set()` and `append()` can change the header's contents. For example, `immutable` guard means that headers can't be changed. For more information, read Fetch basic concepts: guard.
Element
=======

An **element** is a part of a webpage. In XML and HTML, an element may contain a data item or a chunk of text or an image, or perhaps nothing. A typical element includes an opening tag with some attributes, enclosed text content, and a closing tag.

![Example: in <p class="nice">Hello world!</p>, '<p class="nice">' is an opening tag, 'class="nice"' is an attribute and its value, 'Hello world!' is enclosed text content, and '</p>' is a closing tag.](/en-US/docs/Glossary/Element/anatomy-of-an-html-element.png)

Elements and tags are *not* the same things. Tags begin or end an element in source code, whereas elements are part of the DOM, the document model for displaying the page in the browser.

See also
--------

* Getting started with HTML
* Defining custom elements
* The `Element` interface, representing an element in the DOM.
Advance measure
===============

The **advance measure** is the total space the glyph takes, either horizontally or vertically, depending on the current writing direction. It is equal to the distance traveled by the cursor, placed directly in front of and then shifted behind the character.

 This term is used in the definition of several CSS `<length>` units.
 The *advance measure* of unit `ch` is either the width or height of character "0" in the given typeface, depending on whether the horizontal or vertical axis is currently used. A similar *advance measure* of unit `ic` is the width or height of the "水" character.

See also
--------

* `<length>`
* Learn: CSS values and units
* TextMetrics API
STUN
====

**STUN** (Session Traversal Utilities for NAT) is an auxiliary protocol for transmitting data around a NAT (Network Address Translator). STUN returns the IP address, port, and connectivity status of a networked computer behind a NAT.

See also
--------

* STUN on Wikipedia
* WebRTC protocols
### Technical reference

* Specification
Texel
=====

In 3D graphics, a **texel** is a single pixel within a texture. *Textures* are images presented on a polygon's surface within a 3D rendered image. A texture is characterized by a collection of texels, similar to how an image is characterized by a collection of pixels.

A pixel in a raster image file is a series of bits containing color data, and sometimes opacity data, which maps to display pixels on an output device such as a computer monitor. When a pixel belongs to an image used as a texture resource, it is called a 'texture pixel' or shortened to 'texel'. Instead of mapping directly to screen pixels, a texel's data is mapped to a location in the coordinate space of the 3D object being modeled. Textures can be used to convey color and other surface qualities such as depth and reflectivity. Multiple textures may be layered to create complex surface overlays.

The process of mapping the appropriate texels to their corresponding points on a polygon is called **texture mapping**. Texture mapping is a stage of the process of rendering a 3D image for display. When the source texel grid and destination pixel grid do not align, further **texture filtering** is applied to smooth the resultant texture-mapped pixels (texture *magnification* or *minification*). The final output of the rendering process is a flattened 2D projection of the 3D model, where the texture has been 'wrapped' around the model.

During the render pipeline, texture mapping is typically done prior to lighting the scene; however, in WebGL, lighting is performed as part of the texture mapping process.

See also
--------

* Texel (graphics) on Wikipedia
* Texture mapping on Wikipedia
* Texture filtering on Wikipedia
* Using textures in WebGL
* Lighting in WebGL
* Animating textures in WebGL
URN
===

URN (Uniform Resource Name) is a URI in a standard format, referring to a resource without specifying its location or whether it exists. This example comes from RFC3986: `urn:oasis:names:specification:docbook:dtd:xml:4.1.2`

See also
--------

* URN on Wikipedia
Domain name
===========

A **domain name** is a website's address on the Internet. Domain names are used in URLs to identify which server a specific webpage belongs to. The domain name consists of a hierarchical sequence of names (labels) separated by periods (dots) and ending with an extension.

See also
--------

* Domain name on Wikipedia
* Understanding domain names
HMAC
====

**Hash-based message authentication code**(*HMAC*) is a protocol used for cryptographically authenticating messages.

It can use any kind of cryptographic functions, and its strength depends on the underlying function (SHA1 or MD5 for instance), and the chosen secret key. With such a combination, the HMAC verification algorithm is then known with a compound name such as HMAC-SHA1.

HMAC is used to ensure both integrity and authentication.

See also
--------

* HMAC on Wikipedia
* RFC 2104 on IETF
Forbidden header name
=====================

A **forbidden header name** is the name of any HTTP header that cannot be modified programmatically; specifically, an HTTP **request** header name (in contrast with a Forbidden response header name).

Modifying such headers is forbidden because the user agent retains full control over them. Names starting with `Sec-` are reserved for creating new headers safe from APIs that grant developers control over headers, such as `fetch()`.

Forbidden header names start with `Proxy-` or `Sec-`, or are one of the following names:

* `Accept-Charset`
* `Accept-Encoding`
* `Access-Control-Request-Headers`
* `Access-Control-Request-Method`
* `Connection`
* `Content-Length`
* `Cookie`
* `Date`
* `DNT`
* `Expect`
* `Host`
* `Keep-Alive`
* `Origin`
* `Permissions-Policy`
* `Proxy-`
* `Sec-`
* `Referer`
* `TE`
* `Trailer`
* `Transfer-Encoding`
* `Upgrade`
* `Via`

**Note:** The `User-Agent` header is no longer forbidden, as per spec — see forbidden header name list (this was implemented in Firefox 43) — it can now be set in a Fetch Headers object, or with the setRequestHeader() method of `XMLHttpRequest`. However, Chrome will silently drop the header from Fetch requests (see Chromium bug 571722).

**Note:** While the `Referer` header is listed as a forbidden header in the spec, the user agent does not retain full control over it and the header can be programmatically modified. For example, when using `fetch()`, the `Referer` header can be programmatically modified via the `referrer` option.

See also
--------

Forbidden response header name (Glossary)
Browsing context
================

A **browsing context** is an environment in which a browser displays a `Document`. In modern browsers, it usually is a *tab*, but can be a *window* or even only parts of a page, like a *frame* or an *iframe*.

Each browsing context has an origin (that of the active document) and an ordered history of previously displayed documents.

Communication between browsing contexts is severely constrained. Between browsing contexts of the same origin, a `BroadcastChannel` can be opened and used.

See also
--------

* See origin
Block-level content
===================

In CSS, content that participates in block layout is called **block-level content**.

In a block layout, boxes are laid out one after the other, vertically, beginning at the top of a containing block. Each box's left outer edge touches the left edge of the containing block.  
A block-level element always starts on a new line. In horizontal writing modes, like English or Arabic, it occupies the entire horizontal space of its parent element (container) and vertical space equal to the height of its contents, thereby creating a "block".

**Note:** The above behavior of block layout changes if the containing block's `writing-mode` is set to value other than the default value.

**Note:** HTML (*HyperText Markup Language*) elements historically were categorized as either "block-level" elements or "inline" elements. As a presentational characteristic, this is now specified by CSS.

Examples
--------

In this example, two paragraph (`<p>`) elements are put in a `<div>`.


```html
<div>
  <p>
    This the first paragraph. The background color of these paragraphs have been
    colored to distinguish them from their parent element.
  </p>
  <p>This is the second paragraph.</p>
</div>
```


The paragraph(`<p>`) elements are block-level by default. That is why they are displayed in block layout:
```

p {
  background-color: #8abb55;
}
```

See also
--------

* Inline-level content
* Block formatting context
* `display`
* `writing-mode`
Expando
=======

Expando properties are properties added to DOM nodes with JavaScript, where those properties are not part of the object's DOM specification:


```js
window.document.foo = 5; // foo is an expando
```


The term may also be applied to properties added to objects without respecting the object's original intent, such as non-numeric named properties added to an Array.
CardDAV
=======

**CardDAV** (vCard Extension to WebDAV) is a protocol standardized by the IETF and used to remote-access or share contact information over a server.

See also
--------

* CardDAV on Wikipedia
* RFC 6352: vCard Extensions to Web Distributed Authoring and Versioning (WebDAV)
Transport Layer Security (TLS)
==============================

**Transport Layer Security (TLS)**, formerly known as Secure Sockets Layer (SSL), is a protocol used by applications to communicate securely across a network, preventing tampering with and eavesdropping on email, web browsing, messaging, and other protocols. Both TLS and SSL are client / server protocols that ensure communication privacy by using cryptographic protocols to provide security over a network. When a server and client communicate using TLS, it ensures that no third party can eavesdrop or tamper with any message.

All modern browsers support the TLS protocol, requiring the server to provide a valid digital certificate confirming its identity in order to establish a secure connection. It is possible for both the client and server to mutually authenticate each other, if both parties provide their own individual digital certificates.

**Note:** All major browsers began removing support for TLS 1.0 and 1.1 in early 2020; you'll need to make sure your web server supports TLS 1.2 or 1.3 going forward. From version 74 onwards, Firefox will return a Secure Connection Failed error when connecting to servers using the older TLS versions (Firefox bug 1606734).

See also
--------

* Transport Layer Security (Wikipedia)
* RFC 8446 (The Transport Layer Security Protocol, Version 1.3)
* RFC 5246 (The Transport Layer Security Protocol, Version 1.2)
* Transport Layer Security
* OWASP: Transport Layer Protection Cheat Sheet
* Glossary
    + HTTPS
    + SSL
Adobe Flash
===========

Flash is an obsolete technology developed by Adobe for viewing expressive web applications, multimedia content, and streaming media.

As of 2021, Flash is no longer supported by Adobe or any major web browsers.

See also
--------

* Adobe Flash end-of-life announcement
* Saying goodbye to Flash in Chrome
* Firefox Roadmap for Flash End-of-Life
* Microsoft Windows Flash Player removal
Media
=====

The term **media** is an overloaded one when talking about the web; it takes on different meanings depending on the context.

Media (Audio-visual presentation)
The term **media** (more accurately, **multimedia**) refers to audio, video, or combined audio-visual material such as music, recorded speech, movies, TV shows, or any other form of content that is presented over a period of time.
Media (CSS)
In the context of CSS (Cascading Style Sheets), the term ***media*** refers to the destination to which the document is to be drawn by the rendering engine.
See also
--------

* Media on Wikipedia
IndexedDB
=========

IndexedDB is a Web API for storing large data structures within browsers and indexing them for high-performance searching. Like an SQL-based RDBMS, IndexedDB is a transactional database system. However, it uses JavaScript objects rather than fixed columns tables to store data.

See also
--------

* The IndexedDB API on MDN
* The W3C specification for IndexedDB
IP Address
==========

An **IP address** is a number used to address each device on an IP network uniquely.

*IP* stands for *Internet Protocol* which is the protocol layer with which the address is associated.

"IP address" typically still refers to 32-bit IPv4 addresses until IPv6 is deployed more broadly.

See also
--------

* IP address on Wikipedia
Apple Safari
============

Safari is a Web browser developed by Apple and bundled with macOS, iPadOS, and iOS. It's based on the open-source WebKit engine.

See also
--------

* Safari on Wikipedia
* Safari on apple.com
* The WebKit project
* WebKit nightly build
* Reporting a bug for Safari
RTSP: Real-time streaming protocol
==================================

Real-time streaming protocol (RTSP) is a network protocol that controls how the streaming of a media should occur between a server and a client. Basically, RTSP is the protocol that describes what happens when you click "Pause"/"Play" when streaming a video. If your computer were a remote control and the streaming server a television, RTSP would describe how the instruction of the remote control affects the TV.

See also
--------

* RTSP on Wikipedia
* RFC 7826 (one of the documents that specifies precisely how the protocol works)
* Glossary
    + RTSP
Server
======

A server is a software or hardware offering a service to a user, usually referred to as client. A hardware server is a shared computer on a network, usually powerful and housed in a data center. A software server (often running on a hardware server) is a program that provides services to client programs or a user interface to human clients.

Services are provided generally over local area networks or wide area networks such as the internet. A client program and server program traditionally connect by passing messages encoded using a protocol over an API.

For example:

* An Internet-connected Web server is sending a HTML file to your browser software so that you can read this page
* Local area network server for file, name, mail, print, and fax
* Minicomputers, mainframes, and super computers at data centers
See also
--------

* Introduction to servers
* Server (computing) on Wikipedia
Fingerprinting
==============

**Fingerprinting** is a practice in which websites identify a particular browser (and by extension, a particular user) by collecting and combining distinguishing features of the browser and underlying operating system. Elements of a fingerprint might include, for example:

* the browser version
* the timezone and preferred language
* the set of video or audio codecs that are available on the system
* the fonts installed on the system
* the state of the browser's settings
* the computer's display size and resolution

A website can retrieve information like this by executing JavaScript and CSS on the device, and by combining this data can often create a unique fingerprint for a browser, which can then be used to track users across the web.

Web standards are designed in such a way as to minimize the ability of a website to collect identifying information, and browsers typically add their own protections as well.

See also
--------

* Cover Your Tracks: a tool to show the data a website can use to fingerprint your browser.
* Mitigating Browser Fingerprinting in Web Specifications: best practices for specification authors to prevent fingerprinting.
Ligature
========

A **ligature** is a joining of two characters into one shape. For example, in French "œ" is a ligature of "oe".

You can implement ligatures in your webpage with `font-variant-ligatures`.

See also
--------

* Ligature on Wikipedia
Session Hijacking
=================

**Session hijacking** occurs when an attacker takes over a valid session between two computers. The attacker steals a valid session ID in order to break into the system and snoop data.

Most authentication occurs only at the start of a TCP session. In TCP session hijacking, an attacker gains access by taking over a TCP session between two machines in mid session.

![The attacker sniffs and accesses a legitimate session id from a user interacting with a web server, then uses that session identifier to spoof the session between the regular user and the server to exploit the user's session and access the server directly.](/en-US/docs/Glossary/Session_Hijacking/session_hijacking_3.jpg)

### Session hijacking occurs because

* no account lockout for invalid session IDs
* weak session-ID generation algorithm
* insecure handling
* indefinite session expiration time
* short session IDs
* transmission in plain text
### Session hijacking process

1. **Sniff**, that is perform a man-in-the-middle (MITM) attack, place yourself between victim and server.
2. **Monitor** packets flowing between server and user.
3. **Break** the victim machine's connection.
4. **Take control** of the session.
5. **Inject** new packets to the server using the Victim's Session ID.
### Protection against session hijacking

* create a secure communication channel with SSH (secure shell)
* pass authentication cookies over HTTPS connection
* implement logout functionality so the user can end the session
* generate the session ID after successful login
* pass encrypted data between the users and the web server
* use a string or long random number as a session key
See also
--------

* Session hijacking on Wikipedia
RIL
===

RIL (Radio Interface Layer) is a mobile operating system component which communicates between the device's software and the device's phone, radio, or modem hardware.

See also
--------

* Radio Interface Layer on Wikipedia