-
Notifications
You must be signed in to change notification settings - Fork 739
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Topics in headers #3008
Comments
Thanks @patmmccann . Questions:
|
Discussed with Patrick. Requirements:
The following examples are given the headers above. Example 1 - no incoming user.dataCreate a user.data field that looks like: {
"user": {
"data": [{
"name": "hostcompanysegdomain.com",
"ext": {
"segtax": 600,
"segclass": "2206021246"
},
"segment": [
{ id: "186" },
{ id: "265" }
]
}]
}
} Example 2 - non-conflicting user.dataCreate a user.data field that looks like: {
"user": {
"data": [{
"name": "segdomain.com", // this came in on the request. leave it alone
"ext": {
"segtax": 4
},
"segment": [
{ id: "111" },
{ id: "222" }
]
},{
"name": "hostcompanysegdomain.com", // this is the new PBS-generated entry
"ext": {
"segtax": 600,
"segclass": "2206021246"
},
"segment": [
{ id: "186" },
{ id: "265" }
]
}]
}
} Example 3 - completely overlapping entryThe incoming ORTB contains: {
"user": {
"data": [{
"name": "hostcompanysegdomain.com", // overlap, so segments merged below
"ext": {
"segtax": 600,
"segclass": "2206021246"
},
"segment": [
{ id: "111" },
{ id: "265" }
]
}]
}
} The result will be {
"user": {
"data": [{
"name": "hostcompanysegdomain.com",
"ext": {
"segtax": 600,
"segclass": "2206021246"
},
"segment": [
{ id: "111" },
{ id: "265" }, // segment came in on both the ORTB and the header, not duplicated
{ id: "186" } // unique topic from header appended
]
}]
}
} Over to @patmmccann to verify the reqs and examples |
It took me a moment to determine how example 3 and 4 were different but I got there, all lgtm |
as reference prebid/Prebid.js#10340 adds the header to the pbjs request to pbs on chrome browsers |
Updated based on committee discussion to drop |
The format for the topics header has changed. Am working through https://patcg-individual-drafts.github.io/topics/#the-sec-browsing-topics-http-request-header-header to get the updated structure. Note that https://groups.google.com/a/chromium.org/g/topics-api-announce/c/7I-cKaupgLI?pli=1 is where the new format is announced. |
Not finding a clear guide to parsing the header, but a couple of examples from https://patcg-individual-drafts.github.io/topics/ suggest a set of assumptions. Example 9 sets
This is 4 sets of data:
Another example is relevant:
This is 2 sets of data:
The parsing of
So the general format is v=chrome.D:TAXONOMY_VERSION:MODEL_VERSION. Translating this to ORTB is as above.
|
So should look like this when converted to oRTB. right?
|
Updated the description with the updated understanding of how the header is structured. The outstanding issue is to resolve whether the name field is "chrome.com" or is the host company's segment domain. |
user.data.name should not be chrome.com; it should be the entity with the topics network, matching https://github.com/google/ads-privacy/tree/master/proposals/topics-rtb chrome.com is useless information as it is already implied by the segtax |
Thank you, Bret, for revising the description with the updated format specifics. Considering that the Chrome browser shares TOPICS across domains based on their presence on other websites, and segtax 600 explains that these segments are Chrome-provided TOPICS, I believe it would be more appropriate to specify the segment domain of the hosting company rather than using "chrome.com." |
I disagree, I'll grant that segTax 600 is associated with Chrome and is knowable by a downstream buyer, but that wouldn't hold true for segTax 1-7 which are the standard taxonomies. When a domain uses one of the standard taxonomies the name is used to describe who constructed the segment, a buyer can't know that Acme DMP composed segment 123 using segtax 7 unless it defines itself in the user.data.name. |
I'm curious how we would ever have overlapping data -- Chrome only ships their topics data in the header, so it should never conflict. |
@rdgordon-index , In a Hybrid configuration featuring the Topics module enabled on the client-side, the Topics module will transmit specific Topics as segments within the PBS request body, while Chrome will also include some Topics in the headers. In such scenario, if the Topics module enables a bidder to offer topics gathered through an iframe/fetch endpoint and the PBS is hosted on the same bidder domain then we can have overlapping |
Updated to have the TOPICS_DOMAIN be a host-company configurable setting. |
And you see this scenario as possible for the Chrome-provided, header-based Topics API taxonomies? |
I see it as typical |
Updated proposed config from auction.topics-domain to auction.privacysandbox.topicsdomain |
Draft PR: #3393 |
Implemented in PBS-Go v2.14.0. Thank you @pm-nilesh-chate for the contribution. |
Prebid Server should read the Chrome-provided
Sec-Browsing-Topics
header and convert it to OpenRTB.Requirements
auction.privacysandbox.topicsdomain
configuration.Observe-Browsing-Topics
response header to a value of?1
. Even when the request ended in an error.Sec-Browsing-Topics Header Format
A couple of examples from https://patcg-individual-drafts.github.io/topics/ suggested a set of assumptions that has since been confirmed by Google:
Example 9 sets Sec-Browsing-Topics to the value "(100);v=chrome.1:1:20, (200);v=chrome.1:1:40, (300);v=chrome.1:1:60, ();p=P"
This is 4 sets of data:
Another example is relevant:
This is 2 sets of data:
The parsing of the version string (e.g. v=chrome.1:1:2) is defined by this statement in the document:
So in otherwords, the general format is v=chrome.D:TAXONOMY_VERSION:MODEL_VERSION.
Translating this to ORTB:
Examples
The following examples are based on the following HTTP header
Example 1 - no incoming user.data
Create a user.data field that looks like:
Example 2 - non-conflicting user.data
Create a user.data field that looks like:
Example 3 - overlapping segments
The incoming ORTB contains:
the result will be
Example 4 - multiple taxonomies
This example is based on the following HTTP header. Note that the taxonomy of the 2nd field is "2" instead of "1" as in the above examples.
Create a user.data field that looks like:
---- Original text ----
Prebid.js will soon be providing topics in request headers using this method
https://developer.chrome.com/en/docs/privacy-sandbox/topics/#use-headers-to-access-and-observe-topics
Prebid server should copy them into the openRTB request like so https://github.com/google/ads-privacy/blob/master/proposals/topics-rtb/README.md
It looks like this
Sec-Browsing-Topics: 186;version="chrome.1:1:2206021246";config_version="chrome.1";model_version="2206021246";taxonomy_version="1", 265;version="chrome.1:1:2206021246";config_version="chrome.1";model_version="2206021246";taxonomy_version="1"
From the topics dev guide
To have the topics in the Sec-Browsing-Topics request header marked by the browser as observed, but also to include the current page visit in the user's next epoch top topic calculation, the server's response has to include Observe-Browsing-Topics: ?1. Here's a JavaScript example using setHeader(): res.setHeader('Observe-Browsing-Topics', '?1');
The text was updated successfully, but these errors were encountered: