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进行判断,如果请求来自本网站,那么允许下载,如果非本网站,先跳转到本网站看广告,然后再允许下载。
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.

posted @   陈彦斌  阅读(285)  评论(0编辑  收藏  举报
编辑推荐:
· .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 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
主题色彩