Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 我应该如何针对浏览器保护web服务';自动背景提取?_Django_Google Chrome - Fatal编程技术网

Django 我应该如何针对浏览器保护web服务';自动背景提取?

Django 我应该如何针对浏览器保护web服务';自动背景提取?,django,google-chrome,Django,Google Chrome,我有一个在Django建立的无聊的公司网站,做一些无聊的公司事情 这个网站的一个组成部分是后台任务,将一些无聊的公司事务从一个地方FTP到另一个地方。当您转到适当的URL时,可以触发后台工作程序中的更改(即:开始、停止、检查状态) 这里的问题是,当我在Chrome中工作时,有时键入类似URL的一部分会导致Chrome发送GET请求(或Django解释为GET请求的内容),以获取作为web服务一部分的页面,从而向后台工作人员发送指令。换言之,无需按键盘上的Enter键,即可启动或停止worker

我有一个在Django建立的无聊的公司网站,做一些无聊的公司事情

这个网站的一个组成部分是后台任务,将一些无聊的公司事务从一个地方FTP到另一个地方。当您转到适当的URL时,可以触发后台工作程序中的更改(即:开始、停止、检查状态)

这里的问题是,当我在Chrome中工作时,有时键入类似URL的一部分会导致Chrome发送GET请求(或Django解释为GET请求的内容),以获取作为web服务一部分的页面,从而向后台工作人员发送指令。换言之,无需按键盘上的Enter键,即可启动或停止worker

问题不在于Chrome的设置。是的,我可以更改设置并自行解决问题,但这不会阻止将来有人键入URL并触发相同的行为

我真正想要的是一种区分这些预取调用和常规用户发起调用的方法,但这似乎不可能。不过,我可能错了。除此之外,我希望有一个设置告诉Chrome不要获取该页面。不幸的是,有一大堆无聊的公司陋习阻碍了一些简单的出路


对于将cookie视为垃圾的计算机和浏览器中没有链接的非技术人员,web服务调用必须是可能的。无法将web服务移动到单独的子域。Django或任何类似的本地化身份验证都无法保护web服务。我希望调用仍然像在浏览器的地址栏中键入URL一样简单,但这不是任何要求。

chrome的操作被认为是“有效的”,因为在HTTP协议中,GET请求被假定不会产生副作用(除了返回响应之外发生的事情,例如触发后台工作程序)。它们应被视为仅用于检索数据。换句话说,。通过让GET请求不仅仅检索数据(例如使后台工作程序启动),您将违反HTTP协议

更改您的站点,使其仅在POST请求中触发这些“更改”。Google chrome不会像GET请求那样发出任意POST请求。您仍然可以使用GET请求用户检索HTML页面,该页面可能包含允许他们进行POST以激活您的各种服务的表单,但不包括资源(URL)如果用户点击来做一些有“副作用”的事情,那么只有在用户发布到资源时,才会产生这种副作用

在Django视图中,您可以使用以下属性检测请求是GET、POST还是其他方法:

if request.method == 'POST':
    do_something()

chrome所做的被认为是“有效的”,因为在HTTP协议中,GET请求被认为不会引起副作用(除了返回响应之外发生的事情,例如触发后台工作程序)。它们应被视为仅用于检索数据。换句话说,。通过让GET请求执行的不仅仅是检索数据(例如启动后台工作程序),您将违反HTTP协议

更改您的站点,使其仅在POST请求中触发这些“更改”。Google chrome不会像GET请求那样发出任意POST请求。您仍然可以使用GET请求用户检索HTML页面,该页面可能包含允许他们进行POST以激活您的各种服务的表单,但不包括资源(URL)如果用户点击来做一些有“副作用”的事情,那么只有在用户发布到资源时,才会产生这种副作用

在Django视图中,您可以使用以下属性检测请求是GET、POST还是其他方法:

if request.method == 'POST':
    do_something()