Status Update
Comments
sh...@gmail.com <sh...@gmail.com> #2
[Deleted User] <[Deleted User]> #3
[Deleted User] <[Deleted User]> #4
sh...@gmail.com <sh...@gmail.com> #5
di...@gmail.com <di...@gmail.com> #6
[Deleted User] <[Deleted User]> #7
[Deleted User] <[Deleted User]> #8
be...@soft-world.com.tw <be...@soft-world.com.tw> #9
[Deleted User] <[Deleted User]> #10
aa...@gmail.com <aa...@gmail.com> #11
te...@mr-beam.org <te...@mr-beam.org> #12
di...@gmail.com <di...@gmail.com> #13
ud...@gmail.com <ud...@gmail.com> #14
ds...@gmail.com <ds...@gmail.com> #15
co...@vnbmedia.com <co...@vnbmedia.com> #16
ge...@gmail.com <ge...@gmail.com> #17
This is most important to access headers in doPost because of all of the modern system post a security token into the header in order to validate POst body.
[Deleted User] <[Deleted User]> #18
pa...@epay.ingenico.com <pa...@epay.ingenico.com> #19
Show-stopper for several projects. I've had to set up a webhook reflector to get around this odd limitation.
da...@gmail.com <da...@gmail.com> #20
Very hard using Shopify webhooks without access to the headers that specify what type of request is being triggered + validation.
di...@gmail.com <di...@gmail.com> #21
sd...@gmail.com <sd...@gmail.com> #22
pa...@gmail.com <pa...@gmail.com> #23
ma...@gmail.com <ma...@gmail.com> #24
er...@ynltour.com <er...@ynltour.com> #25
gh...@takwinco.com <gh...@takwinco.com> #26
be...@gmail.com <be...@gmail.com> #27
se...@gmail.com <se...@gmail.com> #28
sp...@gmail.com <sp...@gmail.com> #29
ig...@glin.com.br <ig...@glin.com.br> #30
se...@cheche.mx <se...@cheche.mx> #31
ca...@gmail.com <ca...@gmail.com> #32
fe...@vivosa.co.za <fe...@vivosa.co.za> #33
ra...@gmail.com <ra...@gmail.com> #34
le...@monks.com <le...@monks.com> #35
ch...@finalsite.com <ch...@finalsite.com> #36
pa...@epay.ingenico.com <pa...@epay.ingenico.com> #37
cg...@gmail.com <cg...@gmail.com> #38
zv...@gmail.com <zv...@gmail.com> #39
de...@gmail.com <de...@gmail.com> #40
gb...@gmail.com <gb...@gmail.com> #41
na...@gmail.com <na...@gmail.com> #42
no...@gmail.com <no...@gmail.com> #43
ca...@gmail.com <ca...@gmail.com> #44
co...@gmail.com <co...@gmail.com> #45
ru...@gmail.com <ru...@gmail.com> #46
bi...@gmail.com <bi...@gmail.com> #47
th...@gmail.com <th...@gmail.com> #48
da...@growfragrance.com <da...@growfragrance.com> #49
jo...@bind.media <jo...@bind.media> #50
el...@bind.media <el...@bind.media> #51
ke...@gmail.com <ke...@gmail.com> #52
ah...@gmail.com <ah...@gmail.com> #53
[Deleted User] <[Deleted User]> #54
ep...@intellisys.com.do <ep...@intellisys.com.do> #55
zh...@gmail.com <zh...@gmail.com> #56
sv...@gmail.com <sv...@gmail.com> #57
ra...@gmail.com <ra...@gmail.com> #58
da...@gmail.com <da...@gmail.com> #59
tr...@gmail.com <tr...@gmail.com> #60
an...@gmail.com <an...@gmail.com> #61
an...@sbermarketing.ru <an...@sbermarketing.ru> #62
ta...@gmail.com <ta...@gmail.com> #63
yu...@gmail.com <yu...@gmail.com> #64
ka...@gmail.com <ka...@gmail.com> #65
sz...@gmail.com <sz...@gmail.com> #66
ke...@kei-1.jp <ke...@kei-1.jp> #67
ga...@google.com <ga...@google.com>
ga...@google.com <ga...@google.com> #68
Hi there!
Thank you for your report and your patience. I have gathered the information for this feature request and filed it internally. Any updates on this will be posted in this thread.
Many thanks!
di...@gmail.com <di...@gmail.com> #69
#68 Thank you! Looking forward to seeing some progress on this issue.
ed...@valorpercibido.com <ed...@valorpercibido.com> #70
mr...@gmail.com <mr...@gmail.com> #71
an...@tesel.mx <an...@tesel.mx> #72
su...@pinnacleallergy.com <su...@pinnacleallergy.com> #73
[Deleted User] <[Deleted User]> #74
sa...@gmail.com <sa...@gmail.com> #75
mg...@gmail.com <mg...@gmail.com> #76
ad...@gmail.com <ad...@gmail.com> #77
fe...@gmail.com <fe...@gmail.com> #78
ch...@gmail.com <ch...@gmail.com> #79
or...@akiles.app <or...@akiles.app> #80
gu...@googlemail.com <gu...@googlemail.com> #81
To Process PayPal Webhooks it is absolutely necessary to get access to all HTTP header fields, at least to:
PAYPAL-TRANSMISSION-SIG
PAYPAL-AUTH-ALGO
PAYPAL-CERT-URL
TRANSMISSION-TIME
see:
Maybe some additional header fields will be added by PayPal in the future or some will be changed.
For that reason to have access to all header fields would be appreciated and the proposed solution to add a "headers" key with corresponding values to the JSON parameter given to doGet() and doPost() would be the easiest solution.
This was already proposed on Oct 13, 2017 02:39PM by Alexe S Nau:
"I propose that the event object have a parameter called "headers" added to it with the requisite request headers stored as a key-value map. "
Since this Feature Request is from 2017 it may be time to give more attention to it.
Make us users and developers happy !
Greetings and best regards in hope that it will finally find the way to realisation in this year 2022
p.s.
Furthermore maybe other HTTP verbs would also be valuable?
gu...@googlemail.com <gu...@googlemail.com> #82
I have some thoughts about the headers field request in the doGet(e) and doPost(e) event JSON parameter e for http headers.
The formerly proposed field "headers" will result in inclusion of all header fields in every doGet(e) doPost(e) call.
Which results in a lot more data traffic especially for small data payloads it may result in an overhead.
And especially not every AppScript needs the header information.
It may be that a lot more data needs to be transported and you may want to prevent this.
Goal:
reduce data transferred if not necessary
Two scenarios need to be considered:
1.) dispatching to the correct Skript-ID is done NEAR the receiving Server
2.) dispatching to the correct Skript-ID is done FAR the receiving Server
(receiving server is the one receiving the http request NOT the AppScript Server where the script is running on)
In both scenarios following two steps are necessary:
a.) Setting in some way "httpheaders":"true" i the project settings, like mentioned in the following proposed solutions.
b.) As a prerequisite the request for headers need to be propagated to the receiving servers so they can decide to include headers or not.
I don't know your server infrastructure and at which point in the data flow the Script-ID / WebApp-ID is used to dispatch the data to the corresponding AppsScript.
But somewhere in the data flow there must be somewhere a piece of code using the Script-ID to route the data.
Scenario 1:
If this happens near the receiving server, the following proposed solutions may help to reduce traffic even if http-headers are needed by some scripts (not every script need them).
Data reduction as early as possible, transmission only if necessary!
Scenario 2:
If the dispatching happens far from the server and distributed over the infrastructure it may be better just to include all headers in the doGet(e) doPost(e) event JSON every time.
No data reduction possible or reasonable for the last mile.
For the NEAR the Server Scenario (1) I propose two (and some variants) as a solution:
Firstly:
The header element in the event JSON is only a link or URL or a unique identifier.
Your servers will store the corresponding headers for some seconds in a volatile key:value store.
If a user/programmer really needs the headers one can request them using the link, URL or unique identifier to retrieve them separately with a function like:
getHeadersForEvent( scriptID, e.headersID);
+ Pros:
It will only send Data to the AppScript if requested.
- Cons:
you need a volatile and distributed key:value store and this means the header data needs to be transported anyway and in addition multiple times because it is distributed in your system.
This means: more traffic what should be prevented!
Secondly:
During deployment every AppScript is examined/scanned for needed access rights and if one want to deploy it as a WebApp, library, add-on etc. one is asked during deployment as well.
In this phase it could be determined if the script needs the HTTP header fields.
Only in this case they will be send inside the event JSON.
For instance a new function in the API can be implemented which one needs to call during initialisation of the script.
Something like:
PropertiesService.getScriptProperties().needHttpHeaders(true);
If the function is present your scan will reveal this and asking in a popup the user, similar to access rights, to explicitly request/grant it.
This will result in an entry like "httpheaders":"true" in the appsscript.json manifest like
i.e.
"webapp": {
"executeAs": "USER_DEPLOYING",
"access": "MYSELF",
"httpheaders":"true" <<<<<<<<
},
and similar for other scripts like bound-scripts or libraries and add-ons.
Or place it in the dependencies:
{
"timeZone": "America/New_York",
"dependencies": {
"http":{. <<<<<<<<
"httpheaders":"true", <<<<<<<<
"version":"1.1". <<<<<<<< maybe in future necessary to distinguish http 1.0, 1.1, 2.0 and so on
},
},
"webapp": {
"executeAs": "USER_DEPLOYING",
"access": "MYSELF"
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}
Maybe it is even not needed to implement the function:
PropertiesService.getScriptProperties().needHttpHeaders(true);
if your scann code is clever enough and can determine it in an other way.
Only if required the headers will be included in the event JSON.
+ Pros:
No unnecessary data is transferred, only if needed.
No extra key:value store is needed.
It could be automated for scripts, if scrips need it they can say so and will get them.
- Cons:
The implementation on your side will probably be a little bit more challenging.
To make it even easier for you to implement it:
One solution to make it more easy to implement on your side is using the project settings.
An script user/ developer can set explicitly the requirement, resulting in the insertion of "httpheaders":"true" in the appsscript.json
In this case your automatic scan need not to detect it and so this scan-code needs not to be adapted.
Furthermore there is no need for a function like "needHttpHeaders(true)".
Would this be a way to easily implement it?
Let me know.
Greetings and best regards
pi...@gmail.com <pi...@gmail.com> #83
ch...@hotmail.com <ch...@hotmail.com> #84
[Deleted User] <[Deleted User]> #85
Event subscriptions will retry until a 200 response is provided by the client app, and Google App Script web apps sometimes do not resolve doPost functions fast enough before Slack resents.
The resend count information is found in the header of the POST request from Slack, however, so a known solution for slow services is available:
If doPost event passed headers, I could also rectify this in my web app.
Thank you for your hard work.
va...@g.hmc.edu <va...@g.hmc.edu> #86
"They can set the webhook as a Cloud function and modify the incoming request. Then send to appscript deployed api."
I believe this means, "create a cloud function in lieu of your doPost function in apps script; read the headers via the cloud function and then use them to call your appscript functions via the apps script api (
It certainly sounds like it should work, but I haven't had time to try it yet.
gu...@googlemail.com <gu...@googlemail.com> #87
as I understand one should use another service to solve the problem. not having access to http headers form App-Script.
This may work for skilled programmers familiar with Cloud functions but for an average user with a little bit of scripting knowledge this seems a litte bit too cumbersome.
Also every User who needs access to some header fields need to re-implement all the stuff in Cloud functions.
It would be much more convenient and less error prone if google would support such functionality out of the box, tested and error free.
As I already wrote a while ago, if increase of traffic is a concern while delivering every time the http header, google can just have a setting in the manifest file and only supply http headers if needed by the App-Script.
Several ways to implement this where presented.
Maybe two additional functions (delivering body and headers the ...H() )
doGetH()
doPostH()
are ideal to be implemented, because backward compatibility are preserved and new scripts can be scanned for occurrence of these two functions and the manifest adapted accordingly. In this way the backend system knows that http headers should be delivered to the App-Script.
Greetings
va...@g.hmc.edu <va...@g.hmc.edu> #88
sh...@nubank.com.br <sh...@nubank.com.br> #89
ar...@gmail.com <ar...@gmail.com> #90
jo...@prata.mx <jo...@prata.mx> #91
of...@swift.us <of...@swift.us> #92
ck...@gmail.com <ck...@gmail.com> #93
mn...@gmail.com <mn...@gmail.com> #94
cr...@gmail.com <cr...@gmail.com> #95
ma...@toho.ne.jp <ma...@toho.ne.jp> #96
k....@sdventures.com <k....@sdventures.com> #97
to...@gmail.com <to...@gmail.com> #98
sh...@nubank.com.br <sh...@nubank.com.br> #99
ge...@simonelectric.com <ge...@simonelectric.com> #100
el...@ben-hamu.com <el...@ben-hamu.com> #101
ad...@gmail.com <ad...@gmail.com> #102
+1, this is absolutely needed for any serious web application to implement proper security protocols. Google Cloud Functions might be a solution, but it is an external one. At some point the number of "you could do it if you just also used this other service" answers to these issues with App Script will lead developers to abandon App Script entirely.
wk...@gmail.com <wk...@gmail.com> #103
du...@nwboxed.com <du...@nwboxed.com> #104
ja...@karveit.ca <ja...@karveit.ca> #105
da...@rumoon.com.br <da...@rumoon.com.br> #106
va...@g.hmc.edu <va...@g.hmc.edu> #107
I asked chatGPT and it asserted, with an authoritative sounding air that something like this would work:
var contentType = e.parameter.headers["Content-Type"];
For sure! It would be nice though if Google Engineers could do something like that.
is...@google.com <is...@google.com>
di...@gmail.com <di...@gmail.com> #108
Looks like we have a status update!
sb...@gwcphoto.ca <sb...@gwcphoto.ca> #109
I'm beginning to think that the reason why this isn't implemented yet is because of the security implications; how much data about the requestor ends up being sent in the request header that Google doesn't want our scripts to see? Maybe the challenge is deciding how to filter out sensitive information, while still letting the important bits through.
mi...@gmail.com <mi...@gmail.com> #110
pi...@gmail.com <pi...@gmail.com> #111
[Deleted User] <[Deleted User]> #112
yo...@gmail.com <yo...@gmail.com> #113
da...@prompt.io <da...@prompt.io> #114
[Deleted User] <[Deleted User]> #115
he...@gmail.com <he...@gmail.com> #116
[Deleted User] <[Deleted User]> #117
ro...@opazo.cl <ro...@opazo.cl> #118
jp...@google.com <jp...@google.com>
va...@g.hmc.edu <va...@g.hmc.edu> #119
al...@gmail.com <al...@gmail.com> #120
ma...@gmail.com <ma...@gmail.com> #121
[Deleted User] <[Deleted User]> #122
This feature is so suitable. In my case, I need to check up on a signature sent as a header to implement a security feature
za...@zaycker.ru <za...@zaycker.ru> #123
sc...@homecontrol.cl <sc...@homecontrol.cl> #124
in...@gmail.com <in...@gmail.com> #125
ga...@googlemail.com <ga...@googlemail.com> #126
Thanks!
jp...@google.com <jp...@google.com> #127
This feature is unlikely to be implemented due to security concerns. Please consider alternatives as mentioned in other comments. Locking this to avoid "+1" comments.
Description
I propose that the event object have a parameter called "headers" added to it with the requisite request headers stored as a key-value map. If for some reason this is not feasible, an alternative solution is to modify the Drive Push Notification service to pass its payload data in its POST body instead of as HTTP request headers.