Http协议
Http协议#
一、概述#
HTTP(Hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间相互通信规则。
HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。客户端发送给服务器的格式叫"请求协议";服务器发送给客户端的格式叫"相应协议"。
特点:
• HTTP叫超文本传输协议,基于请求/相应模式
• HTTP是无状态协议。
URL:统一资源定位符,就是个网络地址:协议名://域名:端口/路径
二、请求协议#
1 请求首行; //请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1 2 请求头信息; //请求头名称:请求头内容,即为key:value格式,例如:Host:localhost 3 空行; // 用来与请求体分割开 4 请求体; // GET没有请求体,只有POST有请求体
注:在HTTP协议中,请求有很多请求方法,其中最为常用的就是GET和POST。
2.1 GET请求
HTTP默认的请求方法就是GET
•没有请求体
•数据必须在1K之内
•GET请求数据会暴露在浏览器的地址栏中
GET请求常用的操作:
1.在浏览器的地址栏中直接给出URL,就一定是GET请求
2.点击页面上的超链接也一定是GET请求
3.提交表单时,表单默认使用GET请求,但可以设置为POST
1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 2 Accept-Encoding:gzip, deflate, sdch 3 Accept-Language:zh-CN,zh;q=0.8 4 Cache-Control:no-cache 5 Connection:keep-alive 6 Cookie:csrftoken=z5H43ZwARx7AIJ82OEizBOWbsAQA2LPk 7 Host:127.0.0.1:8090 8 Pragma:no-cache 9 Upgrade-Insecure-Requests:1 10 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36 11 Name 12 login/ 13 requests ❘ 737 B transferred ❘ Finish: 5 ms ❘ DOMContentLoaded: 14 ms ❘ Load: 14 ms
•Host:localhost:请求的主机名
•*User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0:与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;
•Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8:告诉服务器,当前客户端可以接收的文档类型,其实这里包含了*/*,就表示什么都可以接收;
•Accept-Language: zh-cn,zh;q=0.5:当前客户端支持的语言,可以在浏览器的工具选项中找到语言相关信息;
•Accept-Encoding: gzip, deflate:支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
•Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7:客户端支持的编码;
•Connection: keep-alive:客户端支持的链接方式,保持一段时间链接,默认为3000ms;
•Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过;这个Cookie的名字为JSESSIONID
2.2 POST请求
1、数据不会出现在地址栏中
2、数据的大小没有上限
3、有请求体
4、请求体重如果存在中文,会使用URL编码(username=%E5%BC%A0%E4%B8%89&password=123)
表单发POST请求,默认是GET
1 <form action="" method="post"> 2 用户名:<input type="text" name="username"> 3 <input type="submit" value="提交"/> 4 </form>

1 Request Headers 2 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 3 Accept-Encoding:gzip, deflate 4 Accept-Language:zh-CN,zh;q=0.8 5 Cache-Control:no-cache 6 Connection:keep-alive 7 Content-Length:13 8 Content-Type:application/x-www-form-urlencoded 9 Cookie:csrftoken=z5H43ZwARx7AIJ82OEizBOWbsAQA2LPk 10 Host:127.0.0.1:8090 11 Origin:http://127.0.0.1:8090 12 Pragma:no-cache 13 Referer:http://127.0.0.1:8090/login/ 14 Upgrade-Insecure-Requests:1 15 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) 16 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36 17 18 Form Data 19 username:yuan

1 Referer请求头是比较有用的一个请求头,它可以用来做统计工作,也可以用来做防盗链。 2 统计工作:我公司网站在百度上做了广告,但不知道在百度上做广告对我们网站的访问量是否有影响,那么可以对每个请求中的Referer进行分析,如果Referer为百度的很多,那么说明用户都是通过百度找到我们公司网站的。 3 防盗链:我公司网站上有一个下载链接,而其他网站盗链了这个地址,例如在我网站上的index.html页面中有一个链接,点击即可下载JDK7.0,但有某个人的微博中盗链了这个资源,它也有一个链接指向我们网站的JDK7.0,也就是说登录它的微博,点击链接就可以从我网站上下载JDK7.0,这导致我们网站的广告没有看,但下载的却是我网站的资源。这时可以使用Referer进行防盗链,在资源被下载之前,我们对Referer进行判断,如果请求来自本网站,那么允许下载,如果非本网站,先跳转到本网站看广告,然后再允许下载。
三 相应协议#
3.1 相应内容

1 响应首行; 2 响应头信息; 3 空行; 4 响应体;
响应内容是由服务器发送给浏览器的内容,浏览器会根据响应内容来显示。
Request URL:http://127.0.0.1:8090/login/ Request Method:GET Status Code:200 OK Remote Address:127.0.0.1:8090 Response Headers view source Content-Type:text/html; charset=utf-8 Date:Wed, 26 Oct 2016 06:48:50 GMT Server:WSGIServer/0.2 CPython/3.5.2 X-Frame-Options:SAMEORIGIN <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/login/" method="post"> 用户名:<input type="text" name="username"/> <input type="submit" value="提交"/> </form> </body> </html>
•HTTP/1.1 200 OK:响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释;
•Server:WSGIServer/0.2 CPython/3.5.2:服务器的版本信息;
•Content-Type: text/html;charset=UTF-8:响应体使用的编码为UTF-8;
•Content-Length: 724:响应体为724字节;
•Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:响应给客户端的Cookie;
•Date: Wed, 25 Sep 2012 04:15:03 GMT:响应的时间;
3.2 状态码
响应头对浏览器来说很重要,他说明了响应的真正含义
•200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
•404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
•500:请求资源找到了,但服务器内部出现了错误;
•302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;
3.3 HTML中指定响应头
在HTMl页面中可以使用<meta http-equiv="" content="">来指定响应头,例如在index.html页面中给出<meta http-equiv="Refresh" content="3;url=http://www.baidu.com">,表示浏览器只会显示index.html页面3秒,然后自动跳转到http://www.baidu.com.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?