簡體   English   中英

jQuery - Ajax在某些帖子上返回錯誤500

[英]jQuery - Ajax returning error 500 on some posts

我有一些Ajax一直在現場工作,現在它已停止工作。 Ajax應該返回一個頁面,但返回500錯誤(內部服務器錯誤)

奇怪的是我可以導航並發布到Ajax正在調用的頁面,因此頁面只能通過Ajax調用($ .post)工作。

另一個奇怪的事情是它在當地工作正常,但不是活着。 此外,該網站上的所有其他Ajax都在工作。

這有什么可能是最模糊的? 順便說一下,它是CakePHP的所有jQuery。

編輯

apache錯誤日志說:“腳本標題過早結束:php-script,referer ......”

編輯2

這一切都發生在我將服務器切換到SSL時。 它說上面的錯誤,然后是“端口80”。

首先,這與jQuery,AJAX,POST,CakePHP或HTTP標頭無關。 完整的錯誤消息是“腳本過早結束”,這意味着Apache用於運行PHP腳本的PHP進程意外終止(即,在PHP進程完成其部分Fast CGI協議之前)。 這通常意味着PHP進程崩潰或導致“分段錯誤”。

PHP分段錯誤可能很難排除故障,它們永遠不會發生; PHP永遠不會崩潰。 崩潰的原因可能是由於許多事情。 也許這是一個簡單的修復。

我要做的第一件事是完全卸載PHP並安裝最新的穩定版本。 如果您運行的是PHP 5.3和Windows,那么您應該只使用VC6二進制文件(“VC6 x86 Thread Safe”軟件包); 當使用Apache時,VC9包將導致PHP崩潰。 重新安裝可能會解決您的問題,因為較舊版本的PHP的擴展DLL / SO可能仍然存在於實時服務器上的擴展目錄中。

如果在Windows上並使用MySQL,我要做的下一件事就是確保MySQL bin目錄位於實時服務器的Path 這樣做的原因是為了確保操作系統“找到” libmySQL.dll 您應該能夠SSH到實時服務器,鍵入mysql --help ,並查看MySQL CLI客戶端的用法消息。 如果將MySQL bin目錄添加到Path重新啟動Apache。

如果這兩個建議都無法解決問題,請通過以下答案更新您的問題:

  1. 您是使用網絡主機還是公司IT團隊管理服務器供您使用?
  2. 如果使用Web主機,您是否租用專用服務器?
  3. 你在運行什么操作系統?
  4. 您使用的是哪個版本的PHP?
  5. 正在加載什么PHP擴展?
  6. 你加載Zend擴展嗎?
  7. 你有沒有使用過dl

更新:對於5.3.6及更高版本,PHP項目不再釋放“VC6”安裝程序。 建議從Apache Lounge安裝Apache HTTPD版本並使用“VC9”安裝程序。

檢查你的apache和php error logs 它會在那里


導致此問題的最常見原因是腳本在將完整的標頭集(或可能任何標頭)發送到服務器之前死亡。 要查看是否是這種情況,請嘗試從交互式會話中獨立運行腳本,而不是作為服務器下的腳本運行。 如果收到錯誤消息,這幾乎肯定是“腳本頭過早結束”消息的原因。 即使CGI從命令行運行正常,請記住在Web服務器下運行時環境和權限可能不同。 CGI只能訪問Apache配置中指定的用戶和組所允許的資源。 此外,環境與命令行中提供的環境不同,但可以使用mod_env提供的指令進行調整。

第二個最常見的原因(除了人們根本沒有輸出所需的標題)是與Perl的輸出緩沖交互的結果。 要在每個輸出語句之后使Perl刷新其緩沖區,請在發送HTTP標頭的print或write語句周圍插入以下語句:

{
    local ($oldbar) = $|;
    $cfh = select (STDOUT);
    $| = 1;
    #
    # print your HTTP headers here
    #
    $| = $oldbar;
    select ($cfh);
}

這通常僅在從腳本調用將輸出發送到stdout的外部程序時,或者在發送標頭和開始發送實際內容之間會有很長的延遲時才需要。 為了最大限度地提高性能,您應該在發送標頭的語句之后關閉緩沖區刷新(使用$ | = 0或等效項),如上所示。

如果您的腳本不是用Perl編寫的,那么對於您使用的任何語言都要做同等的事情(例如,對於C,在編寫標題后調用fflush())。

