详解 URL 编码与 HTTP 状态码(十八)
- 计算机网络
- 1天前
- 5热度
- 0评论
在现代 Web 开发中,URL 编码和 HTTP 状态码是两个非常重要的概念。本文将详细介绍 URL 编码的原理、方法以及 HTTP 状态码的分类和常见状态码的含义。通过本文,你将能够更好地理解和处理这些技术细节,提升开发效率和代码质量。
什么是 URL?
URL(Uniform Resource Locator,统一资源定位器)是互联网上资源的唯一地址。例如,https://www.example.com 就是一个典型的 URL。浏览器通过这个地址从 Web 服务器请求页面内容,并显示给用户。
URL 编码的重要性
URL 只能使用 ASCII 字符集进行传输。然而,许多字符(如空格、特殊符号等)并不属于 ASCII 字符集。为了确保这些字符能够正确地通过互联网传输,我们需要对它们进行 URL 编码。
URL 编码的基本原理
URL 编码使用 % 符号后跟两位的十六进制数来表示非 ASCII 字符。例如,空格会被编码为 %20,感叹号会被编码为 %21。此外,URL 编码通常使用 + 符号来替代空格。
实际操作示例
假设你在表单中输入了一个包含空格和特殊字符的字符串,例如 Hello World!。当你点击提交按钮时,浏览器会自动将这个字符串进行 URL 编码,变成 Hello%20World%21。服务器接收到这个编码后的字符串后,会将其解码还原为原始字符串。
常见的 URL 编码函数
不同的编程语言提供了不同的 URL 编码函数。以下是一些常见的示例:
- JavaScript: encodeURI() 和 encodeURIComponent()
- PHP: rawurlencode()
- ASP: Server.URLEncode()
JavaScript 示例
const originalString = "Hello World!";
const encodedString = encodeURIComponent(originalString);
console.log(encodedString); // 输出: Hello%20World%21PHP 示例
$originalString = "Hello World!";
$encodedString = rawurlencode($originalString);
echo $encodedString; // 输出: Hello%20World%21URL 编码参考手册
以下是一些常用字符的 URL 编码对照表:
| ASCII 字符 | URL-编码 |
|---|---|
| 空格 | %20 |
| ! | %21 |
| " | %22 |
| # | %23 |
| $ | %24 |
| % | %25 |
| & | %26 |
| ' | %27 |
| ( | %28 |
| ) | %29 |
| * | %2A |
| + | %2B |
| , | %2C |
| - | %2D |
| . | %2E |
| / | %2F |
| 0 | %30 |
| 1 | %31 |
| 2 | %32 |
| 3 | %33 |
| 4 | %34 |
| 5 | %35 |
| 6 | %36 |
| 7 | %37 |
| 8 | %38 |
| 9 | %39 |
| : | %3A |
| ; | %3B |
| < | %3C |
| = | %3D |
| > | %3E |
| ? | %3F |
| @ | %40 |
| A | %41 |
| B | %42 |
| C | %43 |
| D | %44 |
| E | %45 |
| F | %46 |
| G | %47 |
| H | %48 |
| I | %49 |
| J | %4A |
| K | %4B |
| L | %4C |
| M | %4D |
| N | %4E |
| O | %4F |
| P | %50 |
| Q | %51 |
| R | %52 |
| S | %53 |
| T | %54 |
| U | %55 |
| V | %56 |
| W | %57 |
| X | %58 |
| Y | %59 |
| Z | %5A |
| [ | %5B |
| \ | %5C |
| ] | %5D |
| ^ | %5E |
| _ | %5F |
| %60 | |
| a | %61 |
| b | %62 |
| c | %63 |
| d | %64 |
| e | %65 |
| f | %66 |
| g | %67 |
| h | %68 |
| i | %69 |
| j | %6A |
| k | %6B |
| l | %6C |
| m | %6D |
| n | %6E |
| o | %6F |
| p | %70 |
| q | %71 |
| r | %72 |
| s | %73 |
| t | %74 |
| u | %75 |
| v | %76 |
| w | %77 |
| x | %78 |
| y | %79 |
| z | %7A |
| { | %7B |
| | | %7C |
| } | %7D |
| ~ | %7E |
ASCII 控制字符的 URL 编码
ASCII 控制字符最初用于控制打印机和磁带驱动器等硬件设备。在 URL 中,这些字符需要进行编码以确保其正确传输。
| ASCII 字符 | 描述 | URL-编码 |
|---|---|---|
| NUL | null character | %00 |
| SOH | start of header | %01 |
| STX | start of text | %02 |
| ETX | end of text | %03 |
| EOT | end of transmission | %04 |
| ENQ | enquiry | %05 |
| ACK | acknowledge | %06 |
| BEL | bell (ring) | %07 |
| BS | backspace | %08 |
| HT | horizontal tab | %09 |
| LF | line feed | %0A |
| VT | vertical tab | %0B |
| FF | form feed | %0C |
| CR | carriage return | %0D |
| SO | shift out | %0E |
| SI | shift in | %0F |
| DLE | data link escape | %10 |
| DC1 | device control 1 | %11 | | DC2 | device control 2 | %12 | | DC3 | device control 3 | %13 | | DC4 | device control 4 | %14 | | NAK | negative acknowledge | %15 | | SYN | synchronize | %16 | | ETB | end transmission block | %17 | | CAN | cancel | %18 | | EM | end of medium | %19 | | SUB | substitute | %1A | | ESC | escape | %1B | | FS | file separator | %1C | | GS | group separator | %1D | | RS | record separator | %1E | | US | unit separator | %1F |
ISO 语言代码
在 HTML 和 XHTML 中,可以通过 lang 属性声明网页或部分内容的语言。这对于搜索引擎和浏览器来说非常重要,有助于提高页面的可访问性和国际化支持。
声明语言的示例
在 HTML 中:
html &lt;html lang="en"&gt; ... &lt;/html&gt;
在 XHTML 中:
html &lt;html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"&gt; ... &lt;/html&gt;
ISO 639-1 语言代码
ISO 639-1 为各种语言定义了缩略词,这些缩略词可以在 lang 和 xml:lang` 属性中使用。
| 语言 | ISO 代码 |
|---|---|
| Abkhazian | ab |
| Afar | aa |
| Afrikaans | af |
| Albanian | sq |
| Amharic | am |
| Arabic | ar |
| Aragonese | an |
| Armenian | hy |
| Assamese | as |
| Aymara | ay |
| Azerbaijani | az |
| Bashkir | ba |
| Basque | eu |
| Bengali (Bangla) | bn |
| Bhutani | dz |
| Bihari | bh |
| Bislama | bi |
| Breton | br |
| Bulgarian | bg |
| Burmese | my |
| Byelorussian (Belarusian) | be |
| Cambodian | km |
| Catalan | ca |
| Cherokee | |
| Chewa | |
| Chinese (简体) | zh |
| Chinese (繁体) | zh |
| Corsican | co |
| Croatian | hr |
| Czech | cs |
| Danish | da |
| Divehi | |
| Dutch | nl |
| Edo | |
| English | en |
| Esperanto | eo |
| Estonian | et |
| Faeroese | fo |
| Farsi | fa |
| Fiji | fj |
| Finnish | fi |
| Flemish | |
| French | fr |
| Frisian | fy |
| Fulfulde | |
| Galician | gl |
| Gaelic (Scottish) | gd |
| Gaelic (Manx) | gv |
| Georgian | ka |
| German | de |
| Greek | el |
| Greenlandic | kl |
| Guarani | gn |
| Gujarati | gu |
| Haitian Creole | ht |
| Hausa | ha |
| Hawaiian | |
| Hebrew | he, iw |
| Hindi | hi |
| Hungarian | hu |
| Ibibio | |
| Icelandic | is |
| Ido | io |
| Igbo | |
| Indonesian | id, in |
| Interlingua | ia |
| Interlingue | ie |
| Inuktitut | iu |
| Inupiak | ik |
| Irish | ga |
| Italian | it |
| Japanese | ja |
| Javanese | jv |
| Kannada | kn |
| Kanuri | |
| Kashmiri | ks |
| Kazakh | kk |
| Kinyarwanda (Ruanda) | rw |
| Kirghiz | ky |
| Kirundi (Rundi) | rn |
| Konkani | |
| Korean | ko |
| Kurdish | ku |
| Laothian | lo |
| Latin | la |
| Latvian (Lettish) | lv |
| Limburgish ( Limburger) | li |
| Lingala | ln |
| Lithuanian | lt |
| Macedonian | mk |
| Malagasy | mg |
| Malay | ms |
| Malayalam | ml |
| Maltese | mt |
| Maori | mi |
| Marathi | mr |
| Moldavian | mo |
| Mongolian | mn |
| Nauru | na |
| Nepali | ne |
| Norwegian | no |
| Occitan | oc |
| Oriya | or |
| Oromo (Afaan Oromo) | om |
| Papiamentu | |
| Pashto (Pushto) | ps |
| Polish | pl |
| Portuguese | pt |
| Punjabi | pa |
| Quechua | qu |
| Rhaeto-Romance | rm |
| Romanian | ro |
| Russian | ru |
| Sami (Lappish) | |
| Samoan | sm |
| Sangro | sg |
| Sanskrit | sa |
| Serbian | sr |
| Serbo-Croatian | sh | | Sesotho | st | | Setswana | tn | | Shona | sn | | Sichuan Yi | ii | | Sindhi | sd | | Sinhalese | si | | Siswati | ss | | Slovak | sk | | Slovenian | sl | | Somali | so | | Spanish | es | | Sundanese | su | | Swahili (Kiswahili) | sw | | Swedish | sv | | Syriac | | | Tagalog | tl | | Tajik | tg | | Tamazight | | | Tamil | ta | | Tatar | tt | | Telugu | te | | Thai | th | | Tibetan | bo | | Tigrinya | ti | | Tonga | to | | Tsonga | ts | | Turkish | tr | | Turkmen | tk | | Twi | tw | | Uighur | ug | | Ukrainian | uk | | Urdu | ur | | Uzbek | uz | | Venda | | | Vietnamese | vi | | Volapük | vo | | Wallon | wa | | Welsh | cy | | Wolof | wo | | Xhosa | xh | | Yi | | | Yiddish | yi, ji | | Yoruba | yo | | Zulu | zu |
HTTP 状态码
HTTP 状态码是由服务器返回给客户端的响应代码,用于指示请求的处理结果。这些状态码分为五个类别,每个类别都有特定的含义。
1xx: 信息
| 消息 | 描述 |
|---|---|
| 100 Continue | 服务器仅接收到部分请求,如果服务器没有拒绝该请求,客户端应该继续发送其余的请求。 |
| 101 Switching Protocols | 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 |
| 103 Checkpoint | 用于 PUT 或者 POST 请求恢复 |
2xx: 成功
| 消息 | 描述 |
|---|---|
| 200 OK | 请求成功,响应中包含所请求的数据。 |
| 201 Created | 请求成功并且服务器创建了新的资源。 |
| 202 Accepted | 请求已被接受,但尚未处理完成。 |
| 204 No Content | 请求成功,但响应中没有内容。 |
3xx: 重定向
| 消息 | 描述 |
|---|---|
| 301 Moved Permanently | 资源已永久移动到新位置。 |
| 302 Found | 资源临时移动到新位置。 |
| 304 Not Modified | 资源未修改,客户端可以使用缓存版本。 |
4xx: 客户端错误
| 消息 | 描述 |
|---|---|
| 400 Bad Request | 请求无效或无法理解。 |
| 401 Unauthorized | 请求需要用户认证。 |
| 403 Forbidden | 服务器理解请求,但拒绝执行。 |
| 404 Not Found | 请求的资源不存在。 |
5xx: 服务器错误
| 消息 | 描述 |
|---|---|
| 500 Internal Server Error | 服务器遇到意外情况,无法完成请求。 |
| 501 Not Implemented | 服务器不支持请求的方法。 |
| 502 Bad Gateway | 服务器作为网关或代理时,从上游服务器收到了无效的响应。 |
| 503 Service Unavailable | 服务器暂时无法处理请求,通常是过载或维护导致。 |
总结
通过本文,我们详细介绍了 URL 编码的原理和方法,以及 HTTP 状态码的分类和常见状态码的含义。了解这些基础知识对于 Web 开发者来说至关重要,可以帮助你更好地处理网络请求和响应,提升开发效率和代码质量。希望本文对你有所帮助!