Documentation ¶
Index ¶
- Constants
- func CapitalString(input string) string
- func CheckWriteHeaderCode(code int)
- func StatusText(code int32) string
- type Context
- type ContextState
- type H
- type HandlerFunc
- type Header
- type MIMEHeader
- type Request
- func (r *Request) FormRequest(method string, uri string, params map[string]string)
- func (r Request) GetParam(key string) (bool, string)
- func (r Request) GetValue(key string) any
- func (r *Request) HasEnoughData(buffer *[]byte, i int32, o int32, length int32) bool
- func (r *Request) HasLineData(buffer *[]byte, i int32, o int32, length int32) bool
- func (r *Request) Json(obj any)
- func (r *Request) ParseFirstReqLine(line string) bool
- func (r *Request) ParseParams(params string) error
- func (r *Request) ParseQuery() (bool, error)
- func (r *Request) Release()
- func (r *Request) SetBody(data []byte, length int32)
- func (r *Request) SetContentLength()
- func (r Request) ToRequestData() []byte
- type Response
- func (r *Response) GetHeader(key string) ([]string, bool)
- func (r *Response) Json(code int32, obj any)
- func (r *Response) ParseFirstResLine(line string) bool
- func (r *Response) Release()
- func (r *Response) SetBody(data []byte, length int32)
- func (r *Response) SetContentLength()
- func (r *Response) SetHeader(key string, value string)
- func (r *Response) Status(code int32)
- func (r Response) ToResponseData() []byte
Constants ¶
const ( // 和 GET 一樣,只是 HEAD 只會讀取 HTTP Header 的資料。 MethodHead = "HEAD" // 讀取資料 MethodGet = "GET" // 新增一項資料。(如果存在會新增一個新的) MethodPost = "POST" // 新增一項資料,如果存在就覆蓋過去(還是只有一筆資料)。因為是直接覆蓋,因此資料必須是完整的。 // 如果沒有傳,則會被更新為空值。 MethodPut = "PUT" // 附加新的資料在已經存在的資料後面(資料必須已經存在,PATCH 會擴充/更新這項資料)。 // 類似 PUT 方法,但沒有資料的欄位則不會更新,可以更新結構中的一部份。 MethodPatch = "PATCH" // 刪除資料。 MethodDelete = "DELETE" // 返回伺服器支援的方法。 MethodOptions = "OPTIONS" COLON = ":" // ================================================== // CORS // ================================================== HeaderOrigin = "Origin" HeaderCorsOrigin = "Access-Control-Allow-Origin" HeaderCorsMaxAge = "Access-Control-Max-Age" HeaderCorsMethods = "Access-Control-Allow-Methods" HeaderCorsCredentials = "Access-Control-Allow-Credentials" HeaderCorsAllowHeaders = "Access-Control-Allow-Headers" HeaderCorsExposeHeaders = "Access-Control-Expose-Headers" // Header Name HeaderAccept = "Accept" HeaderAcceptLanguage = "Accept-Language" HeaderAcceptEncoding = "Accept-Encoding" HeaderContentLanguage = "Content-Language" HeaderContentType = "Content-Type" HeaderCacheControl = "Cache-Control" HeaderDPR = "DPR" HeaderDownlink = "Downlink" HeaderExpires = "Expires" HeaderLastModified = "Last-Modified" HeaderPragma = "Pragma" HeaderSaveData = "Save-Data" HeaderViewportWidth = "Viewport-Width" HeaderWidth = "Width" HeaderHost = "Host" HeaderContentLength = "Content-Length" HeaderUserAgent = "User-Agent" )
const ( StatusContinue = 100 // RFC 9110, 15.2.1 StatusSwitchingProtocols = 101 // RFC 9110, 15.2.2 StatusProcessing = 102 // RFC 2518, 10.1 StatusEarlyHints = 103 // RFC 8297 StatusOK = 200 // RFC 9110, 15.3.1 StatusCreated = 201 // RFC 9110, 15.3.2 StatusAccepted = 202 // RFC 9110, 15.3.3 StatusNonAuthoritativeInfo = 203 // RFC 9110, 15.3.4 StatusNoContent = 204 // RFC 9110, 15.3.5 StatusResetContent = 205 // RFC 9110, 15.3.6 StatusPartialContent = 206 // RFC 9110, 15.3.7 StatusMultiStatus = 207 // RFC 4918, 11.1 StatusAlreadyReported = 208 // RFC 5842, 7.1 StatusIMUsed = 226 // RFC 3229, 10.4.1 StatusMultipleChoices = 300 // RFC 9110, 15.4.1 StatusMovedPermanently = 301 // RFC 9110, 15.4.2 StatusFound = 302 // RFC 9110, 15.4.3 StatusSeeOther = 303 // RFC 9110, 15.4.4 StatusNotModified = 304 // RFC 9110, 15.4.5 StatusUseProxy = 305 // RFC 9110, 15.4.6 StatusTemporaryRedirect = 307 // RFC 9110, 15.4.8 StatusPermanentRedirect = 308 // RFC 9110, 15.4.9 StatusBadRequest = 400 // RFC 9110, 15.5.1 StatusPaymentRequired = 402 // RFC 9110, 15.5.3 StatusForbidden = 403 // RFC 9110, 15.5.4 StatusNotFound = 404 // RFC 9110, 15.5.5 StatusMethodNotAllowed = 405 // RFC 9110, 15.5.6 StatusNotAcceptable = 406 // RFC 9110, 15.5.7 StatusProxyAuthRequired = 407 // RFC 9110, 15.5.8 StatusRequestTimeout = 408 // RFC 9110, 15.5.9 StatusConflict = 409 // RFC 9110, 15.5.10 StatusGone = 410 // RFC 9110, 15.5.11 StatusLengthRequired = 411 // RFC 9110, 15.5.12 StatusPreconditionFailed = 412 // RFC 9110, 15.5.13 StatusRequestEntityTooLarge = 413 // RFC 9110, 15.5.14 StatusRequestURITooLong = 414 // RFC 9110, 15.5.15 StatusUnsupportedMediaType = 415 // RFC 9110, 15.5.16 StatusRequestedRangeNotSatisfiable = 416 // RFC 9110, 15.5.17 StatusExpectationFailed = 417 // RFC 9110, 15.5.18 StatusTeapot = 418 // RFC 9110, 15.5.19 (Unused) StatusMisdirectedRequest = 421 // RFC 9110, 15.5.20 StatusUnprocessableEntity = 422 // RFC 9110, 15.5.21 StatusLocked = 423 // RFC 4918, 11.3 StatusFailedDependency = 424 // RFC 4918, 11.4 StatusTooEarly = 425 // RFC 8470, 5.2. StatusUpgradeRequired = 426 // RFC 9110, 15.5.22 StatusPreconditionRequired = 428 // RFC 6585, 3 StatusTooManyRequests = 429 // RFC 6585, 4 StatusRequestHeaderFieldsTooLarge = 431 // RFC 6585, 5 StatusInternalServerError = 500 // RFC 9110, 15.6.1 StatusNotImplemented = 501 // RFC 9110, 15.6.2 StatusBadGateway = 502 // RFC 9110, 15.6.3 StatusGatewayTimeout = 504 // RFC 9110, 15.6.5 StatusHTTPVersionNotSupported = 505 // RFC 9110, 15.6.6 StatusVariantAlsoNegotiates = 506 // RFC 2295, 8.1 StatusInsufficientStorage = 507 // RFC 4918, 11.5 StatusLoopDetected = 508 // RFC 5842, 7.2 StatusNotExtended = 510 // RFC 2774, 7 StatusNetworkAuthenticationRequired = 511 // RFC 6585, 6 )
HTTP status codes as registered with IANA. See: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
Variables ¶
This section is empty.
Functions ¶
func CapitalString ¶ added in v1.5.2
func CheckWriteHeaderCode ¶
func CheckWriteHeaderCode(code int)
func StatusText ¶
StatusText returns a text for the HTTP status code. It returns the empty string if the code is unknown.
Types ¶
type Context ¶
type Context struct { // 對應 連線結構 的 id Cid int32 // 對應 工作結構 的 id Wid int32 // 工作流程當前階段 State ContextState *Request *Response // contains filtered or unexported fields }
Request 和 Response 的 Header 應該分開來,因為端點函式中既會讀取 Request 的 Header,也會寫出 Response 的 Header。 透過不同函式來讀寫即可,記得保留 Context 送出 Request 的能力。
func NewContext ¶
type ContextState ¶ added in v1.5.0
type ContextState int8
const ( // 讀取第一行 READ_FIRST_LINE ContextState = iota // 讀取 Header READ_HEADER // 讀取 Data READ_BODY // 等待數據寫出(Response) WRITE_RESPONSE // 完成數據複製到寫出緩存 FINISH_RESPONSE )
HTTP 工作流程按照下方順序執行
func (ContextState) String ¶ added in v1.5.0
func (cs ContextState) String() string
type MIMEHeader ¶
A MIMEHeader represents a MIME-style header mapping keys to sets of values.
type Request ¶
type Request struct { // ex: GET Method string // ex: /user/get Query string // ex: HTTP/1.1 Proto string Params map[string]string Values map[string]any Header // 讀取長度 ReadLength int32 // Body 數據 // NOTE: Body 和 BodyLength 之後將改為私有變數,要存取的話需透過函式來操作。 Body []byte BodyLength int32 }
==================================================================================================== Request ====================================================================================================
func NewRequest ¶
func (*Request) FormRequest ¶
func (*Request) HasEnoughData ¶
func (*Request) HasLineData ¶
檢查是否有一行數據(以換行符 '\n' 來區分)
func (*Request) ParseFirstReqLine ¶
解析第一行數據 parseRequestLine parses "GET /foo HTTP/1.1" into its three parts.
func (*Request) ParseParams ¶
解析第一行數據中的請求路徑中的 GET 參數
func (*Request) SetContentLength ¶ added in v1.5.0
func (r *Request) SetContentLength()
協助設置標頭檔的 Content-Length
func (Request) ToRequestData ¶
type Response ¶
type Response struct { Code int32 Message string Proto string Header // 讀取長度 ReadLength int32 // Body 數據 // NOTE: Body 和 BodyLength 之後將改為私有變數,要存取的話需透過函式來操作。 Body []byte BodyLength int32 }
==================================================================================================== Response ====================================================================================================
func (*Response) ParseFirstResLine ¶
解析第一行數據 parseRequestLine parses "HTTP/1.1 200 OK" into its three parts.
func (*Response) SetContentLength ¶ added in v1.5.0
func (r *Response) SetContentLength()