系统学习HTTP
- 基础概念:请求和响应
- 如何调试:用node.js,可以用log/debugger
- 在哪查资料:Node.js,看Node.js文档
- 标准定制者:HTTP规格文档-RFC2612
1.HTTP基础概念
1.1请求
- 请求动词 路径加查询参数 协议名/版本
1.请求动词:get(获取内容) post(上传内容)
下例中:get是请求动词,没有路径和查询参数用/代替,HTTP协议/1.1版本
当输入搜索为:http://localhost:8888/?wd=hi
请求格式为;
- Host:域名或IP
- Accept: text/html 一般表示想接受什么内容(默认html、xhtml、xml等)
- Content-type:请求体的格式
一般请求的时候会上传一些内容,上传的内容放到请求体里
上传内容可能是:文本、图片、文件
具体内容就在此处写明 - 回车
- 请求体(也就是上传内容)
上传内容cmder:curl -X POST --data ‘上传内容’ http://localhost:8888/
查看上传内容:curl -v -X POST --data ‘上传内容’ http://localhost:8888/
1.1.1请求的细节
-
三部分:请求行(如:GET / HTTP/1.1)、请求头(Host、Accept、Content-type)、请求体
-
请求体在get请求一般是空的
curl -v http://localhost:8888/(Get请求) -
大小写不敏感
1.2 响应
-
协议名/版本 状态码 状态字符串
状态码:默认是200,200就是正常
状态字符串:一般没什么用,就是看响应是否正常 -
Content-type:响应体的格式
-
回车
-
响应体(也就是下载内容)
1.2.1响应细节 -
三部分:状态行、响应头、响应体
1.3用curl构造请求
curl -v -X POST http://localhost:8888/(v表示查看详细内容)
- 设置请求动词
1.改get为post:curl -v -X POST http://localhost:8888/
注意大小写 - 改路径和查询参数
curl -v -X POST http://localhost:8888/xxxx?wd=hi
其中xxxx表示路径,?wd=hi表示查询参数
注意:锚点是不会发送到服务器的 - 设置请求头
curl -v -X POST -H ‘Accept: text/html’ http://localhost:8888/xxxx?wd=hi
意思是:我要接受html 的内容 - 设置请求体
curl -v -X POST -H ‘Accept: text/html’ -H ‘content-Type: text/plain;charset=utf-8’ -d ‘请求体内容’ http://localhost:8888/xxxx?wd=hi
请求体一般和post连用
text/plain:表示纯文本,没有任何语法
告诉浏览器:我要上传纯文本,编码是utf-8,上传的内容是“请求体内容”
1.4 用 Node.js 读取请求
设置什么就可以读到什么,可以通过设置读取到请求里的所有东西
- 读取请求动词
怎么知道是post还是get
console.log('有个傻子发请求过来啦!路径(带查询参数)为:' + pathWithQuery)
console.log("method:= ");
console.log(method);//GET或者POST
发送和读取请求;
curl http://localhost:8888
curl -X POST http://localhost:8888
- 读取路径:
console.log('有个傻子发请求过来啦!路径(带查询参数)为:' + pathWithQuery)
pathWithQuery表示读取路径
cmder:curl -X POST http://localhost:8888/?hihi=ha
- 读取请求头
console.log("request.headers");
console.log(request.headers);
curl -H ‘Lzy: Good’ http://localhost:8888/
-H中为设置的请求头内容
- 读取请求体
1.4.1 用Node.js设置相应
- 设置响应状态码
response.statusCode = 200
其中200可以修改其他数字,只是系统不认识 - 设置响应头
response.setHeader(‘Content-Type’, ‘text/html;charset=utf-8’)
引号内的内容就是响应头,可以自己修改 - 设置响应体
response.write(这是js内容
)
可修改追加内容,write是可以追加的,可以分为两个write
1.5 curl的功能
curl可以完成chrome的基本所有功能
curl相当于一个浏览器,只是看不见
下载图片:
curl 图片地址 > 1.jpg
1.6 404页面
响应码为404也是可以显示内容的(要自己设置)
不管状态码是什么内容,都跟主体内容没什么关系。
平时的404页面是因为没有设置任何内容,chrome发现404没有任何内容就自己做了一个网页显示
console.log调试大法
所有编程语言都适用的调试方法
把你认为对的变量打出来,看它到底是不是对的
通过console.log来找不断尝试找bug验证
console.log("path:"+path)
表示path后面的路径不能加 .