首页 > 其他分享 >HTTP1-0的4个元素

HTTP1-0的4个元素

时间:2023-07-01 19:55:56浏览次数:39  
标签:http 首部 元素 -- HTTP1 服务器 curl hello

HTTP1.0的4个基本元素

HTTP的4个基本元素分别是

  • 方法和路径
  • 首部
  • 主体
  • 状态码

这里简要总结《详解HTTP》中的内容。首先利用Go语言简要实现一个显示hello的echo 服务器。


package main

import (
	"fmt"
	"log"
	"net/http"
	"net/http/httputil"
)

func handler(w http.ResponseWriter, r *http.Request) {
	dump, err := httputil.DumpRequest(r, true)
	if err != nil {
		http.Error(w, fmt.Sprint(err), http.StatusInternalServerError)
		return
	}
	fmt.Println(string(dump))
	fmt.Fprintf(w, "<html><boyd>hello</body></html>\n")
}

func main() {
	var httpServer http.Server
	http.HandleFunc("/", handler)
	log.Println("start http listening:18888")
	httpServer.Addr = ":18888"
	log.Println(httpServer.ListenAndServe())
}

这里我们直接go run server.go即可在终端中运行。如果成功,我们可以在终端看到日期+时间+start http listening:1888的字样。在浏览器中输入localhost:1888,我们应该也可以看到hello字样了。

curl的简单使用

curL默认最低支持HTTP1.0(记得curl默认只能在cmd中运行)。在HTTP0.9中,协议只支持向服务器请求网站的页面,并接收网站的内容作为响应,接收完毕就自动切断连接。0.9中的表单查询功能一直延续至今。请求端在地址末尾用“?”词语(“+”隔开)来发送请求。我们可以利用curl中的--data-urlencode来自动在地址加上内容。比如curl --http1.0 -G --data-urlencode "search hello" http://localhost:18888。我们可以看到:
xv6UDH.png

方法

方法表示服务器对指定地址中的资源进行操作。最早来源于新闻组的需求,延续到HTTP协议中。

比较常用的有:

  • GET: 向服务器请求首部和内容
  • HEAD: 只向服务器请求首部
  • POST: 投递新的文档
  • PUT: 更新已经存在的URL的文档
  • DELETE: 删除指定的URL的文档

首部

首部最早在电子邮件服务中出现,格式一般是“字段名:值”。在curl中,可以通过--header=/-H 来更改或添加首部。各个程序可以添加X-格式的首部,不过现在趋势就是尽可能使用本来RFC定义的首部。比如我们可以手动更改User-Agent的信息(-A):curl -v --http1.0 -G -A "Mozilla/5.0" http://localhost:18888
xvgMfx.png

这样看就仿佛是火狐浏览器发了一个GET请求。这里的-v可以让我们在客户端看到详细日志,包括服务器的信息。
xvgrjS.png

这里的Content-Type表示MIME类型字符串。

状态码

上图中的200 OK就是状态码。

  • 1字头表示正在处理的信息
  • 2字头表示成功时的响应
  • 3字头表示服务器给客户端的响应
  • 4字头表示客户端发送异常请求
  • 5字头表示服务器发生内部错误

其中3字头有部分是指示浏览器进行重定向到别的路径的。浏览器会根据状态码决定是临时重定向还是永久重定向,根据location首部决定重定向的路径。

主体

主体和首部隔一行。在curl中可以通过-d / --data / --data-ascii来发送编码后的文本数据,比如我们试图发送一个简单的JSON文件curl -d "{\hello\": \"world\"}" -H "Content-Type application/json" http://localhost:18888。我们自然会在服务器看到{\hello": "world"}的表示。

标签:http,首部,元素,--,HTTP1,服务器,curl,hello
From: https://www.cnblogs.com/wyfc4/p/17519819.html

相关文章

  • 【leetcode】【83】【移除链表元素】
    c++第一个方法#include<algorithm>#include<iostream>#include<memory>#include<vector>//Definitionforsingly-linkedlist.structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}Li......
  • 光脚丫学LINQ(009):选择各个源元素的子集
    视频演示:http://u.115.com/file/f2d7193f3a 选择源序列中的各个元素的子集有两种主要方法:1、若要只选择源元素的一个成员,请使用点运算。在下面的示例中,假定Customer对象包含几个公共属性,其中包括名为City的字符串。在执行此查询时,此查询将生成字符串输出序列。NorthwindDataCo......
  • [代码]元素的附加和克隆(LINQ to XML)
    当将一个XElement对象添加给一个XML树的时候,如果此XElement对象没有父级,即不是另外一个XML树的一部分,此时将会将此元素直接添加给XML树;如果XElement对象有父级,则会克隆这个XElement对象,然后将克隆的对象添加到新的XML树。示例代码代码中的Child1被添加到XmlTree1元素,因此它已经有了......
  • web自动化测试入门篇05——元素定位的配置管理
      ......
  • 【前端教程03】for循环冒泡排序、去重、查找重复元素
    //升序constbubbleSort=(arr)=>{for(leti=0;i<arr.length;i++){for(letj=0;j<arr.length-i;j++){if(arr[j]>arr[j+1]){lettmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-5-元素定位大法-上篇
    1.简介说到元素定位,小伙伴或者童鞋们肯定会首先想到selenium的八大元素定位大法。同理Playwright也有自己的元素定位的方法。今天就给小伙伴或者童鞋们讲解和分享一下Playwright的元素定位方法。宏哥对UI自动化的理解:定位元素--->操作元素---->断言。2.定位器定位器(Locator)......
  • 【leetcode】【83】【删除排序链表中的重复元素】
    c++第一个方法代码#include<algorithm>#include<iostream>#include<memory>#include<vector>//Definitionforsingly-linkedlist.structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}......
  • HTML5--块元素和内联元素
     块元素内联元素(行内元素)在页面中独占一行,自上向下排列不独占一行,只占自身大小可以设置width,height属性设置width,height属性无效包含内联元素和其他块元素包含其他内联元素,不包含块元素常见块元素:div,form,h1~h6,hr,p,table,ul常见内联元素:a,b,......
  • js原生方法:获取某个元素所处屏幕的位置,input输入框中文输入时的调用
    span.getBoundingClientRect()会返回改元素的位置信息//输入框内容改变functioninputSearchChange(){//如果是拼音输入,则会进入这个监听inputSearch.addEventListener('compositionstart',()=>{lastInputValue=inputSearch.valueisPinyin=true}......
  • 元素水平垂直居中的方法
     //利用定位+margin:auto    //position:absolute;    //top:0;    //Left:0;    //right:0;    //bottom:0;    //margin:auto;//利用定位+margin:负值    //position:absolute;    //top......