工作了大半年,碰到了2次关于http通信相关的需求,虽然底层的代码都无需再写,但所谓知其然知其所以然,搞明白http的原理对相关的编程还是很有帮忙的,借此整理下。
1、搞明白什么是http
通常我们学习socket编程的时候都会自己写一个server和一个client,server设置IP和端口,client通过该IP和端口去访问server,client和server就可以做一些简单的通信了。这种最简单的socket程序属于TCP通信。http就要比tcp高一个层次,怎么体现层次感呢,就是传属于http的一串参数 如 GET /xxx/xxx HTTP/1.1。当然要使通信属于是http通信,需要client和server共同支持。
接下来从client的角度来看看这一串参数该如何写才能让server正确识别呢。从书上盗两张图,上图
sp:空格 cr:回车 lf:换行
请求行:
方法:最常用的是GET和POST,其他还有许多,可网上搜索或翻阅资料
URL:一般就是网站的地址
版本:版本号,如HTTP/1.1
首部行
这边的参数通常都是一些选项,如Accept: xxx/jpg 表明我只请求server中jpg格式的图片
主体
主体中参数格式就随便定义了,主要client和server达成一致即可。像一般的通信都需要认证,client都会在主体中将用户名密码发送到server,server认证成功后返回相应的信息。之前碰到的格式是: username=xxx&password=xxx...
状态行:
版本 状态码 短语, 如返回成功就返回 HTTP/1.1 200 OK
首部行:和请求报文类似
主体: 和请求报文类似