“腳本標頭過早結束”消息的另一個原因是RLimitCPU和RLimitMEM指令。 如果CGI腳本因資源限制而被終止,您可能會收到消息。

此外,suEXEC,mod_perl或其他第三方模塊中的配置問題通常會干擾CGI的執行並導致“腳本標頭過早結束”消息。


CPHP:

摘自http://henrik.nyh.se/2007/04/premature-end-of-script-headers-for-cgi-can-be-directory-permissions

除了Apache FAQ中列出的原因之外,CGI腳本的錯誤日志消息“腳本頭的過早結束”(在我的例子中是Dreamhost上的Ruby腳本)也可能意味着包含該腳本的目錄是全局可寫的。

因此像drwxr-xrwx這樣的文件夾權限可能會導致此錯誤。 chmod 755 mydir會將這些權限更改為drwxr-xr-x,一切都很好。

我想Apache / suEXEC在運行任何惡意用戶可以編輯的東西時會遇到問題。

值得檢查目錄權限。

在單獨的說明中,您說在更改站點以使用SSL時出現問題,但是錯誤提到端口80.端口80用於標准HTTP流量,但端口443用於SSL流量 - 如果流量通過端口80可能存在服務器配置錯誤,應該存在HTTPS的HTTP或證書問題。 我看到證書過期時會發生類似的錯誤。 使用SSL的URL(調用頁面和腳本)都是?

您應該檢查php error.log,在我的情況下,我已經使用redis設置了緩存類型,但它無法正常工作。

您可以使用Fidler檢查服務器在$ .post期間返回的內容。 如果您直接在瀏覽器中運行相同的方法,它將包含將被返回的網頁。

這個錯誤有點問題,因為它可能是由很多東西引起的。

你的頁面在做什么......? 以下是一些建議。

如果您的頁面就像一個自動完成的頁面,那么您傳遞一些信息並獲得結果的篩選列表...也許您的AJAX腳本沒有傳回數據項,而您的頁面正在嘗試返回所有內容。 真正龐大的PHP腳本(即密集/遞歸操作)可能會導致此錯誤。

處理這個特定錯誤的正常建議是去掉一個穩定的頁面,然后重新開始添加東西 - 所以也許把你的AJAX腳本指向一個有這個的頁面......

<?php
    echo 'If this appears, we\'re stable!';
?>

然后逐漸添加代碼塊,直到遇到問題。 我建議的本頁第2版將是......

<?php
    print_r($_POST);
?>

因為這將允許您檢查表單帖子中的內容。

如果不能滿足以上所有要求,請提供以下信息......

1)PHP頁面的功能描述,或者代碼示例。 2)調用PHP頁面的JavaScript代碼。

也許生產站點違反了相同的原始政策

瀏覽器中的URL到第三個斜杠,必須與AJAX POST中的URL完全匹配,否則Javascript的瀏覽器安全性約束將拒絕響應。 服務器實際上可以看到請求並正確響應,但瀏覽器將空字符串交回給AJAX調用。

我想把我的2美分投入,但它來自一個稍微不同的方向,你可能有或沒有直接的資源進行故障排除 - 但值得考慮。

但一般來說,這是一個PHP錯誤,我們可以排除客戶端問題。 最重要的是,在我的日常工作(網絡故障排除)中,如果有什么工作然后停止,我會立即想到“改變了什么”。 如果您沒有向腳本添加任何內容,並且用戶無法在運行時影響腳本,那么我會立即開始思考“呃 - 哦,基礎設施是什么”。 如果某些東西在本地工作,但不在互聯網上,則尤其如此。

您是否檢查過服務器上的內存不良或網卡壞(如果網卡壞了,這可以解釋為什么它可以在一個接口而不是另一個接口上工作)。 您是否可以訪問此主機或托管主機(您的主機可以檢查)嗎?

接下來我會開始思考,好吧,服務器內存很好,並且它不太可能與NIC有關,否則會在不同的地方失敗。 但仍然可以建立網絡。 是否有一個安全設備可以在混合中的任何地方破壞數據包(NIDS / HIDS,WAF,代理等?)您是否看到數據包的任何網絡問題(重復,亂序,不碎片等等)。

老實說,如果有人給我打電話並向我描述了你的問題,我首先要說的是“檢查IPS日志”大約85%就是問題。 誤報可以做到這一點,只需要在防火牆上進行一次自動更新......

我希望有所幫助。

我也有這個問題,在我的情況下解決方案是用干凈的文件替換php.ini文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM