日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

HTTP状态码和编程

發(fā)布時(shí)間:2025/4/14 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP状态码和编程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一 HTTP狀態(tài)碼

狀態(tài)碼
消息
描述
?
100
Continue
只有一部分請求被服務(wù)器接收,但只要沒被服務(wù)器拒絕,客戶端就會(huì)延續(xù)這個(gè)請求
?
101
Switching Protocols
服務(wù)器交換機(jī)協(xié)議
?
200
OK
請求被確認(rèn)
?
201
Created
請求時(shí)完整的,新的資源被創(chuàng)建
?
202
Accepted
請求被接受,但未處理完
?
203
Non-authoritative Information
?
204
No Content
?
205
Reset Content
?
206
Partial Content
?
300
Multiple Choices
一個(gè)超鏈接表,用戶可以選擇一個(gè)超鏈接并訪問,最大支持5個(gè)超鏈接
?
301
Moved Permanently
被請求的頁面已經(jīng)移動(dòng)到了新的URL下
?
302
Found
被請求的頁面暫時(shí)性地移動(dòng)到了新的URL下
?
303
See Other
被請求的頁面可以在一個(gè)不同的URL下找到
?
304
Not Modified
?
305
Use Proxy
?
306
Unused
已經(jīng)不再使用此狀態(tài)碼,但狀態(tài)碼被保留
?
307
Temporary Redirect
被請求的頁面暫時(shí)性地移動(dòng)到了新的URL下
?
400
Bad Request
服務(wù)器無法識(shí)別請求
?
401
Unauthorized
被請求的頁面需要用戶名和密碼
?
402
Payment Required
目前還不能使用此狀態(tài)碼
?
403
Forbidden
禁止訪問所請求的頁面
?
404
Not Found
服務(wù)器無法找到所請求的頁面
?
405
Method Not Allowed
請求中所指定的方法不被允許
?
406
Not Acceptable
服務(wù)器只能創(chuàng)建一個(gè)客戶端無法接受的響應(yīng)
?
407
Proxy Authentication Required
在請求被服務(wù)前必須認(rèn)證一個(gè)代理服務(wù)器
?
408
Request Timeout
請求時(shí)間超過了服務(wù)器所能等待的時(shí)間,連接被斷開
?
409
Conflict
請求有矛盾的地方
?
410
Gone
被請求的頁面不再可用
?
411
Length Required
"Content-Length"沒有被定義,服務(wù)器拒絕接受請求
?
412
Precondition Failed
請求的前提條件被服務(wù)器評(píng)估為false
?
413
Request Entity Too Large
因?yàn)檎埱蟮膶?shí)體太大,服務(wù)器拒絕接受請求
?
414
Request-url Too Long
服務(wù)器拒絕接受請求,因?yàn)閁RL太長。多出現(xiàn)在把"POST"請求轉(zhuǎn)換為"GET"請求時(shí)所附帶的大量查詢信息
?
415
Unsupported Media Type
服務(wù)器拒絕接受請求,因?yàn)槊襟w類型不被支持
?
417
Expectation Failed
?
500
Internal Server Error
請求不完整,服務(wù)器遇見了出乎意料的狀況
?
501
Not Implemented
請求不完整,服務(wù)器不提供所需要的功能
?
502
Bad Gateway
請求不完整,服務(wù)器從上游服務(wù)器接受了一個(gè)無效的響應(yīng)
?
503
Service Unavailable
請求不完整,服務(wù)器暫時(shí)重啟或關(guān)閉
?
504
Gateway Timeout
網(wǎng)關(guān)超時(shí)
?
505
HTTP Version Not Supported
服務(wù)器不支持所指定的HTTP版本


