我做一個簡單的jQuery後:POST返回403,如果URL是數據
$.post("script.php", { urls: listOfURLs});
的post
工作正常,如果它不包含的URL,但是,如果有包含的URL,然後我得到:
POST script.php 403 (Forbidden)
有沒有什麼方法可以淨化這個URL列表或者是爲了防止它被403ing?
所涉及的一切都在同一個域上。
我做一個簡單的jQuery後:POST返回403,如果URL是數據
$.post("script.php", { urls: listOfURLs});
的post
工作正常,如果它不包含的URL,但是,如果有包含的URL,然後我得到:
POST script.php 403 (Forbidden)
有沒有什麼方法可以淨化這個URL列表或者是爲了防止它被403ing?
所涉及的一切都在同一個域上。
至於我可以看到:這個「錯誤」是在服務器端。
將作爲第二個參數傳遞給$.post()
方法的對象簡單地序列化爲請求中的數據。
您可以通過檢查瀏覽器的Web控制檯(例如:Firebug的「Net」選項卡,或Firefox內置控制檯的「Network」選項卡或Chrome中的類似選項卡來查看發送到服務器的內容或IE)。我的猜測是你的請求是正確地與你提供的數據一起發送的。
你的服務器用這些數據做什麼是另一回事;您需要調試您的服務器配置和服務器端代碼,以確定您的請求最終如何觸發403
。
403
的一個可能原因是文件權限不正確。檢查您的文件權限是否允許Web服務器訪問它們。
例如,如果您使用的是標準的Apache/Linux配置,檢查:
www-data
對所有代碼目錄www-data
對所有代碼文件r
權利x
權利www-data
對應該下載或上傳的文件有正確的權利我想他說他只有在發送'urls:listOfURLs'時纔得到403。 – sam
對不起錯過賞金窗口......這就是問題所在。在我不知道的情況下,服務器上出現了一些瘋狂的安全事件,將我的POST標記爲惡意並阻止它們。 – brentonstrine
更改寫入允許工作的權限 – ToughPal
這完全取決於你的listOfURLs
是什麼,你只需要記住的是,POST請求的數據部分,應該永遠是一個字符串,所以解決方案可能是:
如果ListOfURLs是一個數組,你應該這樣做:
$ .post(「script.php」,{'urls []':[「URL1」,「URL2」]});
如果是表單數據,則可以將其序列化爲一個json
字符串。
如果沒有任何的那個,儘量使它像json
一樣。
,並請,如果這也不行,爲我們提供有關數據本身
也嘗試[$ .param](http://api.jquery.com/jQuery.param/)(listOfURLs,true) – sam
403告訴你一些額外的細節,該系統試圖訪問一個網址或資源使用,您對對象試圖發送。
我不是這個ajax調用的簡短形式的粉絲。如果您想了解更多代碼概述,請使用long syntax of JQuery。 See this for more information.
$.ajax({
type: "POST",
url: url,
data: listofURLs2JSON,
dataType: "json",
statusCode: {
404: function() {
alert("List of urls. Nooooo");
}
},
success: function(data) {
alert("This was totally awesome!");
},
});
正如Labib指出的那樣,您可以避免使用JSON的403。反序列化對象使用JSON.stringify:
var listofURLs2JSON = JSON.stringify(array/object, callback);
然後你就可以接收對象爲字符串,並使用PHP的功能,如json_decode
檢索數據爲變量,做你想做的,併發送回通過json_encode
。
試URL編碼傳遞給它
var encodedUrl = encodeURIComponent(url);
。在你的代碼中的錯誤。與此
$.post("script.php", { 'urls[]': listOfURLs});
因爲listOfURLs
是一個JavaScript 陣列
$.post("script.php", { urls: listOfURLs});
:此時應更換此。這可以解釋爲什麼你的代碼在URL列表爲空時工作。
見post()
文檔頁面上的第三個例子:jQuery.post() |jQuery API
如果不幫助我將嘗試使用Fiddler2在當它後你的代碼正在調用密切關注。該程序將顯示正在調用的URL和發佈的數據。這對於調試這類問題非常有用。
您是否使用Nginx作爲您的Web服務器? Nginx不支持這樣的發佈請求;您可以通過將以下內容添加到服務器下的配置來解決此限制。
error_page 405 =200 $request_uri;
什麼是實際發生的是Nginx的是生成HTTP響應405,然後試圖訪問錯誤文檔HTTP 405並獲得對所顯示403。
是你的網站在線??? –
是的它在線。 – brentonstrine
給出您使用此代碼的頁面的鏈接? –