【网络】HTTP协议(下)
目录
Content-Type
套接字地址复用
请求字段解释
http的状态码
请求方法
code
上篇博客讲了http请求和响应的基本格式,那么其中请求是浏览器发给我们服务器的,也就是说,里面的字段都是浏览器填充的;而我们需要做的是分析请求内容,然后把目标文件发给客户端。
Content-Type
那么其中在发回的响应内容中就有这么一个字段:响应报头,那么下面我们就来介绍一下响应报头中的Content-Type字段(这个字段就是告诉浏览器服务器发回的文件是什么类型的),里面要填充什么http协议已经规定好了,这个字段就是填充固定的一些内容,而这些内容是和文件后缀相关联的,其中我们可以参考比如下面的网站
Content-Type对照表
于是,我们可以把它们之间的对应关系用哈希表存起来,以方便后面的填充工作
套接字地址复用
我们可能会经常发现一个问题,如果我们将一个启动的http服务关掉后再用之前的端口号启动服务,这有时会出现bind error,这是因为有的客户端还没有来得及退出,服务关掉之后OS正在做一些收尾工作,此时端口号仍然被占用
我们要解决这个问题就是设置套接字地址复用
我们直接在封装套接字文件中加入这个接口的使用即可,其中这个接口一般是创建套接字成功,绑定之前用
请求字段解释
像这里面的host就是客户端告知服务器,所请求的资源是在那个主机的哪个端口上
user-agent就是声明用户的操作系统和浏览器版本信息
referer就是当前页面是从那个页面跳转过来的
http的状态码
响应字段的状态行有状态码,我们下面来解释一下各个状态码的含义
首先可以大体分为这么五类:
类别 | 原因短语 | |
1xx | informational(信息性状态码) | 接收的请求正在处理 |
2xx | success(成功状态码) | 请求正常处理完毕 |
3xx | redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4xx | client error(客户端错误状态码) | 服务器无法处理请求 |
5xx | server error(服务器错误状态码) | 服务器处理请求出错 |
下面是一些具体的状态码的具体含义
状态码 | 含义 | 应用样例 |
100 | continue | 上传大文件时服务器告诉客户端可以继续上传 |
200 | ok | 服务器处理成功请求 |
301 | moved permanently | 网站换域名后,自动跳转到新域名;搜索引擎更新网站链接时使用 |
302 | found或see other | 用户登录成功后,重定向到用户首页 |
304 | not modified | 浏览器缓存机制,对未修改的资源返回304状态码 |
404 | not found | 浏览器请求的资源不存在 |
500 | internal server error | 内部服务器出错 |
我们一般用重定向的话就是用302,我们只需要在响应内容中设置状态码为302,并且响应报头中添加"Location"字段即可。这就是告诉浏览器,你要重定向到Location中的地址去
这个就是实现浏览器访问我们的服务后自动跳转到qq.com
服务器遇到不认识的文件就应该返回404界面,不认识体现在代码中就是读取不到文件
请求方法
我们可以看到请求报文中第一行有个GET,这其实就是请求方法,除此之外,用的比较多的还有POST
GET一般是获取资源,POST是通过前端界面向服务器提交一些信息,当然GET也可以提交信息,只不过他们提交信息的方式有差别:GET提交的内容体现在uri中,而POST提交的内容体现在正文中,所以POST可以传更多的数据
并且这里的请求方法跟前端表单中的method是相互对应的,比如下面表单中的method是get
意味着点击提交按钮之后,里面的数据就会以get为请求方法向index.html中发起请求
我们能看到用户输入的内容就是以uri的形式存在,所以在我们处理uri的时候,还要判断目录后面是否加上了实际的内容信息,我们还需要提取出来
如果请求方法是post就不用请求了,因为用户输入的内容就在请求正文中
遇到用户输入的数据,我们一般需要的不是发回一个网页,而是运行一个功能对数据做利用
所以,浏览器不仅可以请求一个前端页面,还可以请求一个功能
code
http.dir/Http.hpp · 巨新豪/linuxcode - 码云 - 开源中国