?
HTTP請求與HTTP響應(yīng)的格式相近,都有著如下結(jié)構(gòu):
?以狀態(tài)行+CRLF(回車換行)開始
?零行或多行頭模塊+CRLF
?一個(gè)空行,比如CRLF
?可選的消息體比如文件,查詢數(shù)據(jù),查詢輸出
?
舉例來說,一個(gè)服務(wù)器響應(yīng)頭看起來就像下面這樣:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
? (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
狀態(tài)行包含HTTP版本,一個(gè)狀態(tài)碼,和狀態(tài)碼相對應(yīng)的短消息。

三 JSP對HTTP狀態(tài)碼的編程
<一>
HttpServletResponse 類中用來設(shè)置狀態(tài)碼的方法:
?
方法 & 描述

1
public void setStatus ( int statusCode )
?此方法可以設(shè)置任意的狀態(tài)碼。如果您的響應(yīng)包含一個(gè)特殊的狀態(tài)碼和一個(gè)文檔,請確保在用PrintWriter返回任何內(nèi)容前調(diào)用setStatus方法

2
public void sendRedirect(String url)
?此方法產(chǎn)生302響應(yīng),同時(shí)產(chǎn)生一個(gè) Location 頭告訴URL 一個(gè)新的文檔

3
public void sendError(int code, String message)
?此方法將一個(gè)狀態(tài)碼(通常為 404)和一個(gè)短消息,自動(dòng)插入HTML文檔中并發(fā)回給客戶端

<二> HTTP狀態(tài)碼程序示例

?例子將會(huì)發(fā)送407錯(cuò)誤碼給瀏覽器,然后瀏覽器將會(huì)告訴您"Need authentication!!!"。

<html> <head> <title>Setting HTTP Status Code</title> </head> <body> <%// 設(shè)置錯(cuò)誤代碼,并說明原因response.sendError(407, "Need authentication!!!" ); %> </body> </html>

?

四 Asp.Net對HTTP狀態(tài)碼的編程
每次當(dāng)用戶代理(可以理解為就是IE和Firefox)向Web站點(diǎn)請求一個(gè)URL地址,服務(wù)器都會(huì)給予回復(fù),回復(fù)內(nèi)容包括兩部分:HTTP報(bào)頭,和被請求的內(nèi)容。但僅從瀏覽器上我們通常只能看到內(nèi)容而看不到報(bào)頭信息。所以,我們需要通過一些瀏覽器插件來觀察他們。IE用

WebDeveloper;FireFox用Fiddler。

對SEO而言,我們需要了解的狀態(tài)代碼有:
重定向:301和302
被刪除:404
服務(wù)器錯(cuò)誤:500

302在asp.net中有一個(gè)很常見的原型:Response.Redirect(),請看代碼:

??? protected void Button1_Click(object sender, EventArgs e)
??? {
??????? Response.Redirect("~/target.aspx");
??????? //Server.Transfer("~/target.aspx");
??? }
source.aspx頁面上一個(gè)Button,Click事件中代碼為Response.Redirect(~/target.aspx),點(diǎn)擊source.aspx頁面Button,查看該頁面對應(yīng)的狀態(tài)碼,結(jié)果就是302。

客戶端/服務(wù)器之間往返的過程其實(shí)是這樣的:
1. 點(diǎn)擊Button,產(chǎn)生回發(fā),回發(fā)的目標(biāo)頁面仍然是source.aspx,所以請求仍由source.aspx頁面進(jìn)行處理,這樣才能進(jìn)入source.aspx頁面的Click事件;
2. Click事件中,Response.Redirect(~/target.aspx)所作的事情實(shí)際上就是:
??? 2.1 將回復(fù)中Http報(bào)頭的狀態(tài)碼改成302;
??? 2.1 指明302指向的頁面就是target.aspx;
3. 瀏覽器(用戶代理)收到回復(fù)的報(bào)頭信息后,
??? 3.1 將URL地址欄的地址改成target.aspx;
??? 3.2 向target.aspx發(fā)出請求

和Response.Redirect()同樣著名的是Server.Transfer()。但使用Server.Transfer,你會(huì)發(fā)現(xiàn),頁面對應(yīng)的狀態(tài)碼是200,且地址欄的url并不會(huì)發(fā)生改變,仍然是source.aspx!這是因?yàn)镾erver.Transfer是完全在服務(wù)器端進(jìn)行跳轉(zhuǎn)的。所以一種很流行但我覺得不那么正

確的說法就是:應(yīng)當(dāng)使用Server.Transfer()而不是Response.Redirect()來提高性能。因?yàn)樵诘玫絊erver.Transfer()性能提升的同時(shí),你應(yīng)該權(quán)衡:性能的提高,和由此產(chǎn)生的代價(jià)。很難直接給出一個(gè)答案,這需要依靠具體的情景來做判斷。但我傾向于盡量不使用

