✨✨ 欢迎大家来到小伞的大讲堂✨✨养成好习惯先赞后看哦~所属专栏LInux小伞的主页xiaosan_bloggitee:许星让 (xu-xingrang) - Gitee.com制作不易点个赞吧谢谢喵Http协议在互联网世界中 HTTPHyperText Transfer Protocol 超文本传输协议 是一个至关重要的协议。 它定义了客户端如浏览器 与服务器之间如何通信 以交换或传输超文本如 HTML 文档 。HTTP 协议是客户端与服务器之间通信的基础。 客户端通过 HTTP 协议向服务器发送请求 服务器收到请求后处理并返回响应。HTTP 协议是一个无连接、 无状态的协议即每次请求都需要建立新的连接 且服务器不会保存客户端的状态信息。当我们更改文本时页面并不会立刻产生更改而是等建立新连接把文件传输一次1. URL网址 其实就是说的 URL1.1 urlencode 和 urldecode我们为什么需要编码呢在标准的URL规范中某些字符是不允许直接出现在URL中的例如空格、#、%等。这些字符需要进行URL编码以避免在传输过程中出现问题。例如空格可以编码为%20或而其他特殊字符则会被转换为相应的百分号编码形式。1.1.2 编码原理URL编码的基本原理是将需要转码的字符转换为16进制然后在每个字节前加上百分号。例如空格的ASCII码是32对应的16进制是20那么URL编码结果是%20。对于中文字符例如“中”的ASCII码是-10544对应的16进制是D6D0那么URL编码结果是%D6%D0。 被转义成了 %2Burldecode 就是 urlencode 的逆过程解码;1.1.3 编码工具1.通过ASCII码值手动编码ASCII码值对照表二进制八进制十进制十六进制字符/缩写解释00000000000000NUL (NULL)空字符00000001001101SOH (Start Of Headling)标题开始00000010002202STX (Start Of Text)正文开始00000011003303ETX (End Of Text)正文结束00000100004404EOT (End Of Transmission)传输结束00000101005505ENQ (Enquiry)请求00000110006606ACK (Acknowledge)回应/响应/收到通知00000111007707BEL (Bell)响铃00001000010808BS (Backspace)退格00001001011909HT (Horizontal Tab)水平制表符00001010012100ALF/NL(Line Feed/New Line)换行键00001011013110BVT (Vertical Tab)垂直制表符00001100014120CFF/NP (Form Feed/New Page)换页键00001101015130DCR (Carriage Return)回车键00001110016140ESO (Shift Out)不用切换00001111017150FSI (Shift In)启用切换000100000201610DLE (Data Link Escape)数据链路转义000100010211711DC1/XON(Device Control 1/Transmission On)设备控制1/传输开始000100100221812DC2 (Device Control 2)设备控制2000100110231913DC3/XOFF(Device Control 3/Transmission Off)设备控制3/传输中断000101000242014DC4 (Device Control 4)设备控制4000101010252115NAK (Negative Acknowledge)无响应/非正常响应/拒绝接收000101100262216SYN (Synchronous Idle)同步空闲000101110272317ETB (End of Transmission Block)传输块结束/块传输终止000110000302418CAN (Cancel)取消000110010312519EM (End of Medium)已到介质末端/介质存储已满/介质中断00011010032261ASUB (Substitute)替补/替换00011011033271BESC (Escape)逃离/取消00011100034281CFS (File Separator)文件分割符00011101035291DGS (Group Separator)组分隔符/分组符00011110036301ERS (Record Separator)记录分离符00011111037311FUS (Unit Separator)单元分隔符001000000403220(Space)空格001000010413321!001000100423422001000110433523#001001000443624$001001010453725%001001100463826001001110473927001010000504028(001010010514129)00101010052422A*00101011053432B00101100054442C,00101101055452D-00101110056462E.00101111057472F/001100000604830000110001061493110011001006250322001100110635133300110100064523440011010106553355001101100665436600110111067553770011100007056388001110010715739900111010072583A:00111011073593B;00111100074603C00111101075613D00111110076623E00111111077633F?010000001006440010000011016541A010000101026642B010000111036743C010001001046844D010001011056945E010001101067046F010001111077147G010010001107248H010010011117349I01001010112744AJ01001011113754BK01001100114764CL01001101115774DM01001110116784EN01001111117794FO010100001208050P010100011218151Q010100101228252R010100111238353S010101001248454T010101011258555U010101101268656V010101111278757W010110001308858X010110011318959Y01011010132905AZ01011011133915B[01011100134925C\01011101135935D]01011110136945E^01011111137955F_011000001409660011000011419761a011000101429862b011000111439963c0110010014410064d0110010114510165e0110011014610266f0110011114710367g0110100015010468h0110100115110569i011010101521066Aj011010111531076Bk011011001541086Cl011011011551096Dm011011101561106En011011111571116Fo0111000016011270p0111000116111371q0111001016211472r0111001116311573s0111010016411674t0111010116511775u0111011016611876v0111011116711977w0111100017012078x0111100117112179y011110101721227Az011110111731237B{011111001741247C|011111011751257D}011111101761267E~011111111771277FDEL (Delete)删除2.通过urlencode工具UrlEncode编码/UrlDecode解码2.Http协议请求与响应格式2.1 Http请求首行: [方法] [url] [版本]Header: 请求的属性,冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束Body: 空行后面的内容都是 Body. Body 允许为空字符串. 如果 Body 存在, 则在Header 中会有一个Content-Length 属性来标识 Body 的长度;2.2Http响应首行: [版本号] [状态码] [状态码解释]Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束Body: 空行后面的内容都是 Body. Body 允许为空字符串. 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度; 如果服务器返回了一个 html 页面, 那么 html 页面内容就是在 body 中基本的应答格式2.3 Http方法接下来我们来看看这些方法我们常用的为GET、POST、PUT、DELETE2.3.1 GET方法用途 用于请求 URL 指定的资源示例 GET /index.html HTTP/1.1特性 指定资源经服务器端解析后返回响应内容form表单HTML 表单html格式2.3.2 POST方法用途 用于传输实体的主体 通常用于提交表单数据示例 POST /submit.cgi HTTP/1.1特性 可以发送大量的数据给服务器 并且数据包含在请求体中form 表单HTML 表单2.3.3 PUT方法用途 用于传输文件 将请求报文主体中的文件保存到请求 URL 指定的位置。示例 PUT /example.html HTTP/1.12.3.4 HEAD方法用途 与 GET 方法类似 但不返回报文主体部分 仅返回响应头。示例 HEAD /index.html HTTP/1.1特性 用于确认 URL 的有效性及资源更新的日期时间等。我们可以使用curl --head www.baidu.com命令来获取Linux curl 命令curl --head www.baidu.com HTTP/1.1 200 OK Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Content-Length: 0 Content-Type: text/html Pragma: no-cache Server: bfe Date: Tue, 05 May 2026 01:47:40 GMT curl -i www.baidu.com HTTP/1.1 200 OK Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Content-Length: 2381 Content-Type: text/html Pragma: no-cache Server: bfe Set-Cookie: BDORZ27315; max-age86400; domain.baidu.com; path/ Date: Tue, 05 May 2026 01:47:56 GMT !DOCTYPE html !--STATUS OK--html headmeta http-equivcontent-type contenttext/html;charsetutf-8meta http-equivX-UA-Compatible contentIEEdgemeta contentalways namereferrerlink relstylesheet typetext/css hrefhttp://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.csstitle百度一下你就知道/title/head body link#0000cc div idwrapper div idhead div classhead_wrapper div classs_form div classs_form_wrapper div idlg img hidefocustrue src//www.baidu.com/img/bd_logo1.png width270 height129 /div form idform namef action//www.baidu.com/s classfm input typehidden namebdorz_come value1 input typehidden nameie valueutf-8 input typehidden namef value8 input typehidden namersv_bp value1 input typehidden namersv_idx value1 input typehidden nametn valuebaiduspan classbg s_ipt_wrinput idkw namewd classs_ipt value maxlength255 autocompleteoff autofocus/spanspan classbg s_btn_wrinput typesubmit idsu value百度一下 classbg s_btn/span /form /div /div div idu1 a hrefhttp://news.baidu.com nametj_trnews classmnav新闻/a a hrefhttp://www.hao123.com nametj_trhao123 classmnavhao123/a a hrefhttp://map.baidu.com nametj_trmap classmnav地图/a a hrefhttp://v.baidu.com nametj_trvideo classmnav视频/a a hrefhttp://tieba.baidu.com nametj_trtieba classmnav贴吧/a noscript a hrefhttp://www.baidu.com/bdorz/login.gif?loginamp;tplmnamp;uhttp%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 nametj_login classlb登录/a /noscript scriptdocument.write(a hrefhttp://www.baidu.com/bdorz/login.gif?logintplmnu encodeURIComponent(window.location.href (window.location.search ? ? : ) bdorz_come1) nametj_login classlb登录/a);/script a href//www.baidu.com/more/ nametj_briicon classbri styledisplay: block;更多产品/a /div /div /div div idftCon div idftConw p idlh a hrefhttp://home.baidu.com关于百度/a a hrefhttp://ir.baidu.comAbout Baidu/a /p p idcpcopy;2017nbsp;Baidunbsp;a hrefhttp://www.baidu.com/duty/使用百度前必读/anbsp; a hrefhttp://jianyi.baidu.com/ classcp-feedback意见反馈/anbsp;京ICP证030173号nbsp; img src//www.baidu.com/img/gs.gif /p /div /div /div /body /html2.3.5 DELETE 方法用途 用于删除文件 是 PUT 的相反方法。示例 DELETE /example.html HTTP/1.1特性 按请求 URL 删除指定的资源2.3.6 OPTIONS 方法用途 用于查询针对请求 URL 指定的资源支持的方法。示例 OPTIONS * HTTP/1.1特性 返回允许的方法 如 GET、 POST 等2.4 Http状态码状态码状态码英文名称中文描述100Continue继续。客户端应继续其请求101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议例如切换到HTTP的新版本协议200OK请求成功。一般用于GET与POST请求201Created已创建。成功请求并创建了新的资源202Accepted已接受。已经接受请求但未处理完成203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器而是一个副本204No Content无内容。服务器成功处理但未返回内容。在未更新网页的情况下可确保浏览器继续显示当前文档205Reset Content重置内容。服务器处理成功用户终端例如浏览器应重置文档视图。可通过此返回码清除浏览器的表单域206Partial Content部分内容。服务器成功处理了部分GET请求300Multiple Choices多种选择。请求的资源可包括多个位置相应可返回一个资源特征与地址的列表用于用户终端例如浏览器选择301Moved Permanently永久移动。请求的资源已被永久的移动到新URI返回信息会包括新的URI浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI303See Other查看其它地址。与301类似。使用GET和POST请求查看304Not Modified未修改。所请求的资源未修改服务器返回此状态码时不会返回任何资源。客户端通常会缓存访问过的资源通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源305Use Proxy使用代理。所请求的资源必须通过代理访问306Unused已经被废弃的HTTP状态码307Temporary Redirect临时重定向。与302类似。使用GET请求重定向400Bad Request客户端请求的语法错误服务器无法理解401Unauthorized请求要求用户的身份认证402Payment Required保留将来使用403Forbidden服务器理解请求客户端的请求但是拒绝执行此请求404Not Found服务器无法根据客户端的请求找到资源网页。通过此代码网站设计人员可设置您所请求的资源无法找到的个性页面405Method Not Allowed客户端请求中的方法被禁止406Not Acceptable服务器无法根据客户端请求的内容特性完成请求407Proxy Authentication Required请求要求代理的身份认证与401类似但请求者应当使用代理进行授权408Request Time-out服务器等待客户端发送的请求时间过长超时409Conflict服务器完成客户端的 PUT 请求时可能返回此代码服务器处理请求时发生了冲突410Gone客户端请求的资源已经不存在。410不同于404如果资源以前有现在被永久删除了可使用410代码网站设计人员可通过301代码指定资源的新位置411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息412Precondition Failed客户端请求信息的先决条件错误413Request Entity Too Large由于请求的实体过大服务器无法处理因此拒绝请求。为防止客户端的连续请求服务器可能会关闭连接。如果只是服务器暂时无法处理则会包含一个Retry-After的响应信息414Request-URI Too Large请求的URI过长URI通常为网址服务器无法处理415Unsupported Media Type服务器无法处理请求附带的媒体格式416Requested range not satisfiable客户端请求的范围无效417Expectation Failed预期失败服务器无法满足请求头中 Expect 字段指定的预期行为。418Im a teapot状态码 418 实际上是一个愚人节玩笑。它在 RFC 2324 中定义该 RFC 是一个关于超文本咖啡壶控制协议HTCPCP的笑话文件。在这个笑话中418 状态码是作为一个玩笑加入到 HTTP 协议中的。500Internal Server Error服务器内部错误无法完成请求501Not Implemented服务器不支持请求的功能无法完成请求502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时从远程服务器接收到了一个无效的响应503Service Unavailable由于超载或系统维护服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中504Gateway Time-out充当网关或代理的服务器未及时从远端服务器获取请求505HTTP Version not supported服务器不支持请求的HTTP协议的版本无法完成处理重定向301Moved Permanently永久移动。请求的资源已被永久的移动到新URI返回信息会包括新的URI浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URISEO搜索引擎优化SEO 是指搜索引擎优化Search EngineOptimization是一种通过优化网站内容和结构提高网站在搜索引擎中的排名从而吸引更多访问者的技术和方法。简单来说SEO 就是让搜索引擎更好地理解和展示你的网站提高网站在搜索引擎中的曝光度和点击率。作者Dummer链接https://www.zhihu.com/question/601158045/answer/3030110370来源知乎著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。临时重定向临时重定向表示资源暂时被移动到了一个新的 URL但仍有可能返回原始 URL。搜索引擎会继续抓取和索引原始 URL因为它们认为这是临时的变动。Http响应中的头部信息HTTP/1.1302 Found\r\nLocation: https://www.new-url.com\r\n永久重定向永久重定向表示资源已经永久地移动到了一个新的 URL。与临时重定向不同搜索引擎会更新它们的索引将原始 URL 替换为新的 URL。这对于 SEO搜索引擎优化非常重要因为它可以保留原始页面的权重和排名。HTTP/1.1301 Moved Permanently\r\nLocation: https://www.new-url.com\r\n2.5 HTTP 常见 HeaderContent-Type: 数据类型(text/html 等)HTTP content-typeContent-Length: Body 的长度Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;User-Agent: 声明用户的操作系统和浏览器版本信息;referer: 当前页面是从哪个页面跳转过来的;Location: 搭配 3xx 状态码使用, 告诉客户端接下来要去哪里访问;Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;2.6 关于 connection 报头HTTP 中的 Connection 字段是 HTTP 报文头的一部分 它主要用于控制和管理客户端与服务器之间的连接状态管理持久连接Connection 字段还用于管理持久连接也称为长连接。持久连接允许客户端和服务器在请求/响应完成后不立即关闭 TCP 连接 以便在同一个连接上发送多个请求和接收多个响应。HTTP/1.1在 HTTP/1.1 协议中默认使用持久连接。 当客户端和服务器都不明确指定关闭连接时 连接将保持打开状态 以便后续的请求和响应可以复用同一个连接HTTP/1.0在 HTTP/1.0 协议中默认连接是非持久的。 如果希望在 HTTP/1.0上实现持久连接 需要在请求头中显式设置 Connection: keep-alive。语法格式Connection: keep-alive 表示希望保持连接以复用 TCP 连接。Connection: close 表示请求/响应完成后 应该关闭 TCP 连接。