HTTP协议 学习

                HTTP协议 学习

首先 附上 官方解释 和 别人的总结

官方解释 打开后 第14 Header Field Definitions 将header说的很清楚

http协议总结–厉害

http protocol (超文本传输协议) 主要用于浏览器和web服务器之间的通信. 而且一般明文传输 如果需要加密传输 可以使用 https

http协议由三部分组成:

  • 请求行 : 方法(post get等) [空格] 请求URI [空格] 版本号 [回车换行]

    如: GET /index.html HTTP/1.1

    POST http://192.168.2.217:8080/index.jsp HTTP/1.1

  • 头信息(分为 通用消息头 | 请求头 | 实体头 | 响应头) 每个头域由一个域名,冒号(:)和域值三部分组成. 头信息结束时需要一个空行和实体数据部分分开

    实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type(这个很重要)、 Etag、Expires、Last-Modified、extension-header。

    Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间;

    Accept代表请求头 – specify certain media types which are acceptable for the response. 就是表名客户端希望接受的MIME类型.

    比如:Accept:text/xml; 代表客户端希望接受的数据类型是xml类型

    Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。
    比如:Content-Type:text/html; 代表发送端发送的数据格式是html。

    二者合起来,
    Accept:text/xml;
    Content-Type:text/html
    即代表希望接受的数据类型是xml格式,本次请求发送的数据的数据格式是html。

    具体查看:https://kb.cnblogs.com/page/92320/

  • 实体内容 实体数据在请求时,如果以post方式提交时存储参数,以get方式请求时为空。在响应时,存储服务器端反馈的HTML源代码的数据

Content-Type

类型速查表:http://www.runoob.com/http/http-content-type.html

常见的cotent-Type的值

  1. application/x-www-form-urlencoded

    这个在form表单提交的时候 不设置enctype属性 则会以这种方式提交 如:

    POST http://www.example.com HTTP/1.1
    Content-Type: application/x-www-form-urlencoded;charset=utf-8
    title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

    首先,Content-Type 被指定为 application/x-www-form-urlencoded;
    其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。

  2. multipart/form-data

    form上设置enctype=”multipart/form-data” 或 上传文件时也会 如在js中利用formData上传视频或图片 content-Type为multipart/form-data

    POST http://www.example.com HTTP/1.1
    Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    Content-Disposition: form-data; name="text"
    title
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    Content-Disposition: form-data; name="file"; filename="chrome.png"
    Content-Type: image/png
    PNG ... content of chrome.png ...
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

    首先生成了一个 boundary 用于分割不同的字段(这个在form-data后面一般都有的),为了避免与正文内容重复,boundary 很长很复杂.

    然后 Content-Type 里指明了数据是以 mutipart/form-data 来编码,本次请求的 boundary 是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 –boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 –boundary– 标示结束

  3. application/json

    用来告诉服务端消息主体是序列化后的 JSON 字符串.各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。

以前在提交表单的时候 后台有的时候获取不到值 会认为是 后台问题 这个时候 可以看看在google浏览器F12 下的Network里查看前台是否有你发送的数据(在query parameters 或其他 地方)

常用的请求方式是GET和POST.

GET方式:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。

​ POST方式:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能:

1:对现有资源的解释;

2:向电子公告栏、新闻组、邮件列表或类似讨论组发信息;

3:提交数据块;

4:通过附加操作来扩展数据库 。

从上面描述可以看出,Get是向服务器发索取数据的一种请求;而Post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。

GET与POST方法有以下区别:

(1) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。

(2) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

(3) 安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。

这个参考:http://www.blogjava.net/zjusuyong/articles/304788.html

http状态码

分为5类

分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

猜你喜欢

转载自blog.csdn.net/liu981975231/article/details/80043430
今日推荐