Server.Transfer(),因?yàn)?#xff1a;1. 性能提升不大,節(jié)約的其實(shí)就是報(bào)頭信息的往返;2. 清晰的URL無論對于終端用戶,還是開發(fā)調(diào)試,都有很重要的作用。
???????
302意味著重定向是暫時(shí)的,而301則是永久的重定向。
就SEO而言,為了延續(xù)鏈接價(jià)值和排除重復(fù)內(nèi)容 ,我們在以下幾種情況下都可能會(huì)用到301:
1. 域名更換;
2. 多個(gè)域名間映射;如www.freeflying.com和www.freeflying.cn,兩個(gè)域名其實(shí)指向的是同一個(gè)網(wǎng)站,這就會(huì)造成大量的重復(fù)內(nèi)容,對網(wǎng)站的排名不利。
3. 清除默認(rèn)索引頁的重復(fù)問題:比如我們輸入www.freeflying.com/article/時(shí),如果在IIS里進(jìn)行了設(shè)定,將指向www.freeflying.com/article/Default.aspx
4. 其他的“不同域名相同內(nèi)容”的重復(fù)問題,典型的就是URL重寫后,www.freeflying.com/article/321.html和www.freeflying.com/article.aspx?id=321指向的其實(shí)都是同一個(gè)網(wǎng)頁內(nèi)容。

對于404,最直觀的理解就是頁面不存在。如果網(wǎng)站是純靜態(tài)的,這很好理解;但當(dāng)網(wǎng)站做成動(dòng)態(tài)之后,如www.freeflying.com/article/321.html(映射為www.freeflying.com/article.aspx?id=321),雖然id=321的文章已經(jīng)被刪除了,或者根本不存在,但

article.aspx這個(gè)頁面始終是存在的,所以HTTP報(bào)頭的狀態(tài)碼不會(huì)是404,而是200,表示請求成功。
我們假設(shè)一個(gè)網(wǎng)站有id=321/342/6739……的文章都被刪除了,但蜘蛛并不知道,它仍然會(huì)進(jìn)行抓取,結(jié)果它發(fā)現(xiàn),這些不同的URL對應(yīng)的居然全是同一個(gè)頁面。它就會(huì)將其當(dāng)做重復(fù)頁面進(jìn)行處理。

500意味著程序內(nèi)部出現(xiàn)異常,比如3/0,代碼如下:
??? protected void Button1_Click(object sender, EventArgs e)
??? {
??????? int i, j;
??????? i = 8;
??????? j = 0;
??????? this.Label1.Text = (i / j).ToString();
??? }


如果搜索引擎接到一個(gè)500的狀態(tài)碼時(shí),搜索引擎會(huì)理解程序只是出現(xiàn)了暫時(shí)性的錯(cuò)誤,它會(huì)在之后繼續(xù)抓取,查看問題是否已經(jīng)解決,這并不會(huì)給網(wǎng)站帶來太大的問題——只要你能夠盡快恢復(fù)。但是,Asp.net自帶的個(gè)custom error的web.config配置,會(huì)讓我們在不經(jīng)

意間“失誤”。理由和上面講到的404變200類似,當(dāng)轉(zhuǎn)向自定義的error.aspx之后,蜘蛛得到的是成功鏈接error.aspx的200代碼,所以蜘蛛會(huì)以為報(bào)錯(cuò)的originpage.aspx正常的顯示內(nèi)容就是error.aspx的內(nèi)容。不同url參數(shù)的originpage.aspx會(huì)被蜘蛛認(rèn)為是不同的url

,所以蜘蛛會(huì)認(rèn)為這些所有的url都重復(fù)了——后果是很嚴(yán)重的。

認(rèn)識(shí)到問題的嚴(yán)重性之后,我們來看解決問題的辦法,

protected void Page_Load(object sender, EventArgs e){//如果你希望搜索引擎知道這個(gè)url將不再使用Response.StatusCode = 404;//如果你希望告訴搜索引擎這個(gè)url只是出現(xiàn)了暫時(shí)的故障Response.StatusCode = 500;//如果你想永久重定向該頁面Response.StatusCode = 301;Response.RedirectLocation = @"\website1\target.aspx";}



?

總結(jié)

以上是生活随笔為你收集整理的HTTP状态码和编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。