HTTP çéå®å
URL éå®åï¼ä¹ç§°ä¸º URL 转åï¼æ¯ä¸ç§ä¸ºé¡µé¢ã表åæè æ´ä¸ª Web ç«ç¹/åºç¨æä¾å¤ä¸ª URL å°åçææ¯ãHTTP å¯¹æ¤æä½æä¸ç§ç¹æ®ç±»åçååºï¼ç§°ä¸º HTTP éå®åï¼HTTP redirectï¼ã
éå®åå¯å®ç°è®¸å¤ç®æ ï¼
- ç«ç¹ç»´æ¤æåæºæé´ç临æ¶éå®åã
- æ°¸ä¹ éå®åå°å¨æ´æ¹ç«ç¹ç URL åï¼ä¿çç°æç龿¥/书ç¾ãä¸ä¼ æä»¶æ¶è¡¨ç¤ºè¿åº¦ç页é¢çã
åç
å¨ HTTP åè®®ä¸ï¼éå®åæä½ç±æå¡å¨å请æ±åéç¹æ®çéå®åååºè触åãéå®åååºå
å«ä»¥ 3 å¼å¤´çç¶æç ï¼ä»¥å Location æ 头ï¼å
¶ä¿åçéå®åç URLã
æµè§å¨å¨æ¥æ¶å°éå®åæ¶ï¼å®ä»¬ä¼ç«å»å è½½ Location æ 头䏿ä¾çæ° URLãé¤äºé¢å¤çå¾è¿æä½ä¸ä¼æä¸å°é¨åæ§è½æå¤±ä¹å¤ï¼éå®åæä½å¯¹äºç¨æ·æ¥è¯´æ¯ä¸å¯è§çã
ä¸åç±»åçéå®åæ å°å¯ä»¥åå为ä¸ä¸ªç±»å«ï¼
æ°¸ä¹ éå®å
è¿ç§éå®åæä½æ¯æ°¸ä¹ æ§çãå®è¡¨ç¤ºå URL ä¸åºå被使ç¨ï¼èéç¨æ°ç URL æ¿æ¢å®ãæç´¢å¼ææºå¨äººãRSS é 读å¨ä»¥åå ¶ä»ç¬è«å°æ´æ°èµæºåå§ç URLã
| ç¶æç | ç¶æææ¬ | å¤çæ¹æ³ | å ¸ååºç¨åºæ¯ |
|---|---|---|---|
301 |
Moved Permanently |
GET æ¹æ³ä¸ä¼åçåæ´ãå
¶ä»æ¹æ³æå¯è½ä¼åæ´ä¸º GET æ¹æ³ã[1] |
ç½ç«éæã |
308 |
Permanent Redirect |
æ¹æ³åæ¶æ¯ä¸»ä½é½ä¸åçååã | 使ç¨ç¨äºé GET 龿¥/æä½éç»ç½ç«ã |
[1] 该è§èæ æä½¿æ¹æ³åçæ¹åï¼ä½å¨å®é
åºç¨ä¸ç¨æ·ä»£ç伿´æ¹å
¶æ¹æ³ã308 ç¶æç 被åå»ºç¨æ¥æ¶é¤å¨ä½¿ç¨é GET æ¹æ³æ¶è¡ä¸ºçæ§ä¹ã
临æ¶éå®å
ææ¶å请æ±çèµæºæ æ³ä»å ¶æ åå°å访é®ï¼ä½æ¯å´å¯ä»¥ä»å¦å¤çå°æ¹è®¿é®ãå¨è¿ç§æ åµä¸ï¼å¯ä»¥ä½¿ç¨ä¸´æ¶éå®åã
æç´¢å¼æåå ¶ä»ç¬è«ä¸ä¼è®°å½æ°çã临æ¶ç URLãå¨åå»ºãæ´æ°æè å é¤èµæºçæ¶åï¼ä¸´æ¶éå®åä¹å¯ä»¥ç¨äºæ¾ç¤ºä¸´æ¶æ§çè¿åº¦é¡µé¢ã
| ç¶æç | ç¶æææ¬ | å¤çæ¹æ³ | å ¸ååºç¨åºæ¯ |
|---|---|---|---|
302 |
Found |
GET æ¹æ³ä¸ä¼åçåæ´ãå
¶ä»æ¹æ³æå¯è½ä¼åæ´ä¸º GET æ¹æ³ã[2] |
ç±äºä¸å¯é¢è§çåå è¯¥é¡µé¢æä¸å¯ç¨ã |
303 |
See Other |
GET æ¹æ³ä¸ä¼åçåæ´ï¼å
¶ä»æ¹æ³ä¼åæ´ä¸º GET æ¹æ³ï¼æ¶æ¯ä¸»ä½ä¸¢å¤±ï¼ã |
ç¨äº PUT æ POST 请æ±å®æä¹åéå®åï¼æ¥é²æ¢ç±äºé¡µé¢å·æ°å¯¼è´çæä½çéå¤è§¦åã |
307 |
Temporary Redirect |
æ¹æ³åæ¶æ¯ä¸»ä½é½ä¸åçååã | ç±äºä¸å¯é¢è§çåå è¯¥é¡µé¢æä¸å¯ç¨ãå½ç«ç¹æ¯æé GET æ¹æ³ç龿¥ææä½çæ¶åï¼è¯¥ç¶æç ä¼äº 302 ç¶æç ã |
[2] 该è§èæ æä½¿æ¹æ³åçæ¹åï¼ä½å¨å®é
åºç¨ä¸ç¨æ·ä»£ç伿¹åå
¶æ¹æ³ã307 ç¶æç 被åå»ºç¨æ¥æ¶é¤å¨ä½¿ç¨é GET æ¹æ³æ¶è¡ä¸ºçæ§ä¹ã
ç¹æ®éå®å
304ï¼Not Modifiedï¼ä¼ä½¿é¡µé¢è·³è½¬å°æ¬å°çç¼å坿¬ä¸ï¼å¯è½å·²è¿æ¶ï¼ï¼è 300ï¼Multiple Choiceï¼åæ¯ä¸ç§æå¨éå®åï¼å°æ¶æ¯ä¸»ä½ä»¥ Web 页é¢å½¢å¼åç°å¨æµè§å¨ä¸ï¼ååºäºå¯è½çéå®å龿¥ï¼ç¨æ·å¯ä»¥ä»ä¸è¿è¡éæ©ã
| ç¶æç | ç¶æææ¬ | å ¸ååºç¨åºæ¯ |
|---|---|---|
300 |
Multiple Choice |
ä¸å¸¸ç¨ï¼ææçé项卿¶æ¯ä¸»ä½ç HTML 页é¢ä¸ååºãé¼å±å¨ Link æ 头ä¸å å
¥æºå¨å¯è¯»ç rel=alternate |
304 |
Not Modified |
åéç¨äºéæ°éªè¯çæ¡ä»¶è¯·æ±ã表示ç¼åçååºä»ç¶æ¯æ°çå¹¶ä¸å¯ä»¥ä½¿ç¨ã |
æå®éå®åçå ¶ä»æ¹å¼
HTTP éå®å䏿¯å®ä¹éå®åçå¯ä¸æ¹æ³ãè¿æä¸¤ä¸ªï¼
HTML éå®åæºå¶
HTTP éå®åæ¯å建éå®åçæä½³æ¹å¼ï¼ä½æ¯ææ¶åä½ å¹¶ä¸è½æ§å¶æå¡å¨ãé对è¿äºç¹å®çåºç¨æ
æ¯ï¼å¯ä»¥å°è¯å¨é¡µé¢ç <head> 䏿·»å ä¸ä¸ª <meta> å
ç´ ï¼å¹¶å°å
¶ http-equiv 屿§çå¼è®¾ç½®ä¸º refreshã彿¾ç¤ºé¡µé¢çæ¶åï¼æµè§å¨ä¼æ£æµè¯¥å
ç´ ï¼ç¶åè·³è½¬å°æå®ç页é¢ã
<head>
<meta http-equiv="Refresh" content="0; URL=http://example.com/" />
</head>
content 屿§çå¼å¼å¤´æ¯ä¸ä¸ªæ°åï¼æç¤ºæµè§å¨å¨çå¾
该æ°å表示çç§æ°ä¹ååè¿è¡è·³è½¬ã建议å§ç»å°å
¶è®¾ç½®ä¸º 0 æ¥è·åæ´å¥½çæ éç¢ä½éªã
æ¾ç¶ï¼è¯¥æ¹æ³ä» éç¨äº HTML 页é¢ï¼æç±»ä¼¼ç页é¢ï¼ï¼ç¶èå¹¶ä¸è½åºç¨äºå¾çæè å ¶ä»ç±»åçå 容ã
JavaScript éå®åæºå¶
å¨ JavaScript ä¸ï¼éå®åæºå¶çåçæ¯è®¾ç½® window.location ç屿§å¼ï¼ç¶åå è½½æ°ç页é¢ã
window.location = "https://example.com/";
ä¸ HTML éå®åæºå¶ç±»ä¼¼ï¼è¿ç§æ¹å¼å¹¶ä¸éç¨äºææç±»åçèµæºï¼å¹¶ä¸æ¾ç¶åªæå¨æ§è¡ JavaScript ç客æ·ç«¯ä¸æè½ä½¿ç¨ãå¦å¤ä¸æ¹é¢ï¼å®ä¹æä¾äºæ´å¤çå¯è½æ§ï¼æ¯å¦å¨åªææ»¡è¶³äºç¹å®çæ¡ä»¶çæ åµä¸æå¯ä»¥è§¦åéå®åæºå¶çåºæ¯ã
ä¼å 级
ç±äºåå¨ä¸è¿°ä¸ç§ URL éå®åæºå¶ï¼é£ä¹å¨å¤ç§æ¹æ³åæ¶è®¾å®çæ åµä¸ï¼åªç§æ¹æ³ä¼é¦å èµ·ä½ç¨å¢ï¼
- HTTP åè®®çéå®åæºå¶æ°¸è¿æå 触åââå®ä»¬çè³å¨æ²¡æä¼ è¾é¡µé¢çæ åµä¸å°±å·²ç»åå¨ã
- HTML çéå®åæºå¶ (
<meta>) ä¼å¨æ²¡æä»»ä½ HTTP åè®®éå®åçæ åµä¸è§¦åã - JavaScript çéå®åæºå¶æ»æ¯ä½ä¸ºæåè¯è¯¸çææ®µï¼å¹¶ä¸åªæå¨å®¢æ·ç«¯å¼å¯äº JavaScript çæ åµä¸æèµ·ä½ç¨ã
妿å¯è½ï¼è¯·éç¨ HTTP åè®®çéå®åæºå¶ï¼èä¸è¦ä½¿ç¨ <meta> å
ç´ éå®åãåå¦å¼å人åä¿®æ¹äº HTTP éå®åï¼èå¿è®°ä¿®æ¹ HTML 页é¢çéå®åï¼é£ä¹äºè
å°±ä¼ä¸ä¸è´ï¼æç»ç»ææè
åºç°æ é循ç¯ï¼æè
导è´å
¶ä»å©æ¢¦çåçã
åºç¨åºæ¯
æä»¥ä¸å ç§åºç¨åºæ¯å¯ä»¥ä½¿ç¨éå®åæºå¶ï¼ä½æ¯éè¦æ³¨æåºè¯¥å°½å¯è½å°éå¶å ¶ä½¿ç¨æ°éï¼å 为æ¯ä¸æ¬¡éå®åé½ä¼å¸¦æ¥æ§è½ä¸çå¼éã
ååå«ç§°
çæ³æ åµä¸ï¼ä¸é¡¹èµæºåªæä¸ä¸ªè®¿é®ä½ç½®ï¼ä¹å°±æ¯åªæä¸ä¸ª URLã使¯ç±äºç§ç§åå ï¼éè¦ä¸ºèµæºè®¾å®ä¸åçåç§°ï¼
- æ©å¤§ç«ç¹çç¨æ·è¦çé¢
-
ä¸ä¸ªå¸¸è§çåºæ¯æ¯ï¼åå¦ç«ç¹ä½äº
www.example.comååä¸ï¼é£ä¹éè¿example.comä¹åºè¯¥å¯ä»¥è®¿é®å°ãè¿ç§æ åµä¸ï¼å¯ä»¥å»ºç«ä»example.comç页é¢å°www.example.comçéå®åãæ¤å¤è¿å¯ä»¥æä¾ä½ åå常è§çåä¹è¯ï¼æè 该åå容æå¯¼è´çæ¼åé误çå«ç§°æ¥éå®åå°ä½ çç½ç«ã - è¿ç§»å°æ°çåå
-
ä¾å¦ï¼å ¬å¸æ¹ååï¼ä½ å¸æç¨æ·å¨æç´¢æ§åç§°çæ¶åï¼ä¾ç¶å¯ä»¥è®¿é®å°åºç¨äºæ°åç§°çç«ç¹ã
- 强å¶ä½¿ç¨ HTTPS
-
å¯¹ä½ ç½ç«ç
http://çæ¬ç请æ±å°éå®åå°ä½ ç½ç«çhttps://çæ¬ã
ä¿æé¾æ¥ææ
å½ä½ éæ Web ç«ç¹çæ¶åï¼èµæºç URL ä¼åçæ¹åãå³ä¾¿æ¯ä½ æ´æ°ç«ç¹å é¨ç龿¥æ¥å¹é æ°ç URLï¼ä¹æ æ³æ§å¶è¢«å¤é¨èµæºä½¿ç¨ç URLã
ä½ å¹¶ä¸æ³å æ¤è使æ§é¾æ¥å¤±æï¼å 为å®ä»¬ä¼ä¸ºä½ 带æ¥å®è´µçç¨æ·å¹¶ä¸å¸®å©ä¼åä½ ç SEOï¼æä»¥éè¦å»ºç«ä»æ§é¾æ¥å°æ°é¾æ¥çéå®åæ å°ã
夿³¨ï¼å³ä¾¿æ¯è¿é¡¹ææ¯å¯ä»¥åæ ·åºç¨äºå é¨é¾æ¥ï¼ä½æ¯åºè¯¥å°½éé¿å å é¨éå®åæ å°ãéå®åæºå¶ä¼å¸¦æ¥ç¸å½å¤§çæ§è½å¼éï¼é¢å¤ç HTTP 请æ±ï¼ãæä»¥å¦æä½ å¯ä»¥éè¿ä¿®å¤é¾æ¥æ¥é¿å çè¯ï¼é£ä¹å°±åºè¯¥å°å ¶ä¿®å¤ã
对äºä¸å®å ¨è¯·æ±ç临æ¶ååº
ä¸å®å ¨ç请æ±ä¼ä¿®æ¹æå¡å¨ç«¯çç¶æï¼åºè¯¥é¿å ç¨æ·æ æçéå¤åéå®ä»¬ã
é常ï¼ä½ 并䏿³è¦ä½ çç¨æ·éå¤åé PUTãPOST æ DELETE 请æ±ãåå¦ä½ 为该类请æ±è¿åååºçè¯ï¼ç®åå°ç¹å»å·æ°æé®å°±ä¼å¯¼è´è¯·æ±çéå¤åéï¼å¯è½å¨ç¡®è®¤æ¶æ¯ä¹åï¼ã
å¨è¿ç§æ
åµä¸ï¼æå¡å¨å¯ä»¥ä¸º URL ååä¸ä¸ª 303ï¼See Otherï¼ååºï¼å
¶ä¸å«ææ£ç¡®çååºä¿¡æ¯ã妿巿°æé®è¢«ç¹å»çè¯ï¼åªä¼å¯¼è´è¯¥é¡µé¢è¢«å·æ°ï¼èä¸ä¼éå¤æäº¤ä¸å®å
¨ç请æ±ã
对äºèæ¶è¯·æ±ç临æ¶ååº
ä¸äºè¯·æ±çå¤çä¼éè¦æ¯è¾é¿çæ¶é´ï¼æ¯å¦ææ¶å DELETE 请æ±ä¼è¢«å®æä¸ºç¨åå¤çãå¨è¿ç§æ
åµä¸ï¼ä¼è¿åä¸ä¸ª 303ï¼See Otherï¼éå®åååºï¼è¯¥ååºé¾æ¥å°ä¸ä¸ªé¡µé¢ï¼è¡¨ç¤ºè¯·æ±çæä½å·²ç»è¢«åå
¥è®¡åï¼å¹¶ä¸æç»ä¼éç¥ç¨æ·æä½çè¿å±æ
åµï¼æè
å
è®¸ç¨æ·å°å
¶åæ¶ã
å¨éç¨æå¡å¨ä¸é ç½®éå®å
>Apache
éå®åå¯ä»¥å¨æå¡å¨çé
ç½®æä»¶ä¸è®¾ç½®ï¼ä¹å¯ä»¥å¨æ¯ä¸ä¸ªæä»¶ç®å½ç .htaccess æä»¶ä¸è®¾ç½®ã
mod_alias 模åæä¾äº Redirect å Redirect_Match ä¸¤ç§æä»¤æ¥è®¾ç½® 302 ååºï¼é»è®¤å¼ï¼ï¼
<VirtualHost *:443>
ServerName example.com
Redirect / https://www.example.com
</VirtualHost>
URL https://example.com/ ä¼è¢«éå®åè³ https://www.example.com/ï¼URL ä¸ç任使件æç®å½ä¹å°éå®åå°è¯¥ URLï¼https://example.com/some-page å°éå®åè³ https://www.example.com/some-pageï¼ã
Redirect_Match æä»¤çåè½ä¸ä¹ç±»ä¼¼ï¼ä¸åä¹å¤å¨äºå®å¯ä»¥éè¿æ£åè¡¨è¾¾å¼æ¥æå®ä¸æ¹åå½±åç URLï¼
RedirectMatch ^/images/(.*)$ https://images.example.com/$1
ä½äº images/ æä»¶å¤¹ä¸çææææ¡£é½ä¼è¢«éå®åè³æ°çååã
å¦æä½ ä¸æ³è¦ä¸´æ¶éå®åï¼å¯ä»¥ä½¿ç¨é¢å¤åæ°ï¼è¦ä¹ä½¿ç¨ç HTTP ç¶æä»£ç ï¼è¦ä¹è®¾ç½® permanetn å
³é®åï¼æ¥è®¾ç½®ä¸åçéå®åï¼
Redirect permanent / https://www.example.com
# â¦acts the same as:
Redirect 301 / https://www.example.com
mod_rewrite 模åä¹å¯ä»¥ç¨æ¥è®¾ç½®éå®åãå®åºç¨èµ·æ¥æ´çµæ´»ï¼ä½ä¹æ´å 夿ã
Nginx
å¨ Nginx ä¸ï¼ä½ å¯ä»¥å建ä¸ä¸ªæå¡å¨æ¨¡åæ¥è¿è¡éå®å设置ï¼
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
è¦å°éå®ååºç¨äºç®å½æè
ä»
æ¯é¨å页é¢ï¼è¯·ä½¿ç¨ rewrite æä»¤ï¼
rewrite ^/images/(.*)$ https://images.example.com/$1 redirect;
rewrite ^/images/(.*)$ https://images.example.com/$1 permanent;
IIS
å¨ IIS ä¸ï¼ä½ å¯ä»¥ä½¿ç¨ <httpRedirect> å
ç´ æ¥é
ç½®éå®åã
éå®åæ»éï¼å¾ªç¯ï¼
å½åç»çéå®åè·¯å¾éå¤ä¹åçè·¯å¾çæ¶åï¼éå®å循ç¯å°±äº§çäºãæ¢å¥è¯è¯´ï¼å°±æ¯é·å ¥äºæ é循ç¯å½ä¸ï¼ä¸ä¼æä¸ä¸ªæç»ç页é¢è¿åã
大夿°æ
åµä¸ï¼è¿å±äºæå¡å¨ç«¯é误ã妿æå¡å¨æ£æµä¸å°ï¼å°±ä¼è¿å 500 Internal Server Errorãåå¦ä½ å¨ä¿®æ¹äºæå¡å¨é
ç½®ä¸ä¹
å°±åºç°äºè¿ä¸ªé®é¢ï¼å
«ææ¯éå°äºéå®å循ç¯ã
ææ¶åï¼æå¡å¨ç«¯æ æ³å¯¹å ¶è¿è¡æ£æµï¼éå®å循ç¯åçäºå¤å°æå¡å¨ä¹é´ï¼å¯¹äºæ¯ä¸å°æå¡å¨æ¥è¯´ï¼é½æ æ³è·å¾ä¸ä¸ªå ¨æ¯å¾ãå¨è¿ç§æ åµä¸ï¼æµè§å¨ä¼è´è´£è¿è¡æ£æµï¼ç¶åè¿åé误信æ¯ãFirefox ä¼åç°å¦ä¸ä¿¡æ¯ï¼
Firefox æ£æµå°è¯¥æå¡å¨æ£å¨å°æåæ¤ç½åçè¯·æ±æ é循ç¯éå®åã
è Chrome åä¼åç°å¦ä¸ä¿¡æ¯ï¼
该ç½é¡µå°ä½ éå®åçæ¬¡æ°è¿å¤ã
æ 论åªä¸ªåºæ¯ï¼ç¨æ·å¯¹æ¤é½æ è½ä¸ºåï¼é¤é客æ·ç«¯åççªåï¼æ¯å¦è¯´ç¼åæè Cookie ä¸å¹é ï¼ã
é¿å éå®å循ç¯é常éè¦ï¼å 为å®ä¼å®å ¨æ¯æç¨æ·çä½éªã