HTTP

HTTP(hyper text transfer protocol)  超文本传输协议

作用: 规定客户端和服务器之间数据传输的格式。

特点:基于请求与响应模式,基于TCP/IP协议,无状态,应用层的协议。

一个post请求:

POST  /index.php HTTP/1.1    请求行(请求方法  请求地址(正常应该是 很长,这里应该是本地测试所以相对路径很短)  http版本)

Host: localhost                                    (主机 ip或者域名,这里是本地所以是localhost)         请求头(从这里一直到下面的空行都是请求头,里面包含了这个请求的信息,语言,内容长度,这类的,方便服务器接收后解析使用)

User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2  客户端信息(操作系统,浏览器等)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8                                 客户端接收的信息类型(客户端支持什么类型的数据)  这里是text,html,application

Accept-Language: zh-cn,zh;q=0.5                                                                                        字符集,这里可以看出是中文

Accept-Encoding: gzip, deflate                                                                                             编码

Connection: keep-alive                                                                                                         连接状况(保持连接)

Referer: http://localhost/                                                                                                       当前url文档(从哪个url跳转过来的,用来防盗链,或者统计(比如做了个网站,统计一下是百度跳转过来的多,还是谷歌跳转过来的多=。=))  这里是本地服务器启动直接跳转的所以是localhost

Content-Length:25                                                                                                             数据长度  usern   ame=a   a&pas   sword   =1234     正好25个字符

Content-Type:application/x-www-form-urlencoded                                                           请求体数据类型

(空一行)

username=aa&password=1234  请求数据(这里看样子是登录时是向后台传参,如果是后台向客户端传递静态页面,会传一个html文本)

reference:https://blog.csdn.net/ailunlee/article/details/90600174

另外请求头里面可能会有

authorization  是权限认证,服务器根据这个判定你请求的页面你是否有权查看

cookie            cookie主要是记录你的网页浏览信息(比如你是否登陆过了等),和上面的配合,用来查看权限。

请求方法:

get                 请求资源

post               提交资源

head              获取响应

put                 替换资源

delete            删除资源

options          查看服务器性能(预请求,在get或者put请求前,会先发options请求查看连接情况)

trace             回显服务器收到的请求,用于测试或诊断

connect        让服务器作为代理去访问别的网页(翻墙= =)

响应报文(服务器收到客户端请求后返回的报文,一般是个页面)

二、HTTP响应报文

HTTP响应报文由三个部分组成,分别是:状态行、消息报头、响应正文。
状态行包括:服务器HTTP协议的版本、服务器发回的响应状态代码、状态代码的文本描述。

HTTP响应头部包括的信息:
Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
Server:apache tomcat(服务端的Web服务端名)
Content-Encoding: gzip(服务端能够发送压缩编码类型)
Content-Length: 80(服务端发送的压缩数据的长度)
Content-Language: zh-cn(服务端发送的语言类型)
Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
Last-Modified: Tue, 18 Jul 2017 12:15:02 GMT(服务端对该资源最后修改的时间)
Refresh: 1;url=http://www.helloyoucan.com.(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
Transfer-Encoding: chunked(分块传递数据到客户端)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
Expires: -1//3种(服务端禁止客户端缓存页面数据)
Cache-Control: no-cache(服务端禁止客户端缓存页面数据)
Pragma: no-cache(服务端禁止客户端缓存页面数据)
Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
Date: Tue, 18 Jul 2017 12:18:03 GMT(服务端响应客户端的时间)

reference: https://www.cnblogs.com/xidian2014/p/10333961.html

重点说一下:响应状态代码 (这个东西字节跳动面试的时候问过)

reference: https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin

1xx  消息:这一类型的状态码,代表请求已被接受,需要继续处理。 (一般看不到,因为就是表示服务器收到了请求,然后很快就转化为其他相应了)

2xx  成功:这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。  最常见:200 成功

3xx  重定向:这类状态码代表需要客户端采取进一步的操作才能完成请求。  最常见:304 因为缓存未被修改。

4xx  请求错误:这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。 404 未发现页面(网址写错了)

5xx,6xx  服务器错误:这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。  常见:500(服务器源码出错)  505(http版本不符,面试的时候问的这个- -)

原文地址:https://www.cnblogs.com/clamp7724/p/12344099.html